ncro: call Validate() in main; wire metrics, priority, and mesh stub

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I428e17606daf1833d5aea20a22461abe6a6a6964
This commit is contained in:
raf 2026-03-06 17:39:14 +03:00
commit 02e7065171
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF

View file

@ -10,8 +10,11 @@ import (
"syscall"
"time"
"github.com/prometheus/client_golang/prometheus"
"notashelf.dev/ncro/internal/cache"
"notashelf.dev/ncro/internal/config"
"notashelf.dev/ncro/internal/mesh"
"notashelf.dev/ncro/internal/metrics"
"notashelf.dev/ncro/internal/prober"
"notashelf.dev/ncro/internal/router"
"notashelf.dev/ncro/internal/server"
@ -26,6 +29,10 @@ func main() {
slog.Error("failed to load config", "error", err)
os.Exit(1)
}
if err := cfg.Validate(); err != nil {
slog.Error("invalid config", "error", err)
os.Exit(1)
}
level := slog.LevelInfo
switch cfg.Logging.Level {
@ -44,6 +51,8 @@ func main() {
}
slog.SetDefault(slog.New(handler))
metrics.Register(prometheus.DefaultRegisterer)
db, err := cache.Open(cfg.Cache.DBPath, cfg.Cache.MaxEntries)
if err != nil {
slog.Error("failed to open database", "path", cfg.Cache.DBPath, "error", err)
@ -68,18 +77,24 @@ func main() {
}()
p := prober.New(cfg.Cache.LatencyAlpha)
upstreamURLs := make([]string, len(cfg.Upstreams))
for i, u := range cfg.Upstreams {
upstreamURLs[i] = u.URL
}
p.InitUpstreams(upstreamURLs)
for _, u := range upstreamURLs {
go p.ProbeUpstream(u)
p.InitUpstreams(cfg.Upstreams)
for _, u := range cfg.Upstreams {
go p.ProbeUpstream(u.URL)
}
probeDone := make(chan struct{})
go p.RunProbeLoop(30*time.Second, probeDone)
if cfg.Mesh.Enabled {
node, err := mesh.NewNode(cfg.Mesh.PrivateKeyPath, nil)
if err != nil {
slog.Error("failed to create mesh node", "error", err)
os.Exit(1)
}
slog.Info("mesh enabled", "node_id", node.ID(), "peers", len(cfg.Mesh.Peers))
slog.Warn("mesh gossip not yet implemented")
}
r := router.New(db, p, cfg.Cache.TTL.Duration, 5*time.Second)
srv := &http.Server{
Addr: cfg.Server.Listen,