fix: сценарии — перерендер после поллинга + индекс отдельно (v1.2.38)
Баг 1: страница сценариев зависала после завершения
— scenario-list.js: добавлен loadScenarios() после поллинга
Баг 2: история могла быть пустой (ON CONFLICT без индекса)
— init_db.py: CREATE UNIQUE INDEX отдельным cur.execute()
(мультистейтмент SQL в psycopg2 ненадёжен)
This commit is contained in:
+1
-1
@@ -32,7 +32,7 @@ from routes.api_scenario_defs import bp_defs as api_scenario_defs_bp
|
|||||||
|
|
||||||
# Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода.
|
# Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода.
|
||||||
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
|
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
|
||||||
VERSION = "1.2.37"
|
VERSION = "1.2.38"
|
||||||
|
|
||||||
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
||||||
app = Flask(__name__, template_folder="templates", static_folder="static")
|
app = Flask(__name__, template_folder="templates", static_folder="static")
|
||||||
|
|||||||
@@ -218,6 +218,11 @@ def init_db():
|
|||||||
cur.execute(SCHEMA_SQL)
|
cur.execute(SCHEMA_SQL)
|
||||||
cur.execute(MIGRATION_SQL)
|
cur.execute(MIGRATION_SQL)
|
||||||
cur.execute(SCENARIO_RUNS_SQL)
|
cur.execute(SCENARIO_RUNS_SQL)
|
||||||
|
|
||||||
|
# Индекс для UPSERT в save_run — отдельным запросом для надёжности
|
||||||
|
# (мультистейтмент SQL в psycopg2 может выполнить не все операторы)
|
||||||
|
cur.execute("CREATE UNIQUE INDEX IF NOT EXISTS idx_runs_op_uid ON runs (op_uid) WHERE op_uid IS NOT NULL")
|
||||||
|
|
||||||
conn.commit()
|
conn.commit()
|
||||||
cur.close()
|
cur.close()
|
||||||
print("[DB] Schema initialized", flush=True)
|
print("[DB] Schema initialized", flush=True)
|
||||||
|
|||||||
@@ -218,6 +218,7 @@ async function runScenario(defId){
|
|||||||
busy=false;
|
busy=false;
|
||||||
await refreshInstances(); // обновить список инстансов
|
await refreshInstances(); // обновить список инстансов
|
||||||
if(historyOpen) await loadHistory(); // обновить историю
|
if(historyOpen) await loadHistory(); // обновить историю
|
||||||
|
await loadScenarios(); // перерендерить список (кнопки)
|
||||||
}
|
}
|
||||||
}catch(e){
|
}catch(e){
|
||||||
_scenarioPollErrors++;
|
_scenarioPollErrors++;
|
||||||
|
|||||||
Reference in New Issue
Block a user