Use run lifecycle for live strategy status

This commit is contained in:
Thigazhezhilan J 2026-04-01 10:12:03 +05:30
parent 4ae42baeb1
commit 1660b13778

View File

@ -705,21 +705,23 @@ def resume_strategy(user_id: str):
return {"status": "resumed", "run_id": run_id} return {"status": "resumed", "run_id": run_id}
def get_strategy_status(user_id: str): def get_strategy_status(user_id: str):
run_id = get_active_run_id(user_id) running_run_id = get_running_run_id(user_id)
run_id = running_run_id or get_active_run_id(user_id)
cfg = _load_config(user_id, run_id) if run_id else {} cfg = _load_config(user_id, run_id) if run_id else {}
default_status = "RUNNING" if running_run_id else ("STOPPED" if run_id else "IDLE")
with db_connection() as conn: with db_connection() as conn:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute( cur.execute(
"SELECT status, last_updated FROM engine_status WHERE user_id = %s AND run_id = %s", "SELECT last_updated FROM engine_status WHERE user_id = %s AND run_id = %s",
(user_id, run_id), (user_id, run_id),
) )
row = cur.fetchone() row = cur.fetchone()
if not row: if not row:
status = {"status": "IDLE", "last_updated": None} status = {"status": default_status, "last_updated": None}
else: else:
status = { status = {
"status": row[0], "status": default_status,
"last_updated": _format_local_ts(row[1]), "last_updated": _format_local_ts(row[0]),
} }
status["run_id"] = run_id status["run_id"] = run_id
sip_frequency = cfg.get("sip_frequency") sip_frequency = cfg.get("sip_frequency")
@ -742,7 +744,7 @@ def get_strategy_status(user_id: str):
"broker": cfg.get("broker"), "broker": cfg.get("broker"),
"active": cfg.get("active"), "active": cfg.get("active"),
} }
if status.get("status") == "RUNNING": if running_run_id:
mode = (cfg.get("mode") or "LIVE").strip().upper() mode = (cfg.get("mode") or "LIVE").strip().upper()
with engine_context(user_id, run_id): with engine_context(user_id, run_id):
state = load_state(mode=mode) state = load_state(mode=mode)
@ -765,13 +767,15 @@ def get_strategy_status(user_id: str):
return status return status
def get_engine_status(user_id: str): def get_engine_status(user_id: str):
run_id = get_active_run_id(user_id) running_run_id = get_running_run_id(user_id)
run_id = running_run_id or get_active_run_id(user_id)
status = { status = {
"state": "STOPPED", "state": "STOPPED",
"run_id": run_id, "run_id": run_id,
"user_id": user_id, "user_id": user_id,
"last_heartbeat_ts": None, "last_heartbeat_ts": None,
} }
if running_run_id:
with db_connection() as conn: with db_connection() as conn:
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute( cur.execute(