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') {