diff --git a/config/config.go b/config/config.go index 4686fbb..75ac739 100644 --- a/config/config.go +++ b/config/config.go @@ -22,6 +22,7 @@ type TLSConnectionMonitor struct { type Config struct { ListenAddr string `toml:"ListenAddr"` + Profiling bool `toml:"Profiling"` StepMonitors []StepMonitor `toml:"StepMonitors"` TLSConnectionMonitors []TLSConnectionMonitor `toml:"TLSConnectionMonitors"` } diff --git a/labmon.toml b/labmon.toml index f979021..5e9250e 100644 --- a/labmon.toml +++ b/labmon.toml @@ -1,5 +1,6 @@ # Endpoint for the metrics server ListenAddr = ":9969" +Profiling = true # Monitor step-ca root certificate [[StepMonitors]] diff --git a/main.go b/main.go index 0b37d91..20acfb4 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "fmt" "log/slog" "net/http" + "net/http/pprof" "os" "os/signal" "time" @@ -31,8 +32,8 @@ func LoadConfig() (*config.Config, error) { } func main() { - // Load config - config, err := LoadConfig() + // Load cfg + cfg, err := LoadConfig() if err != nil { fmt.Printf("Error loading config: %v\n", err) os.Exit(1) @@ -45,7 +46,7 @@ func main() { // Setup stepmons var stepmons []*stepmon.StepMonitor - for _, s := range config.StepMonitors { + for _, s := range cfg.StepMonitors { if s.Enabled { sm := stepmon.NewStepMonitor(s.BaseURL, s.RootID) sm.SetLogger(logger) @@ -62,7 +63,7 @@ func main() { // Setup tlsconmons var tlsconmons []*tlsconmon.TLSConnectionMonitor - for _, t := range config.TLSConnectionMonitors { + for _, t := range cfg.TLSConnectionMonitors { if t.Enabled { duration, err := time.ParseDuration(t.Duration) if err != nil { @@ -95,14 +96,21 @@ func main() { // Start http server srv := &http.Server{} - srv.Addr = config.ListenAddr + srv.Addr = cfg.ListenAddr mux := http.NewServeMux() - mux.Handle("/metrics", promhttp.Handler()) srv.Handler = mux + + mux.Handle("/metrics", promhttp.Handler()) + + if cfg.Profiling { + logger.Info("Profiling enabled, exposing /debug/pprof") + mux.HandleFunc("/debug/pprof/", pprof.Index) + } + // Start http server go func() { - logger.Info("Starting HTTP server", "addr", config.ListenAddr) + logger.Info("Starting HTTP server", "addr", cfg.ListenAddr) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { logger.Error("HTTP server error", "error", err) }