From 16dbdc6c4aedc3a4a231fb55818790ab5084449f Mon Sep 17 00:00:00 2001 From: konstantinmds Date: Mon, 20 Jan 2025 10:07:28 +0100 Subject: [PATCH] config reporter try 1 --- config/config.go | 24 ++++++++----- config/reporter.go | 75 +++++++++++++++++++++++++++++++++++++++++ config/reporter_noop.go | 17 ++++++++++ 3 files changed, 108 insertions(+), 8 deletions(-) create mode 100644 config/reporter.go create mode 100644 config/reporter_noop.go diff --git a/config/config.go b/config/config.go index bd7d045..9760bab 100644 --- a/config/config.go +++ b/config/config.go @@ -3,11 +3,12 @@ package config import ( "strings" + "git.defalsify.org/vise.git/logging" "git.grassecon.net/grassrootseconomics/visedriver/env" ) var ( - defaultLanguage = "eng" + defaultLanguage = "eng" languages []string ) @@ -21,7 +22,7 @@ func setLanguage() error { defaultLanguage = env.GetEnv("DEFAULT_LANGUAGE", defaultLanguage) languages = strings.Split(env.GetEnv("LANGUAGES", defaultLanguage), ",") haveDefaultLanguage := false - for i, v := range(languages) { + for i, v := range languages { languages[i] = strings.ReplaceAll(v, " ", "") if languages[i] == defaultLanguage { haveDefaultLanguage = true @@ -35,8 +36,6 @@ func setLanguage() error { return nil } - - func setConn() error { DbConn = env.GetEnv("DB_CONN", "") return nil @@ -44,16 +43,25 @@ func setConn() error { // LoadConfig initializes the configuration values after environment variables are loaded. func LoadConfig() error { - err := setConn() - if err != nil { + if err := setLanguage(); err != nil { return err } - err = setLanguage() - if err != nil { + if err := setConn(); err != nil { return err } DefaultLanguage = defaultLanguage Languages = languages + + // Create and use reporter + logger := logging.NewVanilla().WithDomain("config") + reporter := NewReporter(logger) + + reporter.AddValue("CUSTOM_SETTING", func() string { + return env.GetEnv("CUSTOM_SETTING", "default") + }, false) + + reporter.Report("INFO") + return nil } diff --git a/config/reporter.go b/config/reporter.go new file mode 100644 index 0000000..0f57226 --- /dev/null +++ b/config/reporter.go @@ -0,0 +1,75 @@ +//go:build configreport + +package config + +import ( + "git.defalsify.org/vise.git/logging" + "git.grassecon.net/grassrootseconomics/visedriver/env" +) + +// ConfigValue represents a configuration key-value pair +type ConfigValue struct { + Key string + ValueFunc func() string + Sensitive bool +} + +// Reporter handles configuration reporting +type Reporter struct { + values []ConfigValue + logger logging.Vanilla +} + +func NewReporter(logger logging.Vanilla) *Reporter { + return &Reporter{ + values: defaultConfigValues(), + logger: logger, + } +} + +func defaultConfigValues() []ConfigValue { + return []ConfigValue{ + {"HOST", func() string { return env.GetEnv("HOST", "127.0.0.1") }, false}, + {"PORT", func() string { return env.GetEnv("PORT", "7123") }, false}, + {"AT_ENDPOINT", func() string { return env.GetEnv("AT_ENDPOINT", "/ussd/africastalking") }, false}, + {"DB_CONN", func() string { return env.GetEnv("DB_CONN", "") }, true}, + {"DB_TIMEZONE", func() string { return env.GetEnv("DB_TIMEZONE", "") }, false}, + {"DB_SCHEMA", func() string { return env.GetEnv("DB_SCHEMA", "") }, false}, + {"CUSTODIAL_URL_BASE", func() string { return env.GetEnv("CUSTODIAL_URL_BASE", "") }, false}, + {"BEARER_TOKEN", func() string { return env.GetEnv("BEARER_TOKEN", "") }, true}, + {"DATA_URL_BASE", func() string { return env.GetEnv("DATA_URL_BASE", "") }, false}, + {"DEFAULT_LANGUAGE", func() string { return env.GetEnv("DEFAULT_LANGUAGE", "eng") }, false}, + {"LANGUAGES", func() string { return env.GetEnv("LANGUAGES", "eng") }, false}, + } +} + +func (r *Reporter) AddValue(key string, valueFn func() string, sensitive bool) { + r.values = append(r.values, ConfigValue{ + Key: key, + ValueFunc: valueFn, + Sensitive: sensitive, + }) +} + +// Report outputs all configuration values at the specified log level +func (r *Reporter) Report(level string) { + r.logger.Debugf("Configuration Report:") + for _, cv := range r.values { + value := cv.ValueFunc() + if cv.Sensitive { + value = "****" + } + switch level { + case "DEBUG": + r.logger.Debugf("%s: %s", cv.Key, value) + case "INFO": + r.logger.Infof("%s: %s", cv.Key, value) + case "WARN": + r.logger.Warnf("%s: %s", cv.Key, value) + case "ERROR": + r.logger.Errorf("%s: %s", cv.Key, value) + default: + r.logger.Infof("%s: %s", cv.Key, value) + } + } +} \ No newline at end of file diff --git a/config/reporter_noop.go b/config/reporter_noop.go new file mode 100644 index 0000000..807e1de --- /dev/null +++ b/config/reporter_noop.go @@ -0,0 +1,17 @@ +//go:build !configreport + +package config + +import ( + "git.defalsify.org/vise.git/logging" +) + +type Reporter struct{} + +func NewReporter(logger logging.Vanilla) *Reporter { + return &Reporter{} +} + +func (r *Reporter) AddValue(key string, valueFn func() string, sensitive bool) {} + +func (r *Reporter) Report(level string) {} \ No newline at end of file