feat: implement nixos-exporter

Prometheus exporter for NixOS-specific metrics including:
- Generation collector: count, current, booted, age, config mismatch
- Flake collector: input age, input info, revision behind

Includes NixOS module, flake packaging, and documentation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-06 22:50:14 +01:00
commit f637da487c
14 changed files with 1345 additions and 0 deletions

31
config/config.go Normal file
View File

@@ -0,0 +1,31 @@
package config
import (
"flag"
"fmt"
"time"
)
type Config struct {
ListenAddr string
FlakeCollector bool
FlakeURL string
FlakeCheckInterval time.Duration
}
func Parse() (*Config, error) {
cfg := &Config{}
flag.StringVar(&cfg.ListenAddr, "listen", ":9971", "Address to listen on")
flag.BoolVar(&cfg.FlakeCollector, "collector.flake", false, "Enable flake collector")
flag.StringVar(&cfg.FlakeURL, "flake.url", "", "Flake URL for revision comparison (required if flake collector enabled)")
flag.DurationVar(&cfg.FlakeCheckInterval, "flake.check-interval", time.Hour, "Interval between remote flake checks")
flag.Parse()
if cfg.FlakeCollector && cfg.FlakeURL == "" {
return nil, fmt.Errorf("--flake.url is required when --collector.flake is enabled")
}
return cfg, nil
}