config reporter try 1

This commit is contained in:
konstantinmds 2025-01-20 10:07:28 +01:00
parent c0534ede1b
commit 16dbdc6c4a
3 changed files with 108 additions and 8 deletions

View File

@ -3,6 +3,7 @@ package config
import ( import (
"strings" "strings"
"git.defalsify.org/vise.git/logging"
"git.grassecon.net/grassrootseconomics/visedriver/env" "git.grassecon.net/grassrootseconomics/visedriver/env"
) )
@ -21,7 +22,7 @@ func setLanguage() error {
defaultLanguage = env.GetEnv("DEFAULT_LANGUAGE", defaultLanguage) defaultLanguage = env.GetEnv("DEFAULT_LANGUAGE", defaultLanguage)
languages = strings.Split(env.GetEnv("LANGUAGES", defaultLanguage), ",") languages = strings.Split(env.GetEnv("LANGUAGES", defaultLanguage), ",")
haveDefaultLanguage := false haveDefaultLanguage := false
for i, v := range(languages) { for i, v := range languages {
languages[i] = strings.ReplaceAll(v, " ", "") languages[i] = strings.ReplaceAll(v, " ", "")
if languages[i] == defaultLanguage { if languages[i] == defaultLanguage {
haveDefaultLanguage = true haveDefaultLanguage = true
@ -35,8 +36,6 @@ func setLanguage() error {
return nil return nil
} }
func setConn() error { func setConn() error {
DbConn = env.GetEnv("DB_CONN", "") DbConn = env.GetEnv("DB_CONN", "")
return nil return nil
@ -44,16 +43,25 @@ func setConn() error {
// LoadConfig initializes the configuration values after environment variables are loaded. // LoadConfig initializes the configuration values after environment variables are loaded.
func LoadConfig() error { func LoadConfig() error {
err := setConn() if err := setLanguage(); err != nil {
if err != nil {
return err return err
} }
err = setLanguage() if err := setConn(); err != nil {
if err != nil {
return err return err
} }
DefaultLanguage = defaultLanguage DefaultLanguage = defaultLanguage
Languages = languages 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 return nil
} }

75
config/reporter.go Normal file
View File

@ -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)
}
}
}

17
config/reporter_noop.go Normal file
View File

@ -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) {}