From 69ed28dc809545fea548c87ea9b089550bb7984f Mon Sep 17 00:00:00 2001 From: Gerrit Date: Tue, 21 Jan 2025 09:53:55 +0100 Subject: [PATCH] Make timeouts and intervals configurable. --- main.go | 35 +++++++++++++++++++++++++---------- metrics.go | 2 +- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/main.go b/main.go index 38288fe..1e722e5 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "log/slog" "net/http" "os" @@ -12,28 +11,44 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" ) -const ( - fetchInterval = 120 * time.Second // time to sleep after every metrics fetch - updateTimeout = 90 * time.Second // maximum time for metal-api to respond to all our requests -) - var ( client metalgo.Client ) func main() { + envOrDefault := func(key, fallback string) string { + if val := os.Getenv(key); val != "" { + return val + } + return fallback + } + var ( log = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo})) - url = os.Getenv("METAL_API_URL") - hmac = os.Getenv("METAL_API_HMAC") + url = os.Getenv("METAL_API_URL") + hmac = os.Getenv("METAL_API_HMAC") + fetchIntervalEnv = envOrDefault("FETCH_INTERVAL", "90s") // time to sleep after every metrics fetch + updateTimeoutEnv = envOrDefault("UPDATE_TIMEOUT", "60s") // maximum time for metal-api to respond to all our requests until context gets cancelled err error ) client, err = metalgo.NewDriver(url, "", hmac) if err != nil { - fmt.Print(err) + log.Error("error creating client", "error", err) + os.Exit(1) + } + + fetchInterval, err := time.ParseDuration(fetchIntervalEnv) + if err != nil { + log.Error("error parsing fetch interval", "error", err) + os.Exit(1) + } + + updateTimeout, err := time.ParseDuration(updateTimeoutEnv) + if err != nil { + log.Error("error parsing update timeout", "error", err) os.Exit(1) } @@ -47,7 +62,7 @@ func main() { log.Info("updating metrics...") start := time.Now() - err = update() + err = update(updateTimeout) if err != nil { if !initialUpdateSuccess { log.Error("error during initial update", "error", err) diff --git a/metrics.go b/metrics.go index 9c5f7d3..11794b6 100644 --- a/metrics.go +++ b/metrics.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sync/errgroup" ) -func update() error { +func update(updateTimeout time.Duration) error { ctx, cancel := context.WithTimeout(context.Background(), updateTimeout) defer cancel()