{
    "schema": "https://saferpage.de/schemas/dach-crawler-operations.v1",
    "generated_at": "2026-08-05T07:35:58+00:00",
    "available": true,
    "health": "operational",
    "summary": "DACH-Crawler operational: 0 deutschsprachige Checks, Queue 0, Fehlerquote 0%.",
    "metrics": {
        "german_count": 0,
        "queue_count": 0,
        "visited_count": 0,
        "skipped_count": 0,
        "error_count": 0,
        "error_rate_percent": 0,
        "last_batch_scanned": 320,
        "last_run_refreshed": 0,
        "last_run_refresh_candidates": 0,
        "last_run_duration_seconds": 591.21,
        "last_run_scanned_per_minute": 0,
        "last_run_average_host_seconds": 0,
        "estimated_queue_minutes": null,
        "retry_pending_count": 0,
        "retry_due_count": 0,
        "retry_scheduled_count": 0,
        "rolling_24h_scanned": 0,
        "rolling_24h_succeeded": 0,
        "daily_target": 20000,
        "daily_target_status": "building",
        "preview_coverage_percent": 87.3,
        "preview_missing_count": 29333,
        "preview_actionable_missing_count": 2720,
        "preview_unreachable_missing_count": 26613,
        "preview_renderer_failed_missing_count": 0,
        "seed_file_host_count": 0,
        "seed_host_count": 0,
        "seed_new_count": 0,
        "seed_queue_added_count": 0
    },
    "schedule": {
        "manager": "systemd",
        "unit": "saferpage-crawler.service",
        "timer": "saferpage-crawler.timer",
        "on_boot_after": "10min",
        "cadence": "every 15min after previous unit activation",
        "randomized_delay": "2min",
        "persistent": true,
        "next_step_if_idle": "Timerstatus mit systemctl list-timers saferpage-crawler.timer prüfen."
    },
    "performance_limits": {
        "max_hosts_per_run": 320,
        "concurrency": 8,
        "timeout_seconds": 90,
        "delay_between_batches_seconds": 0.25,
        "refresh_days": 7,
        "refresh_limit": 5000,
        "seed_cursor_batch": 500,
        "seed_cursor_refill_below": 3000,
        "rotation_batch": 500,
        "rotation_refill_below": 3000,
        "daily_target": 20000,
        "daily_cap": 30000,
        "min_free_disk_gb": 300,
        "checkpoint_every": 64,
        "retry_base_hours": 12,
        "robots_policy": "SaferPageCrawler und SaferPageBot respektieren robots.txt.",
        "browser_policy": "Headless Chromium nur für Screenshot-, Cookie-, Storage- und Consent-Nachweise."
    },
    "crawler_identity": {
        "user_agent": "SaferPageCrawler/0.3 (+https://saferpage.de/bot; schedules passive DACH website checks; report examples: https://saferpage.de/tests)",
        "agent_name": "SaferPageCrawler",
        "policy_url": "https://saferpage.de/bot",
        "transparency_url": "https://saferpage.de/bot",
        "example_report_url": "https://saferpage.de/anrufer.info",
        "test_index_url": "https://saferpage.de/tests",
        "purpose": "Passive Datenschutz-, Consent-, Security- und Seitenvorschau-Prüfung für öffentliche Website-Reports.",
        "contact_url": "https://saferpage.de/bot",
        "robots_txt_policy": "Robots.txt wird für automatische Crawler-Läufe respektiert; manuelle Einzelchecks bleiben öffentlich ausloesbar.",
        "no_attack_policy": "Keine Passwortversuche, Exploits, Belastungstests, Formularangriffe oder Umgehung von Zugriffssperren."
    },
    "last_run_parameters": {
        "max_hosts_per_run": 0,
        "concurrency": 0,
        "timeout_seconds": 0,
        "delay_seconds": 0
    },
    "capacity_plan": {
        "last_run_duration_label": "9,9 min",
        "throughput_per_minute": 0,
        "estimated_queue_label": "nicht berechnet",
        "scaling_rule": "Concurrency und max_hosts_per_run nur erhöhen, wenn API-Health, CPU, Screenshot-Worker und Fehlerquote stabil bleiben.",
        "safe_next_step": "Erst einen erfolgreichen Timerlauf abwarten, bevor Kapazitaet erhöht wird."
    },
    "retry_policy": {
        "pending_count": 0,
        "due_count": 0,
        "base_backoff_hours": 12,
        "strategy": "Exponentieller Backoff pro Host; Timeout, DNS, TLS, 403/429/5xx und sonstige Fehler werden klassifiziert und später kontrolliert erneut versucht.",
        "error_classes": []
    },
    "preview_coverage": {
        "total": 230072,
        "preview_count": 200739,
        "missing_count": 29333,
        "actionable_missing_count": 2720,
        "unreachable_missing_count": 26613,
        "renderer_failed_missing_count": 0,
        "legacy_size_count": 0,
        "preview_percent": 87.3,
        "source_counts": {
            "mini_current_webp": 200739,
            "missing": 29333
        },
        "missing_preview": [],
        "unreachable_missing_preview": [
            {
                "host": "hsi.com.hk",
                "checked_at": "2026-08-05 09:35:22.838716+02",
                "report_url": "https://saferpage.de/hsi.com.hk",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "uni-koeln.de",
                "checked_at": "2026-08-05 09:34:53.098676+02",
                "report_url": "https://saferpage.de/uni-koeln.de",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "uni-wien.ac.at",
                "checked_at": "2026-08-05 09:34:13.119678+02",
                "report_url": "https://saferpage.de/uni-wien.ac.at",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "gv.at",
                "checked_at": "2026-08-05 09:33:46.780718+02",
                "report_url": "https://saferpage.de/gv.at",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "admin.li",
                "checked_at": "2026-08-05 09:33:33.331759+02",
                "report_url": "https://saferpage.de/admin.li",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "frankytraco.top",
                "checked_at": "2026-08-05 09:25:40.2321+02",
                "report_url": "https://saferpage.de/frankytraco.top",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "gaoxiaojob.com",
                "checked_at": "2026-08-05 09:25:31.222451+02",
                "report_url": "https://saferpage.de/gaoxiaojob.com",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "fukui.lg.jp",
                "checked_at": "2026-08-05 09:25:15.255815+02",
                "report_url": "https://saferpage.de/fukui.lg.jp",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "esplus.ru",
                "checked_at": "2026-08-05 09:25:14.586025+02",
                "report_url": "https://saferpage.de/esplus.ru",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "flybb.ru",
                "checked_at": "2026-08-05 09:25:14.429479+02",
                "report_url": "https://saferpage.de/flybb.ru",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "exghost.com",
                "checked_at": "2026-08-05 09:24:50.379978+02",
                "report_url": "https://saferpage.de/exghost.com",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "databahn.app",
                "checked_at": "2026-08-05 09:24:44.846844+02",
                "report_url": "https://saferpage.de/databahn.app",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            }
        ],
        "renderer_failed_missing_preview": [],
        "contract": {
            "width": 160,
            "height": 150,
            "fit": "contain",
            "source_capture": "full_page",
            "capture_version": "contain-v11-mini-webp-adaptive-192x180",
            "renderer": "playwright-chromium",
            "display_policy": "resize_contain_no_crop",
            "favicon_policy": "Favicon nur Zusatzsignal, nie Ersatz für Seitenvorschau."
        },
        "policy": "160x150-Darstellung aus einem adaptiv komprimierten WebP je Domain; keine Sidecars und keine Dateisystemsuche."
    },
    "scope": {
        "market": "deutschsprachiger Raum",
        "priority_tlds": [
            ".de",
            ".at",
            ".ch",
            ".li",
            ".lu"
        ],
        "generic_domains": "standardmaessig nicht einbezogen",
        "blocked_classes": [
            "Suchmaschinen",
            "Social Networks",
            "Adtech",
            "CDN-/Asset-Nebendomains",
            "Cloud-Infrastruktur"
        ]
    },
    "seed_manifest": {
        "generated_at": "",
        "seed_file": "",
        "seed_file_host_count": 0,
        "cli_seed_count": 0,
        "recent_seed_count": 0,
        "seed_host_count": 0,
        "seed_new_count": 0,
        "seed_existing_count": 0,
        "seed_queue_added_count": 0,
        "seed_cursor_file": "",
        "seed_cursor_line": 0,
        "seed_cursor_added_count": 0,
        "seed_cursor_lines_read": 0,
        "seed_cursor_exhausted": false,
        "refresh_candidate_count": 0,
        "rotation_candidate_count": 0,
        "rotation_corpus_size": 0,
        "rotation_cycles": 0,
        "include_generic": false,
        "market_tlds": [],
        "source_policy": "Versionierte DACH-Seeddatei plus Recent-Checks, begrenzt durch kleine Timer-Batches.",
        "seed_preview": []
    },
    "user_agent": "SaferPageCrawler/0.3 (+https://saferpage.de/bot; schedules passive DACH website checks; report examples: https://saferpage.de/tests)",
    "last_run": {
        "started_at": "2026-08-05T09:16:22+02:00",
        "finished_at": "2026-08-05T09:26:13+02:00",
        "scanned": 320,
        "queued_after_run": 0,
        "refreshed": 0,
        "errors": 0,
        "duration_seconds": 591.21,
        "scanned_per_minute": 0,
        "average_host_seconds": 0,
        "estimated_queue_minutes": null,
        "succeeded": 233,
        "failed": 0,
        "robots_skipped": 48,
        "non_german_skipped": 0,
        "retried": 0,
        "retry_scheduled": 0
    },
    "queue_preview": [],
    "recent_reports": [
        {
            "host": "iz-gnote.com",
            "score": 100,
            "checked_at": "2026-08-05 09:35:55.072149+02",
            "report_url": "https://saferpage.de/iz-gnote.com",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "rivertone.de",
            "score": 76,
            "checked_at": "2026-08-05 09:35:43.071647+02",
            "report_url": "https://saferpage.de/rivertone.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "hsi.com.hk",
            "score": 66,
            "checked_at": "2026-08-05 09:35:22.838716+02",
            "report_url": "https://saferpage.de/hsi.com.hk",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "krumbach-mineralwasser.de",
            "score": 100,
            "checked_at": "2026-08-05 09:35:19.399766+02",
            "report_url": "https://saferpage.de/krumbach-mineralwasser.de",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "genderforschung.kug.ac.at",
            "score": 76,
            "checked_at": "2026-08-05 09:35:16.10562+02",
            "report_url": "https://saferpage.de/genderforschung.kug.ac.at",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kuechen-loesch-shop.de",
            "score": 58,
            "checked_at": "2026-08-05 09:35:15.778412+02",
            "report_url": "https://saferpage.de/kuechen-loesch-shop.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kreuzfahrtschiffehamburg.de",
            "score": 73,
            "checked_at": "2026-08-05 09:35:14.572568+02",
            "report_url": "https://saferpage.de/kreuzfahrtschiffehamburg.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kub-badoldesloe.de",
            "score": 78,
            "checked_at": "2026-08-05 09:35:12.661947+02",
            "report_url": "https://saferpage.de/kub-badoldesloe.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "ksw.rptu.de",
            "score": 75,
            "checked_at": "2026-08-05 09:35:12.395045+02",
            "report_url": "https://saferpage.de/ksw.rptu.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "mering.de",
            "score": 72,
            "checked_at": "2026-08-05 09:35:11.714767+02",
            "report_url": "https://saferpage.de/mering.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "bok.simplywebshop.de",
            "score": 62,
            "checked_at": "2026-08-05 09:35:09.000294+02",
            "report_url": "https://saferpage.de/bok.simplywebshop.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "bocholter-wsv.de",
            "score": 68,
            "checked_at": "2026-08-05 09:35:06.271798+02",
            "report_url": "https://saferpage.de/bocholter-wsv.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kreuzfahrerguide.de",
            "score": 49,
            "checked_at": "2026-08-05 09:35:05.349549+02",
            "report_url": "https://saferpage.de/kreuzfahrerguide.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "krankenhaus-johanneum.de",
            "score": 70,
            "checked_at": "2026-08-05 09:35:05.204829+02",
            "report_url": "https://saferpage.de/krankenhaus-johanneum.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kornpur.de",
            "score": 68,
            "checked_at": "2026-08-05 09:35:04.31727+02",
            "report_url": "https://saferpage.de/kornpur.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "krankenhaus-rheiderland.de",
            "score": 80,
            "checked_at": "2026-08-05 09:35:04.159622+02",
            "report_url": "https://saferpage.de/krankenhaus-rheiderland.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kreisjugendamt.lra-ebe.de",
            "score": 76,
            "checked_at": "2026-08-05 09:35:03.704187+02",
            "report_url": "https://saferpage.de/kreisjugendamt.lra-ebe.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "kreismusikschulepeine.de",
            "score": 68,
            "checked_at": "2026-08-05 09:35:03.080817+02",
            "report_url": "https://saferpage.de/kreismusikschulepeine.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "aparthotel-koenigslinie.de",
            "score": 66,
            "checked_at": "2026-08-05 09:35:00.604453+02",
            "report_url": "https://saferpage.de/aparthotel-koenigslinie.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "apotheker.de",
            "score": 36,
            "checked_at": "2026-08-05 09:34:59.823354+02",
            "report_url": "https://saferpage.de/apotheker.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "apart-rosengarten.de",
            "score": 74,
            "checked_at": "2026-08-05 09:34:59.701077+02",
            "report_url": "https://saferpage.de/apart-rosengarten.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "zeit.de",
            "score": 65,
            "checked_at": "2026-08-05 09:34:59.441735+02",
            "report_url": "https://saferpage.de/zeit.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "apotheken-aerzte.de",
            "score": 64,
            "checked_at": "2026-08-05 09:34:58.857404+02",
            "report_url": "https://saferpage.de/apotheken-aerzte.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "apobutz-online.de",
            "score": 72,
            "checked_at": "2026-08-05 09:34:56.840458+02",
            "report_url": "https://saferpage.de/apobutz-online.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        }
    ],
    "error_preview": [],
    "run_history": [],
    "runbook": [
        "Bei hoher Queue --max und --concurrency nur nach API-/CPU-Reserve erhöhen.",
        "Bei Fehlerquote über 20 Prozent API-Log, DNS/Timeouts und robots.txt-Skiprate prüfen.",
        "Fehlerhosts nicht hart durchdrücken: Retry-Backoff und Fehlerklasse aus Ops-JSON prüfen.",
        "Backlog-ETA aus Durchsatz und Queue beobachten; bei stabilem Lauf schrittweise skalieren statt grosse Spruenge zu machen.",
        "Screenshot-Abdeckung unter 95 Prozent als Backfill-Arbeit behandeln; fehlende Hosts aus preview_coverage.missing_preview erneut scannen.",
        "Deutschraum-Seeds über die versionierte Seed-Datei oder Recent-Checks erweitern; Plattform- und CDN-Domains weiter filtern.",
        "Jeder gespeicherte Check muss unter der kanonischen Kurz-URL /{domain} verlinkt bleiben."
    ],
    "links": {
        "html": "https://saferpage.de/crawler",
        "json": "https://saferpage.de/crawler/ops-json",
        "csv": "https://saferpage.de/crawler/ops-csv",
        "markdown": "https://saferpage.de/crawler/ops-md",
        "bot": "https://saferpage.de/bot",
        "tests": "https://saferpage.de/tests",
        "monitoring_feed": "https://saferpage.de/monitoring/feed.json"
    },
    "disclaimer": "Crawler-Operations zeigen öffentliche Betriebs- und Queue-Signale. Sie veröffentlichen keine Secrets, keine internen IPs und keine personenbezogenen Besucherlogs."
}