Skip to content

Commit

Permalink
Add command line argument for exact config parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
mchrome committed Feb 1, 2024
1 parent 6928eff commit 0cc1d52
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
20 changes: 13 additions & 7 deletions cmd/carbonapi/config/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ func createCache(logger *zap.Logger, cacheName string, cacheConfig *CacheConfig)
}
}

func SetUpViper(logger *zap.Logger, configPath *string, viperPrefix string) {
func SetUpViper(logger *zap.Logger, configPath *string, exactConfig bool, viperPrefix string) {
if *configPath != "" {
b, err := os.ReadFile(*configPath)
if err != nil {
Expand Down Expand Up @@ -386,13 +386,13 @@ func SetUpViper(logger *zap.Logger, configPath *string, viperPrefix string) {
viper.SetDefault("upstreams.internalRoutingCache", "600s")
viper.SetDefault("upstreams.buckets", 10)
viper.SetDefault("upstreams.sumBuckets", false)
viper.SetDefault("upstreams.bucketsWeight", []int64{})
viper.SetDefault("upstreams.bucketsNames", []string{})
viper.SetDefault("upstreams.bucketsWidth", []int64{})
viper.SetDefault("upstreams.bucketsLabels", []string{})
viper.SetDefault("upstreams.slowLogThreshold", "1s")
viper.SetDefault("upstreams.timeouts.global", "10s")
viper.SetDefault("upstreams.timeouts.afterStarted", "2s")
viper.SetDefault("upstreams.timeouts.find", "2s")
viper.SetDefault("upstreams.timeouts.render", "10s")
viper.SetDefault("upstreams.timeouts.connect", "200ms")
viper.SetDefault("upstreams.concurrencyLimit", 0)
viper.SetDefault("upstreams.concurrencyLimitPerServer", 0)
viper.SetDefault("upstreams.keepAliveInterval", "30s")
viper.SetDefault("upstreams.maxIdleConnsPerHost", 100)
viper.SetDefault("upstreams.scaleToCommonStep", true)
Expand All @@ -403,7 +403,13 @@ func SetUpViper(logger *zap.Logger, configPath *string, viperPrefix string) {
viper.SetDefault("combineMultipleTargetsInOne", false)
viper.AutomaticEnv()

err := viper.Unmarshal(&Config)
var err error
if exactConfig {
err = viper.UnmarshalExact(&Config)
} else {
err = viper.Unmarshal(&Config)
}

if err != nil {
logger.Fatal("failed to parse config",
zap.Error(err),
Expand Down
2 changes: 1 addition & 1 deletion cmd/carbonapi/http/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func init() {
logger := zapwriter.Logger("main")

cfgFile := ""
config.SetUpViper(logger, &cfgFile, "CARBONAPI_")
config.SetUpViper(logger, &cfgFile, false, "CARBONAPI_")
config.Config.Upstreams.Backends = []string{"dummy"}
config.SetUpConfigUpstreams(logger)
config.SetUpConfig(logger, "(test)")
Expand Down
3 changes: 2 additions & 1 deletion cmd/carbonapi/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ func main() {

configPath := flag.String("config", "", "Path to the `config file`.")
checkConfig := flag.Bool("check-config", false, "Check config file and exit.")
exactConfig := flag.Bool("exact-config", false, "Ensure that all config params are contained in the target struct.")
envPrefix := flag.String("envprefix", "CARBONAPI", "Prefix for environment variables override")
if *envPrefix == "(empty)" {
*envPrefix = ""
Expand All @@ -43,7 +44,7 @@ func main() {
logger.Warn("empty prefix is not recommended due to possible collisions with OS environment variables")
}
flag.Parse()
config.SetUpViper(logger, configPath, *envPrefix)
config.SetUpViper(logger, configPath, *exactConfig, *envPrefix)
if *checkConfig {
os.Exit(0)
}
Expand Down

0 comments on commit 0cc1d52

Please sign in to comment.