package main import ( "context" "log/slog" "net/http" "os" "os/signal" "syscall" "time" "code.t-juice.club/torjus/nixos-exporter/collector" "code.t-juice.club/torjus/nixos-exporter/config" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) const version = "0.4.0" func main() { cfg, err := config.Parse() if err != nil { slog.Error("Failed to parse config", "error", err) os.Exit(1) } // Register generation collector genCollector := collector.NewGenerationCollector() prometheus.MustRegister(genCollector) slog.Info("Registered generation collector") // Register flake collector if enabled var flakeCollector *collector.FlakeCollector if cfg.FlakeCollector { var err error flakeCollector, err = collector.NewFlakeCollectorWithNATS(collector.FlakeCollectorConfig{ FlakeURL: cfg.FlakeURL, CheckInterval: cfg.FlakeCheckInterval, NATSEnabled: cfg.FlakeNATSEnable, NATSURL: cfg.FlakeNATSURL, NATSSubject: cfg.FlakeNATSSubject, NATSCredentialsFile: cfg.FlakeNATSCredentialsFile, NATSNkeySeedFile: cfg.FlakeNATSNkeySeedFile, }) if err != nil { slog.Error("Failed to create flake collector", "error", err) os.Exit(1) } prometheus.MustRegister(flakeCollector) slog.Info("Registered flake collector", "url", cfg.FlakeURL, "check_interval", cfg.FlakeCheckInterval, "nats_enabled", cfg.FlakeNATSEnable) } mux := http.NewServeMux() mux.Handle("/metrics", promhttp.Handler()) mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte(`