{"generated_at":"2026-09-11 03:34:25","categories":{"cctv":{"channels":20,"streams":48},"hk_mo_tw":{"channels":7,"streams":7},"local":{"channels":6,"streams":8},"satellite":{"channels":28,"streams":38},"webcast":{"channels":1,"streams":1}},"strict_streams":85,"intermittent_streams":3,"streams":{"published":102,"active":166,"new":2042,"unstable":508},"pending_probe":{"batch_id":"cn-cs-20260911T062406Z-f539af89","expires_at":"2026-09-12T12:24:06Z"},"pending_github":{"batch_id":"gh-auth-20260910T184222Z-f8f4c92f","expires_at":"2026-09-11T18:42:22Z"},"probe_summary":{"gitee_total":33,"gitee_submitted":3,"gitee_consumed":19,"gitee_rejected":1,"gitee_expired":10,"github_total":11,"github_submitted":1,"github_consumed":8,"github_rejected":1,"github_expired":1},"probe_details":[{"name":"gitee-cs","label":"Gitee 主账号","candidate":{"batch_id":"cn-cs-20260911T062406Z-f539af89","count":600,"status":"submitted","mtime":"2026-09-11 03:32:35"},"result":{"batch_id":"cn-cs-20260910T184231Z-afd695cd","count":57,"status":"complete","mtime":"2026-09-11 03:32:35"},"progress":null},{"name":"gitee-css","label":"Gitee 账号2","candidate":{"batch_id":"cn-css-20260911T062408Z-109b6dad","count":600,"status":"submitted","mtime":"2026-09-11 03:32:38"},"result":{"batch_id":"cn-css-20260910T184232Z-e7ba5558","count":57,"status":"complete","mtime":"2026-09-11 03:32:38"},"progress":null},{"name":"gitee-csss","label":"Gitee 账号3","candidate":{"batch_id":"cn-csss-20260911T062409Z-07f25281","count":600,"status":"submitted","mtime":"2026-09-11 03:32:41"},"result":{"batch_id":"cn-csss-20260910T184233Z-13b718f8","count":56,"status":"complete","mtime":"2026-09-11 03:32:41"},"progress":null},{"name":"github-deep","label":"GitHub","candidate":{"batch_id":"gh-deep-20260911T050152Z-1d418c63","count":82,"status":"submitted","mtime":"2026-09-11 01:01:52"},"result":{"batch_id":"gh-deep-20260911T050152Z-1d418c63","count":82,"status":"complete","mtime":"2026-09-11 01:05:11"},"progress":{"batch_id":"gh-deep-20260911T050152Z-1d418c63","total":82,"processed":82,"remaining":0,"status":"complete","updated_at":"2026-09-11T05:03:47Z"}}],"quality":{"github_video_ok":124,"github_risk_events":120,"github_total":244,"top_sources":[{"source_id":13,"name":"kstore-aiwex","score":76.56,"source_count":61,"domestic_success_count":61},{"source_id":11,"name":"zhoujie IPv4","score":57.74,"source_count":104,"domestic_success_count":75},{"source_id":47,"name":"Collect-IPTV 精选排序","score":35.14,"source_count":212,"domestic_success_count":93},{"source_id":1,"name":"fanmingming IPv4","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":2,"name":"fanmingming IPv6","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":3,"name":"YanG-1989 Gather","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":4,"name":"Kimentanm iptv","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":5,"name":"BurningC4 V4","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":6,"name":"Tvlist CCTV","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":7,"name":"iptv-org CN","score":0.0,"source_count":0,"domestic_success_count":0}]},"job_summary":{"state":"running","current_stage":"generate","progress_pct":80.0,"last_error":"未发现异常","stage_health":{"ok":8,"running":0,"waiting":2,"err":0}},"runtime":{"state":"running","current_stage":"generate","progress_pct":80.0,"completed_stage_count":8,"total_stage_count":10,"elapsed_seconds":171.8,"started_at":"2026-09-11 03:31:34","finished_at":"","stages":{"init":{"state":"ok","label":"init","current":0,"total":0,"elapsed_seconds":0.77,"started_at":"2026-09-11 03:31:34","finished_at":"2026-09-11 03:31:34"},"keywords":{"state":"ok","label":"keywords","current":0,"total":0,"elapsed_seconds":0.78,"started_at":"2026-09-11 03:31:34","finished_at":"2026-09-11 03:31:34"},"collect":{"state":"ok","label":"collect","current":28,"total":28,"elapsed_seconds":58.15,"started_at":"2026-09-11 03:31:34","finished_at":"2026-09-11 03:32:32"},"github_auth":{"state":"ok","label":"github_auth","current":0,"total":0,"elapsed_seconds":0.85,"started_at":"2026-09-11 03:32:32","finished_at":"2026-09-11 03:32:32"},"speedtest":{"state":"ok","label":"speedtest","current":0,"total":0,"elapsed_seconds":10.54,"started_at":"2026-09-11 03:32:32","finished_at":"2026-09-11 03:32:42"},"github_deep":{"state":"ok","label":"github_deep","current":0,"total":0,"elapsed_seconds":1.11,"started_at":"2026-09-11 03:32:42","finished_at":"2026-09-11 03:32:43"},"epg":{"state":"ok","label":"epg","current":2050,"total":2050,"elapsed_seconds":10.16,"started_at":"2026-09-11 03:32:43","finished_at":"2026-09-11 03:32:53"},"generate":{"state":"ok","label":"generate","current":3,"total":3,"elapsed_seconds":92.8,"started_at":"2026-09-11 03:32:53","finished_at":"2026-09-11 03:34:25"}}},"recent_runs":[{"run_id":"20260911033134","stage":"epg","status":"ok","end_at":"2026-09-11 03:32:53","stats_json":"{\"detail\": \"{\\\"refreshed\\\": 402}\"}"},{"run_id":"20260911033134","stage":"github_deep","status":"ok","end_at":"2026-09-11 03:32:43","stats_json":"{\"detail\": \"{\\\"phase\\\": \\\"deep\\\", \\\"candidates\\\": 0, \\\"recovered\\\": {\\\"ok\\\": 0, \\\"total\\\": 0, \\\"error\\\": \\\"batch-already-consumed\\\"}, \\\"waiting\\\": \\\"upstream-not-ready\\\", \\\"queue_status\\\": \\\"idle\\\", \\\"released_batches\\\": []}\"}"},{"run_id":"20260911033134","stage":"speedtest","status":"ok","end_at":"2026-09-11 03:32:42","stats_json":"{\"detail\": \"{\\\"waiting\\\": \\\"cn-cs-20260911T062406Z-f539af89\\\", \\\"waiting_batches\\\": [{\\\"batch_id\\\": \\\"cn-cs-20260911T062406Z-f539af89\\\", \\\"expires_at\\\": \\\"2026-09-12T12:24:06Z\\\", \\\"state\\\": \\\"submitted\\\", \\\"state_history_json\\\": \\\"[{\\\\\\\"ts\\\\\\\": \\\\\\\"2026-09-11 02:24:06\\\\\\\", \\\\\\\"state\\\\\\\": \\\\\\\"created\\\\\\\", \\\\\\\"reason\\\\\\\": \\\\\\\"created\\\\\\\"}]\\\"}, {\\\"batch_id\\\": \\\"cn-css-20260911T062408Z-109b6dad\\\", \\\"expires_at\\\": \\\"2026-09-12T12:24:08Z\\\", \\\"state\\\": \\\"submitted\\\", \\\"stat\"}"},{"run_id":"20260911033134","stage":"github_auth","status":"ok","end_at":"2026-09-11 03:32:32","stats_json":"{\"detail\": \"{\\\"waiting\\\": \\\"gh-auth-20260910T184222Z-f8f4c92f\\\", \\\"expires_at\\\": \\\"2026-09-11T18:42:22Z\\\", \\\"recovered\\\": {\\\"ok\\\": 0, \\\"total\\\": 0, \\\"error\\\": \\\"batch-already-consumed\\\"}, \\\"queue_status\\\": \\\"waiting-for-consume\\\", \\\"released_batches\\\": [\\\"gh-auth-001\\\"]}\"}"},{"run_id":"20260911033134","stage":"collect","status":"ok","end_at":"2026-09-11 03:32:32","stats_json":"{\"detail\": \"\\\"['ok(+64)', 'unchanged', 'unchanged', 'unchanged', \\\\\\\"err:HTTPSConnectionPool(host='tv.iill.top', port=443): Max retri\\\\\\\", 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'unchanged', 'no-items', 'no-items', 'ok(+0)', 'no-items', 'no-items', 'no-items', 'no-items', 'no-items', 'n\"}"},{"run_id":"20260911033134","stage":"keywords","status":"ok","end_at":"2026-09-11 03:31:34","stats_json":"{\"detail\": \"\\\"0\\\"\"}"},{"run_id":"20260911033134","stage":"init","status":"ok","end_at":"2026-09-11 03:31:34","stats_json":"{\"detail\": \"\\\"None\\\"\"}"},{"run_id":"20260911031038","stage":"total","status":"err","end_at":"2026-09-11 03:14:38","stats_json":"{\"secs\": 235.8}"},{"run_id":"20260911031038","stage":"generate","status":"err","end_at":"2026-09-11 03:14:26","stats_json":"{\"detail\": \"Traceback (most recent call last):\\n File \\\"/opt/iptv-scraper/iptv_scraper/orchestrator.py\\\", line 352, in run_stage\\n res = fn(ctx)\\n ^^^^^^^\\n File \\\"/opt/iptv-scraper/iptv_scraper/orchestrator.py\\\", line 311, in stage_generate\\n generated, total_ch, lives = generator.build_all(c, staging)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/opt/iptv-scraper/iptv_scr\"}"},{"run_id":"20260911031038","stage":"epg","status":"ok","end_at":"2026-09-11 03:12:53","stats_json":"{\"detail\": \"{\\\"refreshed\\\": 402}\"}"},{"run_id":"20260911031038","stage":"github_deep","status":"ok","end_at":"2026-09-11 03:12:42","stats_json":"{\"detail\": \"{\\\"phase\\\": \\\"deep\\\", \\\"candidates\\\": 0, \\\"recovered\\\": {\\\"ok\\\": 0, \\\"total\\\": 0, \\\"error\\\": \\\"batch-already-consumed\\\"}, \\\"waiting\\\": \\\"upstream-not-ready\\\", \\\"queue_status\\\": \\\"idle\\\", \\\"released_batches\\\": []}\"}"},{"run_id":"20260911031038","stage":"speedtest","status":"ok","end_at":"2026-09-11 03:12:42","stats_json":"{\"detail\": \"{\\\"waiting\\\": \\\"cn-cs-20260911T062406Z-f539af89\\\", \\\"waiting_batches\\\": [{\\\"batch_id\\\": \\\"cn-cs-20260911T062406Z-f539af89\\\", \\\"expires_at\\\": \\\"2026-09-12T12:24:06Z\\\", \\\"state\\\": \\\"submitted\\\", \\\"state_history_json\\\": \\\"[{\\\\\\\"ts\\\\\\\": \\\\\\\"2026-09-11 02:24:06\\\\\\\", \\\\\\\"state\\\\\\\": \\\\\\\"created\\\\\\\", \\\\\\\"reason\\\\\\\": \\\\\\\"created\\\\\\\"}]\\\"}, {\\\"batch_id\\\": \\\"cn-css-20260911T062408Z-109b6dad\\\", \\\"expires_at\\\": \\\"2026-09-12T12:24:08Z\\\", \\\"state\\\": \\\"submitted\\\", \\\"stat\"}"}]}