fix: guard against missing analysis_id and limit poll error retries

This commit is contained in:
Claus Lohmar 2026-07-26 07:03:41 +00:00
parent 1ecaefe1d8
commit 0c2b11f2d2
2 changed files with 33 additions and 0 deletions

View file

@ -156,7 +156,14 @@ async function runAnalysis(vmid, filename, vmName) {
} }
var analysisId = data.analysis_id; var analysisId = data.analysis_id;
if (!analysisId) {
setPhase('Analysis failed', 0, false);
showError('Backend returned invalid response — may need restart.');
return;
}
var startTime = Date.now(); var startTime = Date.now();
var pollErrors = 0;
for (;;) { for (;;) {
await sleep(2000); await sleep(2000);
@ -180,6 +187,16 @@ async function runAnalysis(vmid, filename, vmName) {
showError(sdata.error_details || 'Analysis failed'); showError(sdata.error_details || 'Analysis failed');
return; return;
} }
if (sdata.error) {
pollErrors++;
if (pollErrors > 15) {
setPhase('Analysis failed', 0, false);
showError('Backend unavailable — analysis may need restart.');
return;
}
} else {
pollErrors = 0;
}
} catch (_) {} } catch (_) {}
} }
} }

View file

@ -119,9 +119,15 @@ async function startScpPull(e) {
btn.disabled = false; return; btn.disabled = false; return;
} }
var analysisId = adata.analysis_id; var analysisId = adata.analysis_id;
if (!analysisId) {
setScpPhase('Analysis failed', 0, false);
showScpError('Backend returned invalid response — may need restart.');
btn.disabled = false; return;
}
var vmid = document.getElementById('scp-vmid').value; var vmid = document.getElementById('scp-vmid').value;
var vmName = document.getElementById('scp-vm-name').value.trim(); var vmName = document.getElementById('scp-vm-name').value.trim();
var astart = Date.now(); var astart = Date.now();
var pollErrs = 0;
for (;;) { for (;;) {
await new Promise(r => setTimeout(r, 2000)); await new Promise(r => setTimeout(r, 2000));
var sr = await fetch('/session/analyze/status/' + analysisId); var sr = await fetch('/session/analyze/status/' + analysisId);
@ -141,6 +147,16 @@ async function startScpPull(e) {
showScpError(sdata.error_details || 'Analysis failed'); showScpError(sdata.error_details || 'Analysis failed');
btn.disabled = false; return; btn.disabled = false; return;
} }
if (sdata.error) {
pollErrs++;
if (pollErrs > 15) {
setScpPhase('Analysis failed', 0, false);
showScpError('Backend unavailable — analysis may need restart.');
btn.disabled = false; return;
}
} else {
pollErrs = 0;
}
} }
} }
if (pdata.phase === 'error') { if (pdata.phase === 'error') {