v1.0.48: tracker_add sync before thread (Sonnet fix); log is_ok; flexbox buttons

This commit is contained in:
2026-07-27 09:02:59 +04:00
parent 7fdcc005b5
commit 1d306bf263
4 changed files with 166 additions and 11 deletions
+10 -6
View File
@@ -111,6 +111,12 @@ def api_test():
{"instanceOperationUid": op_uid, "svcOperationCfsParamId": int(pid), "paramValue": str(pval)})
client.post(f"/instanceOperations/{op_uid}/run")
# Записать в трекер СРАЗУ, до фонового потока (поток может умереть под gunicorn)
try:
tracker_add(instance_uid, svc_id, display_name)
except Exception:
pass
# фоном ждать завершения
threading.Thread(target=_finish_op, args=(client, op_uid, instance_uid, svc_id, display_name, op_name, svc_op_id, True), daemon=True).start()
return jsonify({"status": "RUNNING", "opUid": op_uid, "instanceUid": instance_uid})
@@ -173,12 +179,10 @@ def _finish_op(client, op_uid, instance_uid, svc_id, display_name, op_name, svc_
if dt_finish and str(dt_finish).strip():
is_ok = op.get("isSuccessful")
err = op.get("errorLog") or ""
# Сначала трекер — чтобы UI при poll уже видел инстанс
if is_ok:
if is_create:
tracker_add(instance_uid, svc_id, display_name)
elif is_delete:
tracker_remove(instance_uid)
print(f"[DEBUG] _finish_op op_uid={op_uid} isSuccessful={is_ok!r}", flush=True)
# tracker_add для create уже вызван синхронно в api_test()
if is_ok and is_delete:
tracker_remove(instance_uid)
_op_results[op_uid] = {
"status": "OK" if is_ok else "FAIL",
"error": str(err) if err else "",