From e5713e3a81a51c339095d9235abe9405e02d0d3f Mon Sep 17 00:00:00 2001 From: Jason Kulatunga Date: Sun, 25 Apr 2021 11:24:03 -0700 Subject: [PATCH] added ability to configure collector variables using config file (api endpoint, log level, log file). fixes #124 --- .../collector-metrics/collector-metrics.go | 27 +++++++++++++------ .../collector-selftest/collector-selftest.go | 1 + collector/pkg/config/config.go | 5 ++++ example.collector.yaml | 7 ++++- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/collector/cmd/collector-metrics/collector-metrics.go b/collector/cmd/collector-metrics/collector-metrics.go index 2c4dbdb..c92f6f3 100644 --- a/collector/cmd/collector-metrics/collector-metrics.go +++ b/collector/cmd/collector-metrics/collector-metrics.go @@ -99,24 +99,37 @@ OPTIONS: return err } } + //override config with flags if set if c.IsSet("host-id") { config.Set("host.id", c.String("host-id")) // set/override the host-id using CLI. } + if c.Bool("debug") { + config.Set("log.level", "DEBUG") + } + + if c.IsSet("log-file") { + config.Set("log.file", c.String("log-file")) + } + + if c.IsSet("api-endpoint") { + config.Set("api.endpoint", c.String("api-endpoint")) + } + collectorLogger := logrus.WithFields(logrus.Fields{ "type": "metrics", }) - if c.Bool("debug") { - logrus.SetLevel(logrus.DebugLevel) + if level, err := logrus.ParseLevel(config.GetString("log.level")); err == nil { + logrus.SetLevel(level) } else { logrus.SetLevel(logrus.InfoLevel) } - if c.IsSet("log-file") { - logFile, err := os.OpenFile(c.String("log-file"), os.O_CREATE|os.O_WRONLY, 0644) + if config.IsSet("log.file") && len(config.GetString("log.file")) > 0 { + logFile, err := os.OpenFile(config.GetString("log.file"), os.O_CREATE|os.O_WRONLY, 0644) if err != nil { - logrus.Errorf("Failed to open log file %s for output: %s", c.String("log-file"), err) + logrus.Errorf("Failed to open log file %s for output: %s", config.IsSet("log.file"), err) return err } defer logFile.Close() @@ -126,7 +139,7 @@ OPTIONS: metricCollector, err := collector.CreateMetricsCollector( config, collectorLogger, - c.String("api-endpoint"), + config.GetString("api.endpoint"), ) if err != nil { @@ -144,14 +157,12 @@ OPTIONS: &cli.StringFlag{ Name: "api-endpoint", Usage: "The api server endpoint", - Value: "http://localhost:8080", EnvVars: []string{"SCRUTINY_API_ENDPOINT"}, }, &cli.StringFlag{ Name: "log-file", Usage: "Path to file for logging. Leave empty to use STDOUT", - Value: "", EnvVars: []string{"COLLECTOR_LOG_FILE"}, }, diff --git a/collector/cmd/collector-selftest/collector-selftest.go b/collector/cmd/collector-selftest/collector-selftest.go index 6a129ae..a603b4a 100644 --- a/collector/cmd/collector-selftest/collector-selftest.go +++ b/collector/cmd/collector-selftest/collector-selftest.go @@ -96,6 +96,7 @@ OPTIONS: logrus.SetOutput(io.MultiWriter(os.Stderr, logFile)) } + //TODO: pass in the collector, use configuration from collector-metrics stCollector, err := collector.CreateSelfTestCollector( collectorLogger, c.String("api-endpoint"), diff --git a/collector/pkg/config/config.go b/collector/pkg/config/config.go index 592f549..5995659 100644 --- a/collector/pkg/config/config.go +++ b/collector/pkg/config/config.go @@ -33,6 +33,11 @@ func (c *configuration) Init() error { c.SetDefault("devices", []string{}) + c.SetDefault("log.level", "INFO") + c.SetDefault("log.file", "") + + c.SetDefault("api.endpoint", "http://localhost:8080") + //c.SetDefault("collect.short.command", "-a -o on -S on") //if you want to load a non-standard location system config file (~/drawbridge.yml), use ReadConfig diff --git a/example.collector.yaml b/example.collector.yaml index fa72814..8cf7abc 100644 --- a/example.collector.yaml +++ b/example.collector.yaml @@ -54,7 +54,12 @@ devices: # - 3ware,4 # - 3ware,5 - +#log: +# file: '' #absolute or relative paths allowed, eg. web.log +# level: INFO +# +#api: +# endpoint: 'http://localhost:8080' ######################################################################################################################## # FEATURES COMING SOON