diff options
| author | Mel <mel@rnrd.eu> | 2026-08-20 21:45:20 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2026-08-20 21:45:20 +0200 |
| commit | 6a4c0a16118d0b545c3c5f6a08ecad432940c1cf (patch) | |
| tree | 39da9f54ce2d8a3c2401d4744b2cad6c65565ed1 /main.go | |
| parent | b52c860a7b1d3f57abc442bb8c1257f228d49536 (diff) | |
| download | ddnnss-6a4c0a16118d0b545c3c5f6a08ecad432940c1cf.tar.zst ddnnss-6a4c0a16118d0b545c3c5f6a08ecad432940c1cf.zip | |
Clean logging for modules
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 119 |
1 files changed, 84 insertions, 35 deletions
@@ -27,50 +27,55 @@ func main() { return } - slog.Info("ddnnss!", slog.String("version", version)) + baseLog := slog.New(slog.NewTextHandler(os.Stderr, nil)) + baseLog.Info("ddnnss!", slog.String("version", version)) cfg, err := LoadConfig(*configPath) if err != nil { - slog.Error("could not load config", slog.String("error", err.Error())) + baseLog.Error("could not load config", slog.String("error", err.Error())) os.Exit(1) } - providers := map[string]provider.Provider{} - sources := map[string]source.Source{} + providers, sources := createModules(baseLog, cfg) - slog.Info("starting new cycle", slog.Int("records", len(cfg.Records))) + baseLog.Info("starting new cycle", slog.Int("records", len(cfg.Records))) failed := false for _, r := range cfg.Records { fqdn := r.Name + "." + r.Zone - log := slog.With("record", fqdn, "type", r.Type) + log := baseLog.With( + slog.Group("record", + slog.String("fqdn", fqdn), + slog.String("type", string(r.Type)), + ), + ) + + sourceName, providerName := r.Source, r.Provider log.Info( "ensuring record", - slog.String("provider", r.Provider), - slog.String("source", r.Source), + slog.String("provider", providerName), + slog.String("source", sourceName), ) - p, ok := providers[r.Provider] - if !ok { - p, err = provider.New(log, cfg.Providers[r.Provider]) - if err != nil { - log.Error("provider setup failed", "provider", r.Provider, "error", err) - failed = true - continue - } - providers[r.Provider] = p + s, ok := sources[sourceName] + if !ok || s == nil { + log.Error( + "skipping record, failed creating source", + slog.String("source", sourceName), + ) + failed = true + continue } - s, ok := sources[r.Source] - if !ok { - s, err = source.New(log, cfg.Sources[r.Source]) - if err != nil { - log.Error("source setup failed", "source", r.Source, "error", err) - failed = true - continue - } - sources[r.Source] = s + p, ok := providers[providerName] + if !ok || p == nil { + log.Error( + "skipping record, failed creating provider", + slog.String("provider", providerName), + ) + failed = true + continue } family := source.IPv4 @@ -78,15 +83,22 @@ func main() { family = source.IPv6 } if !s.Supports(family) { - log.Error("source cannot provide the needed address family", - "source", r.Source, "family", family) + log.Error( + "skipping record, source cannot provide the needed address family", + slog.String("source", sourceName), + slog.String("family", string(family)), + ) failed = true continue } addr, err := s.Lookup(family) if err != nil { - log.Error("address lookup failed", "source", r.Source, "error", err) + log.Error( + "failed record, address lookup failed", + slog.String("source", sourceName), + slog.String("error", err.Error()), + ) failed = true continue } @@ -94,25 +106,62 @@ func main() { prev, changed, err := p.Ensure(r.Zone, r.Name, r.Type, addr) switch { case err != nil: - log.Error("update failed", "error", err) + log.Error("record update failed", slog.String("error", err.Error())) failed = true case changed && prev == "": - log.Info("record created", "addr", addr) + log.Info("record created", slog.String("addr", addr.String())) case changed: - log.Info("record updated", "from", prev, "to", addr) + log.Info("record updated", slog.String("from", prev), slog.String("to", addr.String())) default: log.Info("record unchanged", "addr", addr) } } - slog.Info( - "cycle finished", + baseLog.Info( + "cycle finished!", slog.Int("records", len(cfg.Records)), slog.Bool("failed", failed), ) if failed { - slog.Error("not all records were ensured successfully") + baseLog.Error("not all records were ensured successfully") os.Exit(1) } } + +func createModules(log *slog.Logger, cfg *Config) (map[string]provider.Provider, map[string]source.Source) { + sources := map[string]source.Source{} + providers := map[string]provider.Provider{} + + for name, c := range cfg.Sources { + s, err := source.New(log, name, c) + if err != nil { + log.Error( + "failed creating source", + slog.String("name", name), + slog.String("kind", string(c.Kind)), + slog.String("error", err.Error()), + ) + sources[name] = nil + continue + } + sources[name] = s + } + + for name, c := range cfg.Providers { + p, err := provider.New(log, name, c) + if err != nil { + log.Error( + "failed creating provider", + slog.String("name", name), + slog.String("kind", string(c.Kind)), + slog.String("error", err.Error()), + ) + providers[name] = nil + continue + } + providers[name] = p + } + + return providers, sources +} |
