- Refactor dashboard/collector/collector.go to use config.GetScrapeTargets() - Refactor dashboard/api/router.go to use config.GetScrapeTargets() - Add dashboard/config/config.go with DefaultScrapeTarget set to devpod namespace - Remove hardcoded mcp namespace defaults from both files Acceptance: No occurrence of zai-proxy.mcp.svc.cluster.local remains in dashboard Go code, both DefaultConfig structs use devpod default, existing SCRAPE_TARGETS env override unchanged.
86 lines
2.5 KiB
Go
86 lines
2.5 KiB
Go
// Package config provides shared configuration constants and helpers for the dashboard.
|
|
package config
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// DefaultScrapeTarget is the default Prometheus metrics endpoint to scrape.
|
|
const DefaultScrapeTarget = "http://zai-proxy.devpod.svc.cluster.local:8080/metrics"
|
|
|
|
// DefaultScrapeInterval is the default interval between scrapes.
|
|
const DefaultScrapeInterval = 5 * time.Second
|
|
|
|
// DefaultScrapeTimeout is the default HTTP timeout for each scrape.
|
|
const DefaultScrapeTimeout = 3 * time.Second
|
|
|
|
// DefaultListenAddr is the default HTTP listen address for the dashboard API.
|
|
const DefaultListenAddr = ":8080"
|
|
|
|
// GetEnvOrDefault retrieves an environment variable or returns a default value.
|
|
func GetEnvOrDefault(key, defaultValue string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// ParseDurationOrDefault parses a duration from an env var or returns a default.
|
|
func ParseDurationOrDefault(key string, defaultValue time.Duration) time.Duration {
|
|
if value := os.Getenv(key); value != "" {
|
|
if parsed, err := time.ParseDuration(value); err == nil {
|
|
return parsed
|
|
}
|
|
}
|
|
return defaultValue
|
|
}
|
|
|
|
// SplitTargets splits a comma-separated list of scrape targets.
|
|
// Empty strings between commas are skipped.
|
|
func SplitTargets(s string) []string {
|
|
var result []string
|
|
var current string
|
|
for _, c := range s {
|
|
if c == ',' {
|
|
if current != "" {
|
|
result = append(result, current)
|
|
current = ""
|
|
}
|
|
} else {
|
|
current += string(c)
|
|
}
|
|
}
|
|
if current != "" {
|
|
result = append(result, current)
|
|
}
|
|
return result
|
|
}
|
|
|
|
// GetScrapeTargets returns the list of scrape targets from SCRAPE_TARGETS env var,
|
|
// or the default target if not set.
|
|
func GetScrapeTargets() []string {
|
|
if value := os.Getenv("SCRAPE_TARGETS"); value != "" {
|
|
return SplitTargets(value)
|
|
}
|
|
return []string{DefaultScrapeTarget}
|
|
}
|
|
|
|
// GetScrapeInterval returns the scrape interval from SCRAPE_INTERVAL env var,
|
|
// or the default interval if not set/invalid.
|
|
func GetScrapeInterval() time.Duration {
|
|
return ParseDurationOrDefault("SCRAPE_INTERVAL", DefaultScrapeInterval)
|
|
}
|
|
|
|
// GetScrapeTimeout returns the scrape timeout from SCRAPE_TIMEOUT env var,
|
|
// or the default timeout if not set/invalid.
|
|
func GetScrapeTimeout() time.Duration {
|
|
return ParseDurationOrDefault("SCRAPE_TIMEOUT", DefaultScrapeTimeout)
|
|
}
|
|
|
|
// GetListenAddr returns the HTTP listen address from LISTEN_ADDR env var,
|
|
// or the default address if not set.
|
|
func GetListenAddr() string {
|
|
return GetEnvOrDefault("LISTEN_ADDR", DefaultListenAddr)
|
|
}
|