diff --git a/frontend/templates/index.html b/frontend/templates/index.html index 63be7ac..e5c194b 100644 --- a/frontend/templates/index.html +++ b/frontend/templates/index.html @@ -156,7 +156,14 @@ async function runAnalysis(vmid, filename, vmName) { } 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 pollErrors = 0; for (;;) { await sleep(2000); @@ -180,6 +187,16 @@ async function runAnalysis(vmid, filename, vmName) { showError(sdata.error_details || 'Analysis failed'); 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 (_) {} } } diff --git a/frontend/templates/scp.html b/frontend/templates/scp.html index dcf7b9e..75caf9c 100644 --- a/frontend/templates/scp.html +++ b/frontend/templates/scp.html @@ -119,9 +119,15 @@ async function startScpPull(e) { btn.disabled = false; return; } 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 vmName = document.getElementById('scp-vm-name').value.trim(); var astart = Date.now(); + var pollErrs = 0; for (;;) { await new Promise(r => setTimeout(r, 2000)); var sr = await fetch('/session/analyze/status/' + analysisId); @@ -141,6 +147,16 @@ async function startScpPull(e) { showScpError(sdata.error_details || 'Analysis failed'); 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') {