Add profiling

This commit is contained in:
Torjus Håkestad 2025-05-24 12:27:00 +02:00
parent 586440fe8d
commit c620e4a005
Signed by: torjus
SSH Key Fingerprint: SHA256:KjAds8wHfD2mBYK2H815s/+ABcSdcIHUndwHEdSxml4
3 changed files with 17 additions and 7 deletions

View File

@ -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"`
}

View File

@ -1,5 +1,6 @@
# Endpoint for the metrics server
ListenAddr = ":9969"
Profiling = true
# Monitor step-ca root certificate
[[StepMonitors]]

22
main.go
View File

@ -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)
}