Files

64 lines
1.8 KiB
Go

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"strings"
"syscall"
"time"
"evobgp/internal/config"
"evobgp/internal/httpapi"
"evobgp/internal/scheduler"
)
func main() {
cfg := config.Load()
name := cfg.ServiceName
if name == "" {
name = "evobgp-scheduler"
}
log.Printf("%s starting (reference profile worker)", name)
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer stop()
bctx, bcancel := context.WithTimeout(context.Background(), 90*time.Second)
defer bcancel()
opts := httpapi.Options{
DatabaseURL: strings.TrimSpace(os.Getenv("EVOBGP_DATABASE_URL")),
SeedDemo: os.Getenv("EVOBGP_SEED_DEMO") != "0",
}
st, reg, pool, err := httpapi.BootstrapWorkers(bctx, opts)
if err != nil {
log.Fatal(err)
}
if pool != nil {
defer pool.Close()
}
apiBase := strings.TrimSpace(os.Getenv("EVOBGP_CONTROL_PLANE_URL"))
apiTok := strings.TrimSpace(os.Getenv("EVOBGP_SCHEDULER_BEARER"))
if os.Getenv("EVOBGP_SCHEDULER_STANDALONE") == "1" && apiBase == "" {
log.Fatal("evobgp-scheduler: EVOBGP_SCHEDULER_STANDALONE=1 requires EVOBGP_CONTROL_PLANE_URL and EVOBGP_SCHEDULER_BEARER (split deploy must not use in-process jobs.Registry)")
}
deps := &scheduler.Deps{
Store: st,
HTTP: &http.Client{Timeout: 45 * time.Second},
}
if (apiBase != "") != (apiTok != "") {
log.Fatal("evobgp-scheduler: set both EVOBGP_CONTROL_PLANE_URL and EVOBGP_SCHEDULER_BEARER for HTTP mode, or leave both empty for in-process job registry")
}
if apiBase != "" {
deps.APIBase = apiBase
deps.APIToken = apiTok
log.Printf("evobgp-scheduler: control plane HTTP mode (%s)", apiBase)
} else {
deps.Jobs = reg
log.Printf("evobgp-scheduler: in-process job registry mode (use EVOBGP_CONTROL_PLANE_URL + EVOBGP_SCHEDULER_BEARER for split containers)")
}
scheduler.Run(ctx, deps)
}