feat: Add better status check for internal nodes and error logging
All checks were successful
Tests and Linting / Tests-Linting (3.10) (push) Successful in 27s
Tests and Linting / Tests-Linting (3.11) (push) Successful in 28s
Tests and Linting / Tests-Linting (3.13) (push) Successful in 28s
Build Docker / Build Images (map[dockerfile:Dockerfile tag_suffix: target:default]) (push) Successful in 46s
Build Docker / Build Images (map[dockerfile:Dockerfile.hsd tag_suffix:-hsd target:hsd]) (push) Successful in 46s

This commit is contained in:
2025-09-12 15:23:56 +10:00
parent 12d3958b9d
commit 19771fe30d
2 changed files with 59 additions and 11 deletions

View File

@@ -95,6 +95,7 @@ def hsdConnected():
def hsdVersion(format=True): def hsdVersion(format=True):
info = hsd.getInfo() info = hsd.getInfo()
if 'error' in info: if 'error' in info:
logger.error(f"HSD connection error: {info.get('error', 'Unknown error')}")
return -1 return -1
# Check if SPV mode is enabled # Check if SPV mode is enabled
@@ -121,6 +122,7 @@ def check_account(cookie: str | None):
# Check if the account is valid # Check if the account is valid
info = hsw.getAccountInfo(account, 'default') info = hsw.getAccountInfo(account, 'default')
if 'error' in info: if 'error' in info:
logger.error(f"HSW error checking account {account}: {info.get('error', 'Unknown error')}")
return False return False
return account return account
@@ -583,6 +585,7 @@ def getTransactions(account, page=1, limit=100):
return [] return []
info = hsw.getWalletTxHistory(account) info = hsw.getWalletTxHistory(account)
if 'error' in info: if 'error' in info:
logger.error(f"Error getting transactions for account {account}: {info['error']}")
return [] return []
return info[::-1] return info[::-1]
@@ -916,6 +919,7 @@ def register(account, domain):
def getNodeSync(): def getNodeSync():
response = hsd.getInfo() response = hsd.getInfo()
if 'error' in response: if 'error' in response:
logger.error(f"Error getting node sync status: {response['error']}")
return 0 return 0
sync = response['chain']['progress']*100 sync = response['chain']['progress']*100
@@ -1941,6 +1945,7 @@ def hsdStart():
cmd.append(flag) cmd.append(flag)
# Launch process # Launch process
try:
HSD_PROCESS = subprocess.Popen( HSD_PROCESS = subprocess.Popen(
cmd, cmd,
cwd=os.getcwd(), cwd=os.getcwd(),
@@ -1948,6 +1953,9 @@ def hsdStart():
) )
logger.info(f"HSD started with PID {HSD_PROCESS.pid}") logger.info(f"HSD started with PID {HSD_PROCESS.pid}")
except Exception as e:
logger.error(f"Failed to start HSD: {str(e)}", exc_info=True)
return
atexit.register(hsdStop) atexit.register(hsdStop)
@@ -1959,6 +1967,19 @@ def hsdStart():
logger.error(f"Failed to set signal handlers: {str(e)}", exc_info=True) logger.error(f"Failed to set signal handlers: {str(e)}", exc_info=True)
pass pass
def hsdRunning() -> bool:
global HSD_PROCESS
if not HSD_INTERNAL_NODE:
return False
if HSD_PROCESS is None:
return False
# Check if process has terminated
poll_result = HSD_PROCESS.poll()
if poll_result is not None:
logger.error(f"HSD process has terminated with exit code: {poll_result}")
return False
return True
def hsdStop(): def hsdStop():
global HSD_PROCESS global HSD_PROCESS

33
main.py
View File

@@ -1868,9 +1868,36 @@ def api_icon(account):
def api_status(): def api_status():
# This doesn't require a login # This doesn't require a login
# Check if the node is connected # Check if the node is connected
if not account_module.hsdConnected(): node_status = {
return jsonify({"status":503,"error": "Node not connected"}), 503 "connected": account_module.hsdConnected(),
return jsonify({"status": 200,"result": "FireWallet is running"}) "internal": account_module.HSD_INTERNAL_NODE,
"internal_running": False,
"version": "N/A"
}
status = 200
error = None
node_status['version'] = account_module.hsdVersion(False) # type: ignore
if node_status['internal']:
node_status['internal_running'] = account_module.hsdRunning()
# If the node is not connected, return an error
if not node_status['connected']:
error = "Node not connected"
status = 503
if node_status['version'] == -1:
error = "Error connecting to HSD"
status = 503
if node_status['internal'] and not node_status['internal_running']:
error = "Internal node not running"
status = 503
return jsonify({
"node": node_status,
"error": error,
"status": status
}), status
#endregion #endregion