package metrics import ( "flag" "os" "strings" "github.com/safing/portbase/config" ) // Configuration Keys. var ( CfgOptionInstanceKey = "core/metrics/instance" instanceOption config.StringOption cfgOptionInstanceOrder = 0 CfgOptionCommentKey = "core/metrics/comment" commentOption config.StringOption cfgOptionCommentOrder = 0 CfgOptionPushKey = "core/metrics/push" pushOption config.StringOption cfgOptionPushOrder = 0 instanceFlag string defaultInstance string commentFlag string pushFlag string ) func init() { hostname, err := os.Hostname() if err == nil { hostname = strings.ReplaceAll(hostname, "-", "") if prometheusFormat.MatchString(hostname) { defaultInstance = hostname } } flag.StringVar(&instanceFlag, "metrics-instance", defaultInstance, "set the default metrics instance label for all metrics") flag.StringVar(&commentFlag, "metrics-comment", "", "set the default metrics comment label") flag.StringVar(&pushFlag, "push-metrics", "", "set default URL to push prometheus metrics to") } func prepConfig() error { err := config.Register(&config.Option{ Name: "Metrics Instance Name", Key: CfgOptionInstanceKey, Description: "Define the prometheus instance label for all exported metrics. Please note that changing the metrics instance name will reset persisted metrics.", Sensitive: true, OptType: config.OptTypeString, ExpertiseLevel: config.ExpertiseLevelExpert, ReleaseLevel: config.ReleaseLevelStable, DefaultValue: instanceFlag, RequiresRestart: true, Annotations: config.Annotations{ config.DisplayOrderAnnotation: cfgOptionInstanceOrder, config.CategoryAnnotation: "Metrics", }, ValidationRegex: "^(" + prometheusBaseFormt + ")?$", }) if err != nil { return err } instanceOption = config.Concurrent.GetAsString(CfgOptionInstanceKey, instanceFlag) err = config.Register(&config.Option{ Name: "Metrics Comment Label", Key: CfgOptionCommentKey, Description: "Define a metrics comment label, which is added to the info metric.", Sensitive: true, OptType: config.OptTypeString, ExpertiseLevel: config.ExpertiseLevelExpert, ReleaseLevel: config.ReleaseLevelStable, DefaultValue: commentFlag, RequiresRestart: true, Annotations: config.Annotations{ config.DisplayOrderAnnotation: cfgOptionCommentOrder, config.CategoryAnnotation: "Metrics", }, }) if err != nil { return err } commentOption = config.Concurrent.GetAsString(CfgOptionCommentKey, commentFlag) err = config.Register(&config.Option{ Name: "Push Prometheus Metrics", Key: CfgOptionPushKey, Description: "Push metrics to this URL in the prometheus format.", Sensitive: true, OptType: config.OptTypeString, ExpertiseLevel: config.ExpertiseLevelExpert, ReleaseLevel: config.ReleaseLevelStable, DefaultValue: pushFlag, RequiresRestart: true, Annotations: config.Annotations{ config.DisplayOrderAnnotation: cfgOptionPushOrder, config.CategoryAnnotation: "Metrics", }, }) if err != nil { return err } pushOption = config.Concurrent.GetAsString(CfgOptionPushKey, pushFlag) return nil }