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/"
|
TOKENAPI_SSE_URL = "https://ranchimallflo.duckdns.org/"
|
||||||
MAINNET_BLOCKBOOK_SERVER_LIST = ["https://blockbook.ranchimall.net/"]
|
MAINNET_BLOCKBOOK_SERVER_LIST = ["https://blockbook.ranchimall.net/"]
|
||||||
TESTNET_BLOCKBOOK_SERVER_LIST = ["https://blockbook-testnet.ranchimall.net/"]
|
TESTNET_BLOCKBOOK_SERVER_LIST = ["https://blockbook-testnet.ranchimall.net/"]
|
||||||
IGNORE_BLOCK_LIST = 902446
|
IGNORE_BLOCK_LIST = [902446]
|
||||||
#IGNORE_TRANSACTION_LIST = "b4ac4ddb51188b28b39bcb3aa31357d5bfe562c21e8aaf8dde0ec560fc893174"
|
#IGNORE_TRANSACTION_LIST = "b4ac4ddb51188b28b39bcb3aa31357d5bfe562c21e8aaf8dde0ec560fc893174"
|
||||||
|
|
||||||
"""?NOT USED?
|
"""?NOT USED?
|
||||||
|
|||||||
13
main.py
13
main.py
@ -1,5 +1,6 @@
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
|
import threading
|
||||||
from src.api.api_main import start_api_server
|
from src.api.api_main import start_api_server
|
||||||
from src.backend.backend_main import start_backend_process
|
from src.backend.backend_main import start_backend_process
|
||||||
import config as config
|
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
|
# 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:
|
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:
|
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)
|
# 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)
|
time.sleep(DELAY_API_SERVER_START)
|
||||||
|
|
||||||
# start the API server
|
# 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
|
from quart_cors import cors
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
import parsing
|
import src.api.parsing as parsing
|
||||||
import subprocess
|
import subprocess
|
||||||
from apscheduler.schedulers.background import BackgroundScheduler
|
from apscheduler.schedulers.background import BackgroundScheduler
|
||||||
import atexit
|
import atexit
|
||||||
@ -29,12 +29,6 @@ INTERNAL_ERROR = "Unable to process request, try again later"
|
|||||||
# Global values and configg
|
# Global values and configg
|
||||||
internalTransactionTypes = [ 'tokenswapDepositSettlement', 'tokenswapParticipationSettlement', 'smartContractDepositReturn']
|
internalTransactionTypes = [ 'tokenswapDepositSettlement', 'tokenswapParticipationSettlement', 'smartContractDepositReturn']
|
||||||
|
|
||||||
if net == 'mainnet':
|
|
||||||
is_testnet = False
|
|
||||||
elif net == 'testnet':
|
|
||||||
is_testnet = True
|
|
||||||
|
|
||||||
|
|
||||||
# Validation functionss
|
# Validation functionss
|
||||||
def check_flo_address(floaddress, is_testnet=False):
|
def check_flo_address(floaddress, is_testnet=False):
|
||||||
return pyflo.is_address_valid(floaddress, testnet=is_testnet)
|
return pyflo.is_address_valid(floaddress, testnet=is_testnet)
|
||||||
@ -2883,7 +2877,7 @@ def initialize_db():
|
|||||||
updatePrices()
|
updatePrices()
|
||||||
|
|
||||||
def set_configs(config):
|
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"]
|
DATA_PATH = config["DATA_PATH"]
|
||||||
apiUrl = config["apiUrl"]
|
apiUrl = config["apiUrl"]
|
||||||
FLO_DATA_DIR = config["FLO_DATA_DIR"]
|
FLO_DATA_DIR = config["FLO_DATA_DIR"]
|
||||||
@ -2892,6 +2886,11 @@ def set_configs(config):
|
|||||||
HOST = config["HOST"]
|
HOST = config["HOST"]
|
||||||
PORT = config["PORT"]
|
PORT = config["PORT"]
|
||||||
APP_ADMIN = config["APP_ADMIN"]
|
APP_ADMIN = config["APP_ADMIN"]
|
||||||
|
NET = config["NET"]
|
||||||
|
if NET == 'mainnet':
|
||||||
|
is_testnet = False
|
||||||
|
elif NET == 'testnet':
|
||||||
|
is_testnet = True
|
||||||
|
|
||||||
def init_process():
|
def init_process():
|
||||||
initialize_db()
|
initialize_db()
|
||||||
@ -2905,4 +2904,5 @@ def init_process():
|
|||||||
def start_api_server(config):
|
def start_api_server(config):
|
||||||
set_configs(config)
|
set_configs(config)
|
||||||
init_process()
|
init_process()
|
||||||
|
print("Starting API server at port=", PORT)
|
||||||
app.run(debug=debug_status, host=HOST, 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
|
from sqlalchemy.orm import sessionmaker
|
||||||
import time
|
import time
|
||||||
import arrow
|
import arrow
|
||||||
import parsing
|
import src.backend.parsing as parsing
|
||||||
from parsing import perform_decimal_operation
|
from src.backend.parsing import perform_decimal_operation
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from ast import literal_eval
|
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 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 statef_processing import process_stateF
|
from src.backend.statef_processing import process_stateF
|
||||||
import asyncio
|
import asyncio
|
||||||
import websockets
|
import websockets
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
import pdb
|
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_LONG = 30 * 60 # 30 mins
|
||||||
RETRY_TIMEOUT_SHORT = 60 # 1 min
|
RETRY_TIMEOUT_SHORT = 60 # 1 min
|
||||||
DB_RETRY_TIMEOUT = 60 # 60 seconds
|
DB_RETRY_TIMEOUT = 60 # 60 seconds
|
||||||
|
|
||||||
|
|
||||||
def newMultiRequest(apicall):
|
def newMultiRequest(apicall):
|
||||||
current_server = serverlist[0]
|
current_server = serverlist[0]
|
||||||
while True:
|
while True:
|
||||||
@ -2639,8 +2638,7 @@ def initiate_process():
|
|||||||
serverlist = _config['TESTNET_BLOCKBOOK_SERVER_LIST']
|
serverlist = _config['TESTNET_BLOCKBOOK_SERVER_LIST']
|
||||||
APP_ADMIN = 'oWooGLbBELNnwq8Z5YmjoVjw8GhBGH3qSP'
|
APP_ADMIN = 'oWooGLbBELNnwq8Z5YmjoVjw8GhBGH3qSP'
|
||||||
websocket_uri = get_websocket_uri(testnet=True)
|
websocket_uri = get_websocket_uri(testnet=True)
|
||||||
serverlist = serverlist.split(',')
|
#serverlist = serverlist.split(',')
|
||||||
|
|
||||||
global neturl
|
global neturl
|
||||||
neturl = _config['BLOCKBOOK_NETURL']
|
neturl = _config['BLOCKBOOK_NETURL']
|
||||||
global api_url
|
global api_url
|
||||||
@ -2648,19 +2646,20 @@ def initiate_process():
|
|||||||
global tokenapi_sse_url
|
global tokenapi_sse_url
|
||||||
tokenapi_sse_url = _config['TOKENAPI_SSE_URL']
|
tokenapi_sse_url = _config['TOKENAPI_SSE_URL']
|
||||||
global API_VERIFY
|
global API_VERIFY
|
||||||
API_VERIFY = _config['API_VERIFY']
|
if 'API_VERIFY' in _config:
|
||||||
if API_VERIFY == 'False':
|
if isinstance(_config['API_VERIFY'], bool):
|
||||||
API_VERIFY = False
|
API_VERIFY = _config['API_VERIFY']
|
||||||
elif API_VERIFY == 'True':
|
elif isinstance(_config['API_VERIFY'], str):
|
||||||
API_VERIFY = True
|
API_VERIFY = False if _config['API_VERIFY'] == 'False' else True
|
||||||
|
else:
|
||||||
|
API_VERIFY = bool(_config['API_VERIFY'])
|
||||||
else:
|
else:
|
||||||
API_VERIFY = True
|
API_VERIFY = True
|
||||||
|
|
||||||
|
|
||||||
global IGNORE_BLOCK_LIST #, IGNORE_TRANSACTION_LIST
|
global IGNORE_BLOCK_LIST #, IGNORE_TRANSACTION_LIST
|
||||||
IGNORE_BLOCK_LIST = _config['IGNORE_BLOCK_LIST'].split(',')
|
IGNORE_BLOCK_LIST = _config['IGNORE_BLOCK_LIST']
|
||||||
IGNORE_BLOCK_LIST = [int(s) for s in IGNORE_BLOCK_LIST]
|
#IGNORE_BLOCK_LIST = [int(s) for s in IGNORE_BLOCK_LIST]
|
||||||
#IGNORE_TRANSACTION_LIST = _config['IGNORE_TRANSACTION_LIST'].split(',')
|
#IGNORE_TRANSACTION_LIST = _config['IGNORE_TRANSACTION_LIST']
|
||||||
|
|
||||||
def start_backend_process(config, reset = False):
|
def start_backend_process(config, reset = False):
|
||||||
global _config
|
global _config
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import argparse
|
import argparse
|
||||||
from sqlalchemy import create_engine, func
|
from sqlalchemy import create_engine, func
|
||||||
from sqlalchemy.orm import sessionmaker
|
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
|
from ast import literal_eval
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from parsing import perform_decimal_operation
|
from src.backend.parsing import perform_decimal_operation
|
||||||
|
|
||||||
|
|
||||||
apppath = os.path.dirname(os.path.realpath(__file__))
|
apppath = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user