Adiciona mecanismo de expiração periódica para jobs que ficam presos nos status received ou processing além de um threshold configurável. - models: novo status StatusTimeout - store: migration v2 com índice em jobs(status); método ExpireStuck que faz UPDATE atômico para os status alvo anteriores ao threshold - expirer: novo pacote com goroutine periódica que chama ExpireStuck e loga WARN quando algum job é expirado - config: campos JobTimeoutMinutes (default 120) e ExpirerIntervalMinutes (default 10), lidos via env vars JOB_TIMEOUT_MINUTES e EXPIRER_INTERVAL_MINUTES - main: instancia e inicia o Expirer no startup - dashboard: card Timeout com contagem; badge neutral na tabela de jobs
42 lines
711 B
Go
42 lines
711 B
Go
package models
|
|
|
|
import "time"
|
|
|
|
type JobStatus string
|
|
|
|
const (
|
|
StatusReceived JobStatus = "received"
|
|
StatusProcessing JobStatus = "processing"
|
|
StatusDone JobStatus = "done"
|
|
StatusError JobStatus = "error"
|
|
StatusTimeout JobStatus = "timeout"
|
|
)
|
|
|
|
type JobSource string
|
|
|
|
const (
|
|
SourceWebhook JobSource = "webhook"
|
|
SourceManual JobSource = "manual"
|
|
)
|
|
|
|
type Job struct {
|
|
ID string
|
|
Artist string
|
|
Album string
|
|
Path string
|
|
Status JobStatus
|
|
Source JobSource
|
|
CreatedAt time.Time
|
|
FinishedAt *time.Time
|
|
DurationMs int64
|
|
ErrorMsg string
|
|
}
|
|
|
|
type LogEntry struct {
|
|
ID int64
|
|
JobID string
|
|
Level string
|
|
Message string
|
|
Timestamp time.Time
|
|
}
|