v1.2.0: unified executor + flexible instance refs + params-render.js
Phase 1 — New modules: - api/utils.py: find_uid(), uid_from_location() (replaces 2 duplicates) - operations/poll.py: poll_until_done() (shared sync/async polling) - operations/executor.py: execute_operation() (single CREATE/non-CREATE flow) Phase 2 — Format + validation: - routes/api_scenario_defs.py: _validate_steps with output/instance_ref/instance_uid - operations/scenario.py: resolve instance_uid > instance_ref > service_id, use executor + poll_until_done, persist instance_bindings Phase 3 — Migration: - routes/api_test.py: create/non-create through executor, _finish_op through poll_until_done - db/init_db.py: startup cleanup of stuck scenario_runs (>1h) Phase 4 — UI shared module: - static/js/params-render.js: renderParamRow, renderMapFixedRow, collectParams - static/js/operations.js: use params-render.js (remove duplicates) - templates/index.html: include params-render.js - app.py: bump 1.1.57 → 1.2.0
This commit is contained in:
@@ -159,6 +159,23 @@ def init_db():
|
||||
conn.commit()
|
||||
cur.close()
|
||||
print("[DB] Schema initialized", flush=True)
|
||||
|
||||
# Startup cleanup: зависшие RUNNING сценарии старше 1 часа → TIMEOUT
|
||||
try:
|
||||
cur = conn.cursor()
|
||||
cur.execute("""
|
||||
UPDATE scenario_runs
|
||||
SET status = 'TIMEOUT', error_log = 'worker restart'
|
||||
WHERE status = 'RUNNING'
|
||||
AND created_at < NOW() - INTERVAL '1 hour'
|
||||
""")
|
||||
if cur.rowcount:
|
||||
print(f"[DB] Cleaned up {cur.rowcount} stuck scenario_runs", flush=True)
|
||||
conn.commit()
|
||||
cur.close()
|
||||
except Exception as e:
|
||||
print(f"[DB] Cleanup error: {e}", flush=True)
|
||||
conn.rollback()
|
||||
except Exception as e:
|
||||
print(f"[DB] Init error: {e}", flush=True)
|
||||
conn.rollback()
|
||||
|
||||
Reference in New Issue
Block a user