Threading and bug fixes
This commit is contained in:
parent
c8881c23de
commit
fff6824b30
@ -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
13
main.py
@ -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()
|
||||
|
||||
@ -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)
|
||||
@ -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
|
||||
|
||||
@ -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__))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user