{
    "schema": "https://saferpage.de/schemas/dach-crawler-operations.v1",
    "generated_at": "2026-11-13T00:43:21+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": 38,
        "last_run_refreshed": 0,
        "last_run_refresh_candidates": 0,
        "last_run_duration_seconds": 63.72,
        "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": 85.6,
        "preview_missing_count": 85166,
        "preview_actionable_missing_count": 5862,
        "preview_unreachable_missing_count": 79304,
        "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": "1,1 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": 591186,
        "preview_count": 506020,
        "missing_count": 85166,
        "actionable_missing_count": 5862,
        "unreachable_missing_count": 79304,
        "renderer_failed_missing_count": 0,
        "legacy_size_count": 0,
        "preview_percent": 85.6,
        "source_counts": {
            "mini_current_webp": 506020,
            "missing": 85166
        },
        "missing_preview": [],
        "unreachable_missing_preview": [
            {
                "host": "uni-koeln.de",
                "checked_at": "2026-11-13 01:43:03.28681+01",
                "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-11-13 01:42:23.282918+01",
                "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-11-13 01:42:07.230916+01",
                "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": "buildspec.yaml",
                "checked_at": "2026-11-13 00:12:15.705577+01",
                "report_url": "https://saferpage.de/buildspec.yaml",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "bodensee-bordell.de",
                "checked_at": "2026-11-13 00:12:05.815213+01",
                "report_url": "https://saferpage.de/bodensee-bordell.de",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "puthja.net",
                "checked_at": "2026-11-12 23:58:56.003516+01",
                "report_url": "https://saferpage.de/puthja.net",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "beachhunters.org",
                "checked_at": "2026-11-12 22:39:49.238605+01",
                "report_url": "https://saferpage.de/beachhunters.org",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "dosug.es",
                "checked_at": "2026-11-12 21:34:38.982082+01",
                "report_url": "https://saferpage.de/dosug.es",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "automaten-forum.de",
                "checked_at": "2026-11-12 21:04:32.819727+01",
                "report_url": "https://saferpage.de/automaten-forum.de",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "privkey.pem",
                "checked_at": "2026-11-12 19:11:09.198959+01",
                "report_url": "https://saferpage.de/privkey.pem",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "ssmtp.conf",
                "checked_at": "2026-11-12 19:11:09.167154+01",
                "report_url": "https://saferpage.de/ssmtp.conf",
                "blocker": "Die Zielseite lieferte beim Mini-Check keine HTTP-Antwort.",
                "suggested_action": "Nach Erreichbarkeit erneut prüfen."
            },
            {
                "host": "mature-japan.com",
                "checked_at": "2026-11-12 13:03:24.421781+01",
                "report_url": "https://saferpage.de/mature-japan.com",
                "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-11-13T01:41:59+01:00",
        "finished_at": "2026-11-13T01:43:03+01:00",
        "scanned": 38,
        "queued_after_run": 0,
        "refreshed": 0,
        "errors": 0,
        "duration_seconds": 63.72,
        "scanned_per_minute": 0,
        "average_host_seconds": 0,
        "estimated_queue_minutes": null,
        "succeeded": 38,
        "failed": 0,
        "robots_skipped": 0,
        "non_german_skipped": 0,
        "retried": 0,
        "retry_scheduled": 0
    },
    "queue_preview": [],
    "recent_reports": [
        {
            "host": "uni-koeln.de",
            "score": 100,
            "checked_at": "2026-11-13 01:43:03.28681+01",
            "report_url": "https://saferpage.de/uni-koeln.de",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "volksanwaltschaft.gv.at",
            "score": 75,
            "checked_at": "2026-11-13 01:42:28.283029+01",
            "report_url": "https://saferpage.de/volksanwaltschaft.gv.at",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "volkswagen.de",
            "score": 75,
            "checked_at": "2026-11-13 01:42:25.74818+01",
            "report_url": "https://saferpage.de/volkswagen.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "zdf.de",
            "score": 78,
            "checked_at": "2026-11-13 01:42:25.705592+01",
            "report_url": "https://saferpage.de/zdf.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "uni-muenchen.de",
            "score": 80,
            "checked_at": "2026-11-13 01:42:24.723383+01",
            "report_url": "https://saferpage.de/uni-muenchen.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "uni-wien.ac.at",
            "score": 66,
            "checked_at": "2026-11-13 01:42:23.282918+01",
            "report_url": "https://saferpage.de/uni-wien.ac.at",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "sueddeutsche.de",
            "score": 69,
            "checked_at": "2026-11-13 01:42:22.626115+01",
            "report_url": "https://saferpage.de/sueddeutsche.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "swisscom.ch",
            "score": 72,
            "checked_at": "2026-11-13 01:42:22.244612+01",
            "report_url": "https://saferpage.de/swisscom.ch",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "tk.de",
            "score": 76,
            "checked_at": "2026-11-13 01:42:22.215745+01",
            "report_url": "https://saferpage.de/tk.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "spiegel.de",
            "score": 69,
            "checked_at": "2026-11-13 01:42:22.096921+01",
            "report_url": "https://saferpage.de/spiegel.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "tagesschau.de",
            "score": 76,
            "checked_at": "2026-11-13 01:42:21.785376+01",
            "report_url": "https://saferpage.de/tagesschau.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "swr.de",
            "score": 71,
            "checked_at": "2026-11-13 01:42:21.74008+01",
            "report_url": "https://saferpage.de/swr.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "sparkasse.de",
            "score": 81,
            "checked_at": "2026-11-13 01:42:20.438675+01",
            "report_url": "https://saferpage.de/sparkasse.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "rewe.de",
            "score": 100,
            "checked_at": "2026-11-13 01:42:19.68586+01",
            "report_url": "https://saferpage.de/rewe.de",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "oesterreich.gv.at",
            "score": 80,
            "checked_at": "2026-11-13 01:42:17.830248+01",
            "report_url": "https://saferpage.de/oesterreich.gv.at",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "ndr.de",
            "score": 76,
            "checked_at": "2026-11-13 01:42:16.542106+01",
            "report_url": "https://saferpage.de/ndr.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "o2online.de",
            "score": 71,
            "checked_at": "2026-11-13 01:42:16.401208+01",
            "report_url": "https://saferpage.de/o2online.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "leipzig.de",
            "score": 85,
            "checked_at": "2026-11-13 01:42:16.148359+01",
            "report_url": "https://saferpage.de/leipzig.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "post.ch",
            "score": 73,
            "checked_at": "2026-11-13 01:42:15.785957+01",
            "report_url": "https://saferpage.de/post.ch",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "orf.at",
            "score": 79,
            "checked_at": "2026-11-13 01:42:15.095247+01",
            "report_url": "https://saferpage.de/orf.at",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "hu-berlin.de",
            "score": 100,
            "checked_at": "2026-11-13 01:42:14.716267+01",
            "report_url": "https://saferpage.de/hu-berlin.de",
            "summary": "Mini-Check eingeschränkt"
        },
        {
            "host": "muenchen.de",
            "score": 74,
            "checked_at": "2026-11-13 01:42:14.289587+01",
            "report_url": "https://saferpage.de/muenchen.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "elster.de",
            "score": 85,
            "checked_at": "2026-11-13 01:42:11.591519+01",
            "report_url": "https://saferpage.de/elster.de",
            "summary": "Schneller Mini-Check abgeschlossen"
        },
        {
            "host": "deutsche-rentenversicherung.de",
            "score": 70,
            "checked_at": "2026-11-13 01:42:11.552427+01",
            "report_url": "https://saferpage.de/deutsche-rentenversicherung.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."
}