diff --git a/web/static/js/app.js b/web/static/js/app.js index e027409..5124b5e 100644 --- a/web/static/js/app.js +++ b/web/static/js/app.js @@ -281,7 +281,6 @@ function pollCollectionJobStatus() { renderCollectionJob(); } } else if (prevStatus !== collectionJob.status && collectionJob.status === 'running') { - appendJobLog('Сбор выполняется...'); renderCollectionJob(); } }) @@ -359,7 +358,7 @@ function renderCollectionJob() { }[collectionJob.status]; const progressLabel = isTerminal ? terminalMessage - : 'Сбор данных...'; + : latestCollectionActivityMessage(); progressValue.textContent = `${collectionJob.progress}% · ${progressLabel}`; logsList.innerHTML = collectionJob.logs.map((log) => ( @@ -370,6 +369,19 @@ function renderCollectionJob() { setApiFormBlocked(!isTerminal); } +function latestCollectionActivityMessage() { + if (!collectionJob || !Array.isArray(collectionJob.logs) || collectionJob.logs.length === 0) { + return 'Сбор данных...'; + } + const last = String(collectionJob.logs[collectionJob.logs.length - 1].message || '').trim(); + if (!last) { + return 'Сбор данных...'; + } + // Job logs already contain server timestamp prefix. Show concise step text in progress label. + const cleaned = last.replace(/^\d{4}-\d{2}-\d{2}T[^\s]+\s+/, '').trim(); + return cleaned || 'Сбор данных...'; +} + function isCollectionJobTerminal(status) { return ['success', 'failed', 'canceled'].includes(normalizeJobStatus(status)); }