fix: tracker_remove в сценариях + прямая загрузка логов (v1.2.36)
Баг 1: удалённые сценарием инстансы показывались как 'creating'
— run_scenario() не вызывал tracker_remove после delete
— фикс: tracker_remove после успешного delete-шага
Баг 2: чёрный экран на вкладке Логи
— views.js копировал пустую log-panel
— фикс: прямая загрузка fetch('/api/log')
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.35"
|
VERSION = "1.2.36"
|
||||||
|
|
||||||
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
||||||
app = Flask(__name__, template_folder="templates", static_folder="static")
|
app = Flask(__name__, template_folder="templates", static_folder="static")
|
||||||
|
|||||||
@@ -281,6 +281,15 @@ def run_scenario(client, steps, client_id, stand, user_email, app_version, scena
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[SCENARIO] save_run failed for step {step_num}: {e}", flush=True)
|
print(f"[SCENARIO] save_run failed for step {step_num}: {e}", flush=True)
|
||||||
|
|
||||||
|
# Удалить из трекера после успешного delete
|
||||||
|
# (run_scenario не вызывает tracker_remove — трекер показывал удалённые инстансы как "creating")
|
||||||
|
if op_name == "delete" and step_status == "OK":
|
||||||
|
try:
|
||||||
|
from operations.tracker import remove as tracker_remove
|
||||||
|
tracker_remove(client_id, stand, instance_uid)
|
||||||
|
except Exception:
|
||||||
|
pass # трекер не критичен
|
||||||
|
|
||||||
# ═══ Шаг 8: обновить scenario_runs (прогресс для UI) ═══
|
# ═══ Шаг 8: обновить scenario_runs (прогресс для UI) ═══
|
||||||
# Пока не последний шаг — статус RUNNING
|
# Пока не последний шаг — статус RUNNING
|
||||||
_save_scenario_run(scenario_run_id,
|
_save_scenario_run(scenario_run_id,
|
||||||
|
|||||||
+15
-6
@@ -41,15 +41,24 @@ function switchView(viewId) {
|
|||||||
if (!scenarioOpen) toggleScenario();
|
if (!scenarioOpen) toggleScenario();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Логи: специальная обработка — копируем содержимое нижней панели в вид
|
// Логи: прямая загрузка с API, не полагаемся на нижнюю панель
|
||||||
if (viewId === 'logs-view') {
|
if (viewId === 'logs-view') {
|
||||||
const lp = document.getElementById('log-panel');
|
|
||||||
const lvc = document.getElementById('log-view-content');
|
const lvc = document.getElementById('log-view-content');
|
||||||
if (lp && lvc) {
|
if (lvc) {
|
||||||
// Копируем текущее содержимое лог-панели в вид
|
lvc.innerHTML = '<span style="color:#888;">Логи загружаются...</span>';
|
||||||
lvc.innerHTML = lp.innerHTML || '<span style="color:#888;">Логи загружаются...</span>';
|
fetch('/api/log').then(r => r.json()).then(lines => {
|
||||||
lp.style.display = 'none'; // скрываем нижнюю панель
|
if (lines.length) {
|
||||||
|
lvc.innerHTML = lines.map(l => `<div>${_esc(l)}</div>`).join('');
|
||||||
|
} else {
|
||||||
|
lvc.innerHTML = '<span style="color:#888;">Логов пока нет</span>';
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
lvc.innerHTML = '<span style="color:#f88;">Ошибка загрузки логов</span>';
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
// Скрываем нижнюю лог-панель если была открыта
|
||||||
|
const lp = document.getElementById('log-panel');
|
||||||
|
if (lp) lp.style.display = 'none';
|
||||||
} else {
|
} else {
|
||||||
// На всех видах кроме логов — скрываем нижнюю лог-панель
|
// На всех видах кроме логов — скрываем нижнюю лог-панель
|
||||||
const lp = document.getElementById('log-panel');
|
const lp = document.getElementById('log-panel');
|
||||||
|
|||||||
Reference in New Issue
Block a user