Threading and bug fixes

This commit is contained in:
Sai Raj 2024-08-03 15:59:03 -04:00
parent c8881c23de
commit fff6824b30
5 changed files with 36 additions and 32 deletions

View File

@ -21,7 +21,7 @@ BLOCKBOOK_NETURL = "https://blockbook.ranchimall.net/"
TOKENAPI_SSE_URL = "https://ranchimallflo.duckdns.org/"
MAINNET_BLOCKBOOK_SERVER_LIST = ["https://blockbook.ranchimall.net/"]
TESTNET_BLOCKBOOK_SERVER_LIST = ["https://blockbook-testnet.ranchimall.net/"]
IGNORE_BLOCK_LIST = 902446
IGNORE_BLOCK_LIST = [902446]
#IGNORE_TRANSACTION_LIST = "b4ac4ddb51188b28b39bcb3aa31357d5bfe562c21e8aaf8dde0ec560fc893174"
"""?NOT USED?

13
main.py
View File

@ -1,5 +1,6 @@
import sys
import time
import threading
from src.api.api_main import start_api_server
from src.backend.backend_main import start_backend_process
import config as config
@ -20,12 +21,16 @@ if __name__ == "__main__":
# start the backend process (token scanner). pass reset=True if --reset is in command-line args
if "--reset" in sys.argv or "-r" in sys.argv:
start_backend_process(config=_config, reset=True)
t1 = threading.Thread(target=lambda:start_backend_process(config=_config, reset=True))
else:
start_backend_process(config=_config)
t1 = threading.Thread(target=lambda:start_backend_process(config=_config))
t1.start()
# sleep until backend is started, so that API server can function correctly (TODO: sleep until backend process returns some flag indicating its started)
time.sleep(DELAY_API_SERVER_START)
# start the API server
start_api_server(config=_config)
t2 = threading.Thread(target=lambda: start_api_server(config=_config))
t2.start()
t1.join()
t2.join()

View File

@ -10,7 +10,7 @@ from quart import jsonify, make_response, Quart, render_template, request, flash
from quart_cors import cors
import asyncio
from typing import Optional
import parsing
import src.api.parsing as parsing
import subprocess
from apscheduler.schedulers.background import BackgroundScheduler
import atexit
@ -29,12 +29,6 @@ INTERNAL_ERROR = "Unable to process request, try again later"
# Global values and configg
internalTransactionTypes = [ 'tokenswapDepositSettlement', 'tokenswapParticipationSettlement', 'smartContractDepositReturn']
if net == 'mainnet':
is_testnet = False
elif net == 'testnet':
is_testnet = True
# Validation functionss
def check_flo_address(floaddress, is_testnet=False):
return pyflo.is_address_valid(floaddress, testnet=is_testnet)
@ -2883,7 +2877,7 @@ def initialize_db():
updatePrices()
def set_configs(config):
global DATA_PATH, apiUrl, FLO_DATA_DIR, API_VERIFY, debug_status, HOST, PORT, APP_ADMIN
global DATA_PATH, apiUrl, FLO_DATA_DIR, API_VERIFY, debug_status, HOST, PORT, APP_ADMIN, NET, is_testnet
DATA_PATH = config["DATA_PATH"]
apiUrl = config["apiUrl"]
FLO_DATA_DIR = config["FLO_DATA_DIR"]
@ -2892,6 +2886,11 @@ def set_configs(config):
HOST = config["HOST"]
PORT = config["PORT"]
APP_ADMIN = config["APP_ADMIN"]
NET = config["NET"]
if NET == 'mainnet':
is_testnet = False
elif NET == 'testnet':
is_testnet = True
def init_process():
initialize_db()
@ -2905,4 +2904,5 @@ def init_process():
def start_api_server(config):
set_configs(config)
init_process()
print("Starting API server at port=", PORT)
app.run(debug=debug_status, host=HOST, port=PORT)

View File

@ -11,25 +11,24 @@ from sqlalchemy import create_engine, func, and_
from sqlalchemy.orm import sessionmaker
import time
import arrow
import parsing
from parsing import perform_decimal_operation
import src.backend.parsing as parsing
from src.backend.parsing import perform_decimal_operation
import re
from datetime import datetime
from ast import literal_eval
from models import SystemData, TokenBase, ActiveTable, ConsumedTable, TransferLogs, TransactionHistory, TokenContractAssociation, ContractBase, ContractStructure, ContractParticipants, ContractTransactionHistory, ContractDeposits, ConsumedInfo, ContractWinners, ContinuosContractBase, ContractStructure2, ContractParticipants2, ContractDeposits2, ContractTransactionHistory2, SystemBase, ActiveContracts, SystemData, ContractAddressMapping, TokenAddressMapping, DatabaseTypeMapping, TimeActions, RejectedContractTransactionHistory, RejectedTransactionHistory, LatestCacheBase, LatestTransactions, LatestBlocks
from statef_processing import process_stateF
from src.backend.models import SystemData, TokenBase, ActiveTable, ConsumedTable, TransferLogs, TransactionHistory, TokenContractAssociation, ContractBase, ContractStructure, ContractParticipants, ContractTransactionHistory, ContractDeposits, ConsumedInfo, ContractWinners, ContinuosContractBase, ContractStructure2, ContractParticipants2, ContractDeposits2, ContractTransactionHistory2, SystemBase, ActiveContracts, SystemData, ContractAddressMapping, TokenAddressMapping, DatabaseTypeMapping, TimeActions, RejectedContractTransactionHistory, RejectedTransactionHistory, LatestCacheBase, LatestTransactions, LatestBlocks
from src.backend.statef_processing import process_stateF
import asyncio
import websockets
from decimal import Decimal
import pdb
from util_rollback import rollback_to_block
from src.backend.util_rollback import rollback_to_block
RETRY_TIMEOUT_LONG = 30 * 60 # 30 mins
RETRY_TIMEOUT_SHORT = 60 # 1 min
DB_RETRY_TIMEOUT = 60 # 60 seconds
def newMultiRequest(apicall):
current_server = serverlist[0]
while True:
@ -2639,8 +2638,7 @@ def initiate_process():
serverlist = _config['TESTNET_BLOCKBOOK_SERVER_LIST']
APP_ADMIN = 'oWooGLbBELNnwq8Z5YmjoVjw8GhBGH3qSP'
websocket_uri = get_websocket_uri(testnet=True)
serverlist = serverlist.split(',')
#serverlist = serverlist.split(',')
global neturl
neturl = _config['BLOCKBOOK_NETURL']
global api_url
@ -2648,19 +2646,20 @@ def initiate_process():
global tokenapi_sse_url
tokenapi_sse_url = _config['TOKENAPI_SSE_URL']
global API_VERIFY
API_VERIFY = _config['API_VERIFY']
if API_VERIFY == 'False':
API_VERIFY = False
elif API_VERIFY == 'True':
API_VERIFY = True
if 'API_VERIFY' in _config:
if isinstance(_config['API_VERIFY'], bool):
API_VERIFY = _config['API_VERIFY']
elif isinstance(_config['API_VERIFY'], str):
API_VERIFY = False if _config['API_VERIFY'] == 'False' else True
else:
API_VERIFY = bool(_config['API_VERIFY'])
else:
API_VERIFY = True
global IGNORE_BLOCK_LIST #, IGNORE_TRANSACTION_LIST
IGNORE_BLOCK_LIST = _config['IGNORE_BLOCK_LIST'].split(',')
IGNORE_BLOCK_LIST = [int(s) for s in IGNORE_BLOCK_LIST]
#IGNORE_TRANSACTION_LIST = _config['IGNORE_TRANSACTION_LIST'].split(',')
IGNORE_BLOCK_LIST = _config['IGNORE_BLOCK_LIST']
#IGNORE_BLOCK_LIST = [int(s) for s in IGNORE_BLOCK_LIST]
#IGNORE_TRANSACTION_LIST = _config['IGNORE_TRANSACTION_LIST']
def start_backend_process(config, reset = False):
global _config

View File

@ -1,13 +1,13 @@
import argparse
from sqlalchemy import create_engine, func
from sqlalchemy.orm import sessionmaker
from models import SystemData, TokenBase, ActiveTable, ConsumedTable, TransferLogs, TransactionHistory, TokenContractAssociation, RejectedTransactionHistory, ContractBase, ContractStructure, ContractParticipants, ContractTransactionHistory, ContractDeposits, ConsumedInfo, ContractWinners, ContinuosContractBase, ContractStructure2, ContractParticipants2, ContractDeposits2, ContractTransactionHistory2, SystemBase, ActiveContracts, SystemData, ContractAddressMapping, TokenAddressMapping, DatabaseTypeMapping, TimeActions, RejectedContractTransactionHistory, RejectedTransactionHistory, LatestCacheBase, LatestTransactions, LatestBlocks
from src.backend.models import SystemData, TokenBase, ActiveTable, ConsumedTable, TransferLogs, TransactionHistory, TokenContractAssociation, RejectedTransactionHistory, ContractBase, ContractStructure, ContractParticipants, ContractTransactionHistory, ContractDeposits, ConsumedInfo, ContractWinners, ContinuosContractBase, ContractStructure2, ContractParticipants2, ContractDeposits2, ContractTransactionHistory2, SystemBase, ActiveContracts, SystemData, ContractAddressMapping, TokenAddressMapping, DatabaseTypeMapping, TimeActions, RejectedContractTransactionHistory, RejectedTransactionHistory, LatestCacheBase, LatestTransactions, LatestBlocks
from ast import literal_eval
import os
import json
import logging
import sys
from parsing import perform_decimal_operation
from src.backend.parsing import perform_decimal_operation
apppath = os.path.dirname(os.path.realpath(__file__))