fix: proper error when parsing telemetry configuration (#12981)
When parsing `telemetry.global-labels` config the code assumes that the type will be an array. I saw an issue where someone edited the configuration in the wrong way and got the following error:  Instead, I suggest here to print a proper error log to indicate what the issue is.
This commit is contained in:
parent
695d7f5b8c
commit
c24c439728
|
@ -287,11 +287,18 @@ func DefaultConfig() *Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetConfig returns a fully parsed Config object.
|
// GetConfig returns a fully parsed Config object.
|
||||||
func GetConfig(v *viper.Viper) Config {
|
func GetConfig(v *viper.Viper) (Config, error) {
|
||||||
globalLabelsRaw := v.Get("telemetry.global-labels").([]interface{})
|
globalLabelsRaw, ok := v.Get("telemetry.global-labels").([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return Config{}, fmt.Errorf("failed to parse global-labels config")
|
||||||
|
}
|
||||||
|
|
||||||
globalLabels := make([][]string, 0, len(globalLabelsRaw))
|
globalLabels := make([][]string, 0, len(globalLabelsRaw))
|
||||||
for _, glr := range globalLabelsRaw {
|
for idx, glr := range globalLabelsRaw {
|
||||||
labelsRaw := glr.([]interface{})
|
labelsRaw, ok := glr.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return Config{}, fmt.Errorf("failed to parse global label number %d from config", idx)
|
||||||
|
}
|
||||||
if len(labelsRaw) == 2 {
|
if len(labelsRaw) == 2 {
|
||||||
globalLabels = append(globalLabels, []string{labelsRaw[0].(string), labelsRaw[1].(string)})
|
globalLabels = append(globalLabels, []string{labelsRaw[0].(string), labelsRaw[1].(string)})
|
||||||
}
|
}
|
||||||
|
@ -356,7 +363,7 @@ func GetConfig(v *viper.Viper) Config {
|
||||||
SnapshotInterval: v.GetUint64("state-sync.snapshot-interval"),
|
SnapshotInterval: v.GetUint64("state-sync.snapshot-interval"),
|
||||||
SnapshotKeepRecent: v.GetUint32("state-sync.snapshot-keep-recent"),
|
SnapshotKeepRecent: v.GetUint32("state-sync.snapshot-keep-recent"),
|
||||||
},
|
},
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateBasic returns an error if min-gas-prices field is empty in BaseConfig. Otherwise, it returns nil.
|
// ValidateBasic returns an error if min-gas-prices field is empty in BaseConfig. Otherwise, it returns nil.
|
||||||
|
|
|
@ -208,7 +208,13 @@ func startStandAlone(ctx *Context, appCreator types.AppCreator) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper)
|
app := appCreator(ctx.Logger, db, traceWriter, ctx.Viper)
|
||||||
_, err = startTelemetry(serverconfig.GetConfig(ctx.Viper))
|
|
||||||
|
config, err := serverconfig.GetConfig(ctx.Viper)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = startTelemetry(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -271,7 +277,11 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
config := serverconfig.GetConfig(ctx.Viper)
|
config, err := serverconfig.GetConfig(ctx.Viper)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if err := config.ValidateBasic(); err != nil {
|
if err := config.ValidateBasic(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue