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