goon/app
jtrzupek 0424cb9138 feat(scheduler): per-origin ingest freshness watchdog -> Sentry
The global source monitor can't catch a single stalled tube because every tube scraper shares one Source row (tube-scraper), so an aggregate run still reports success while one origin freezes (freshporno browsing the rotating KVS homepage root, report 14f3a655). New watchdog checks max(created_at) per active browse-scraper origin (tube:<sitetag>); if a tube with history hasn't produced a new scene in > max_age_hours it fires a Sentry message with a stable per-origin fingerprint (age in extras, not the title, so it stays one grouped issue). Runs every 6h, 48h threshold, both env-tunable (GOON_SCHED_INGEST_WATCHDOG_HOURS / GOON_INGEST_WATCHDOG_MAX_AGE_HOURS). Verified: 0 stale at 48h post-fix, detects neporn at a strict 12h threshold.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 10:26:25 +02:00
..
api feat(scenes): force-refresh thumbnail via enrich-thumbnail ?force 2026-06-13 19:04:10 +02:00
connectors fix(scrapers): freshporno browse from /latest-updates/ not homepage root 2026-06-15 09:59:40 +02:00
extractors fix(extractors): 4k69 direct okcdn extraction (replaces WebView fallback) 2026-06-14 11:39:36 +02:00
models feat(bug-reports): two-way replies (device-scoped) + admin reply endpoint 2026-06-12 11:35:44 +02:00
normalize feat(ingest): SQL phash match, tag inference + backfill, clip-store skip, browse tubes, watchdog 2026-06-01 15:07:35 +02:00
resolve fix(ingest): cap code/director to column length (GOON-J) 2026-06-13 19:04:10 +02:00
scheduler feat(scheduler): per-origin ingest freshness watchdog -> Sentry 2026-06-15 10:26:25 +02:00
templates feat(seo): public HTML SEO router + templates; add CLAUDE.md; ignore .nimbalyst 2026-05-31 16:29:59 +02:00
__init__.py Initial commit 2026-05-20 10:10:22 +02:00
auth.py Initial commit 2026-05-20 10:10:22 +02:00
config.py feat(scheduler): per-origin ingest freshness watchdog -> Sentry 2026-06-15 10:26:25 +02:00
db.py Initial commit 2026-05-20 10:10:22 +02:00
ingest.py fix(ingest): strip NUL bytes from raw payloads before Postgres write 2026-06-11 19:48:22 +02:00
main.py feat(api): device-scope user state (favorites/progress/blacklists) 2026-06-10 08:58:01 +02:00