feat(jobs): add durable PG queue reclaim, slog, and richer metrics
JSON slog в ключевых пакетах; Prometheus path_group, job_audit_depth, upstream breaker; job_audit ClaimQueued/ReclaimStaleRunning + Adopt loop для HA после рестарта. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+10
-9
@@ -14,6 +14,7 @@ import (
|
||||
"evobgp/internal/config"
|
||||
"evobgp/internal/dbcli"
|
||||
"evobgp/internal/httpapi"
|
||||
"evobgp/internal/logging"
|
||||
"evobgp/internal/observability"
|
||||
"evobgp/internal/platform"
|
||||
"evobgp/internal/version"
|
||||
@@ -65,13 +66,13 @@ func main() {
|
||||
}
|
||||
go func() {
|
||||
svc := platform.ServiceName("evobgp-api")
|
||||
log.Printf("%s listening on %s", svc, cfg.HTTPAddr)
|
||||
log.Printf("bundle signing public key (base64, set on evobgp-node): %s", srv.BundlePublicKeyBase64())
|
||||
logging.Default().Info("listening", "service", svc, "addr", cfg.HTTPAddr)
|
||||
logging.Default().Info("bundle signing public key (base64, set on evobgp-node)", "key", srv.BundlePublicKeyBase64())
|
||||
if opts.SeedDemo {
|
||||
tid, mCDN, mIP, rev, sp := srv.Store().DemoIDs()
|
||||
log.Printf("demo tenant=%s module_cdn=%s module_ip_ranges=%s revision=%s speaker=%s", tid, mCDN, mIP, rev, sp)
|
||||
log.Printf("example: EVOBGP_API_KEYS=op|%s|operator,node|%s|node", tid, tid)
|
||||
log.Printf("demo auth: Authorization: Bearer dev (operator, demo tenant only)")
|
||||
logging.Default().Info("demo ids", "tenant", tid, "module_cdn", mCDN, "module_ip_ranges", mIP, "revision", rev, "speaker", sp)
|
||||
logging.Default().Info("example API keys", "hint", "EVOBGP_API_KEYS=op|"+tid+"|operator,node|"+tid+"|node")
|
||||
logging.Default().Info("demo auth: Authorization: Bearer dev (operator, demo tenant only)")
|
||||
}
|
||||
if err := httpSrv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatal(err)
|
||||
@@ -83,15 +84,15 @@ func main() {
|
||||
defer cancel()
|
||||
n := srv.Jobs().RequestCancelAll()
|
||||
if n > 0 {
|
||||
log.Printf("draining %d job(s)…", n)
|
||||
logging.Default().Info("draining jobs", "count", n)
|
||||
if err := srv.Jobs().Drain(shutdownCtx); err != nil {
|
||||
log.Printf("job drain: %v", err)
|
||||
logging.Default().Warn("job drain", "err", err)
|
||||
}
|
||||
}
|
||||
if err := httpSrv.Shutdown(shutdownCtx); err != nil {
|
||||
log.Printf("HTTP shutdown: %v", err)
|
||||
logging.Default().Warn("HTTP shutdown", "err", err)
|
||||
}
|
||||
log.Printf("%s stopped", platform.ServiceName("evobgp-api"))
|
||||
logging.Default().Info("stopped", "service", platform.ServiceName("evobgp-api"))
|
||||
}
|
||||
|
||||
func firstNonEmpty(candidates ...string) string {
|
||||
|
||||
Reference in New Issue
Block a user