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. Меняется при КАЖДОМ изменении кода.
|
||||
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
|
||||
VERSION = "1.2.35"
|
||||
VERSION = "1.2.36"
|
||||
|
||||
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
||||
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:
|
||||
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) ═══
|
||||
# Пока не последний шаг — статус RUNNING
|
||||
_save_scenario_run(scenario_run_id,
|
||||
|
||||
+15
-6
@@ -41,15 +41,24 @@ function switchView(viewId) {
|
||||
if (!scenarioOpen) toggleScenario();
|
||||
}
|
||||
|
||||
// Логи: специальная обработка — копируем содержимое нижней панели в вид
|
||||
// Логи: прямая загрузка с API, не полагаемся на нижнюю панель
|
||||
if (viewId === 'logs-view') {
|
||||
const lp = document.getElementById('log-panel');
|
||||
const lvc = document.getElementById('log-view-content');
|
||||
if (lp && lvc) {
|
||||
// Копируем текущее содержимое лог-панели в вид
|
||||
lvc.innerHTML = lp.innerHTML || '<span style="color:#888;">Логи загружаются...</span>';
|
||||
lp.style.display = 'none'; // скрываем нижнюю панель
|
||||
if (lvc) {
|
||||
lvc.innerHTML = '<span style="color:#888;">Логи загружаются...</span>';
|
||||
fetch('/api/log').then(r => r.json()).then(lines => {
|
||||
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 {
|
||||
// На всех видах кроме логов — скрываем нижнюю лог-панель
|
||||
const lp = document.getElementById('log-panel');
|
||||
|
||||
Reference in New Issue
Block a user