Add a job-queue health check so stalled background jobs can't go unnoticed again
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- backend, observability
Direzione di ricerca
Inizia da app/controllers/health_controller.rb, accanto all'azione health esistente, e aggiungi l'azione jobs; la route va sotto resources :health in config/routes.rb. Conta solo le righe Delayed::Job scadute e non fallite (run_at <= now, failed_at nil) usando due query di aggregazione, e restituisci 503 quando il job scaduto più vecchio supera la soglia ENV (predefinita 3600). È completato quando spec/requests/health_spec.rb copre 200 vuoto, 200 recente, 503 obsoleto e un body senza dati di handler o argomenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
From early 2022 until 2026-11-01, production background jobs (delayed_job) never ran: no worker dyno was on and nothing in Heroku Scheduler processed the queue. About 8,000 jobs piled up, mostly emails: followup notifications, supervisor reimbursement requests, and completed-reimbursement notices. Nobody noticed for 4.5 years, because nothing checks that jobs are actually being processed.
A Scheduler entry now runs rake jobs:workoff every 10 minutes. If it stops (removed by mistake, failing on boot, a rake-only bug like #7283), we'd be blind again.
Proposal
Add a cheap queue-health signal that an uptime monitor can poll.
- New endpoint, e.g.
GET /health/jobs.json, next to the existing/health(app/controllers/health_controller.rb, route inconfig/routes.rbunderresources :health). It returns only aggregate numbers, never job payloads (handlers contain record IDs and arguments):{"queued": 3, "oldest_queued_age_seconds": 412, "failing": 0}queued:Delayed::Job.where(failed_at: nil).countoldest_queued_age_seconds: age of the oldest job that is due to run (run_at <= now, not failed), ornullfailing: jobs withlast_errorset, orattempts > 0
- Respond 503 when the oldest due job is older than a threshold (e.g. 1 hour; configurable via ENV, default 3600), so a simple HTTP uptime check can alert on it. Otherwise 200.
- Request spec in
spec/requests/health_spec.rb: 200 with an empty queue, 200 with a fresh job, 503 with a job older than the threshold, and no handler or argument data in the response body. - Keep it cheap: two indexed aggregate queries, no loading of job rows.
- Document the endpoint in the wiki deploy checklist / README so a maintainer can point an uptime monitor at it. A maintainer will set up the actual monitor.
Notes
- Jobs with a future
run_at(retry backoff) shouldn't count as "stuck". Only count jobs that are due. - Don't require auth for the JSON, since it exposes only counts. If you'd rather gate it, follow the token pattern used by
old_objectsin the same controller.
Difficulty: beginner–intermediate. One controller action, one route, one request spec.
- Lingua principale
- Ruby
- Stelle
- 382
- Fork
- 547
- Merge medio
- 2g 22h
- PR unite (30g)
- 46
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di rubyforgood/casa
-
Remove leftover Cloud66 custom_web process from ProcfileForse già presa @ShahadatTest l’ha presa oggi. ApertaDifficulty: Easy Good First Issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
rubyforgood/casa#7330 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
dependencies Difficulty: Easy Good First Issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
rubyforgood/casa#7325 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficulty: Easy Good First Issue Help Wanted javascript
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
rubyforgood/casa#7311 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficulty: Easy Good First Issue Help Wanted javascript
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rubyforgood/casa#7310 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficulty: Easy Good First Issue Help Wanted javascript
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rubyforgood/casa#7309 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di rubyforgood/casa
Issue simili
-
bug needs-triaging
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
SeleniumHQ/seleniumhq.github.io#2952 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
hashicorp/homebrew-tap#433 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 8 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
TheOdinProject/curriculum#31509 ·
I maintainer di solito rispondono entro 1 giorno