From dcd76c410952b9e3a70652f84d94f5c7d245fc4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matev=C5=BE=20Jekovec?= Date: Tue, 12 May 2020 08:37:51 +0200 Subject: [PATCH] common/flags: Fix parsing of metrics.labels, if provided in config .yml --- .changelog/2905.bugfix.md | 1 + go/oasis-node/cmd/common/flags/flags.go | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 .changelog/2905.bugfix.md diff --git a/.changelog/2905.bugfix.md b/.changelog/2905.bugfix.md new file mode 100644 index 00000000000..d058b42ef55 --- /dev/null +++ b/.changelog/2905.bugfix.md @@ -0,0 +1 @@ +common/flags: Fix parsing of metrics.labels, if provided in config .yml diff --git a/go/oasis-node/cmd/common/flags/flags.go b/go/oasis-node/cmd/common/flags/flags.go index 1107b26174d..1c630db42d1 100644 --- a/go/oasis-node/cmd/common/flags/flags.go +++ b/go/oasis-node/cmd/common/flags/flags.go @@ -94,15 +94,19 @@ func DryRun() bool { // GetStringMapString is a drop-in replacement for viper.GetStringMapString due to https://github.com/spf13/viper/issues/608. func GetStringMapString(key string) map[string]string { - labels := map[string]string{} - val := viper.GetString(key) - - // viper.GetString() wraps the string inside [] parenthesis, unwrap it. - if len(val) < 2 { + // Use original GetStringMapString, if it works (e.g. for yaml-based configs). + labels := viper.GetStringMapString(key) + if len(labels) != 0 { return labels } - val = val[1 : len(val)-1] + // Otherwise, take string and parse it manually. + val := viper.GetString(key) + // viper.GetString() wraps the string inside [] parenthesis, unwrap it. + if len(val) >= 2 && val[0] == '[' && val[len(val)-1] == ']' { + val = val[1 : len(val)-1] + } + // Assume format key1=value1,key2=value2,... for _, lPair := range strings.Split(val, ",") { kv := strings.Split(lPair, "=") if len(kv) != 2 || kv[0] == "" {