feat: отмена скана на сервере, стабильнее scan_id, упрощённый UI

- Runner: context, POST /api/scans/{id}/cancel, частичный canceled; Start до ответа createScan

- API: scanPathID (PathUnescape), лог при 404; Postgres GetScan логирует ошибки чтения

- newScanID: суффикс 8 hex; тест обновлён

- Web UI: убраны строки scan_id/from-to; скрытое поле scanId; cancel при таймауте/новом скане

Made-with: Cursor
This commit is contained in:
PTah
2026-04-13 15:26:23 +10:00
parent 5b3eeaed45
commit 088be32ec5
6 changed files with 224 additions and 210 deletions
+2 -2
View File
@@ -14,8 +14,8 @@ func TestNewScanIDShape(t *testing.T) {
if len(parts) < 3 {
t.Fatalf("expected at least time_slug_suffix, got %q", id)
}
if len(parts[len(parts)-1]) != 4 {
t.Fatalf("expected 4-hex suffix, got %q", id)
if len(parts[len(parts)-1]) != 8 {
t.Fatalf("expected 8-hex suffix, got %q", id)
}
if !strings.Contains(id, "192.168.160.0_24") {
t.Fatalf("expected sanitized cidr in id: %q", id)