Warn when Koanf read fails (#47)

Figured out the problem in issue #32, the toml file syntax was invalid (I had `'` instead of `"` at some values), but there was nothing in the logs about it.

Moved the config reading (and watching) into the same function, which logs the error as a warning.

I wanted to try moving the whole `if` into a separate function, but I kept getting errors when I tried to extract the `path` from the `File`, so I have that attempt in a separate branch not in this pull request: 5a84bf8148

Reviewed-on: https://gitea.arsenm.dev/Arsen6331/itd/pulls/47
Co-authored-by: Hunman <sanyi.exe@gmail.com>
Co-committed-by: Hunman <sanyi.exe@gmail.com>
This commit is contained in:
Hunman 2023-01-02 09:05:23 +00:00 committed by Elara Musayelyan
parent 131a16df6f
commit 15b5d2888e

View File

@ -16,6 +16,8 @@ import (
var cfgDir string var cfgDir string
func init() { func init() {
etcPath := "/etc/itd.toml";
// Set up logger // Set up logger
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
@ -51,15 +53,9 @@ func init() {
// Set config defaults // Set config defaults
setCfgDefaults() setCfgDefaults()
// Load config files // Load and watch config files
etcProvider := file.Provider("/etc/itd.toml") loadAndwatchCfgFile(etcPath)
cfgProvider := file.Provider(cfgPath) loadAndwatchCfgFile(cfgPath)
k.Load(etcProvider, toml.Parser())
k.Load(cfgProvider, toml.Parser())
// Watch configs for changes
cfgWatch(etcProvider)
cfgWatch(cfgProvider)
// Load envireonment variables // Load envireonment variables
k.Load(env.Provider("ITD_", "_", func(s string) string { k.Load(env.Provider("ITD_", "_", func(s string) string {
@ -67,14 +63,22 @@ func init() {
}), nil) }), nil)
} }
func cfgWatch(provider *file.File) { func loadAndwatchCfgFile(filename string) {
provider := file.Provider(filename)
if cfgError := k.Load(provider, toml.Parser()); cfgError != nil {
log.Warn().Str("filename", filename).Err(cfgError).Msg("Error while trying to read config file")
}
// Watch for changes and reload when detected // Watch for changes and reload when detected
provider.Watch(func(_ interface{}, err error) { provider.Watch(func(_ interface{}, err error) {
if err != nil { if err != nil {
return return
} }
k.Load(provider, toml.Parser()) if cfgError := k.Load(provider, toml.Parser()); cfgError != nil {
log.Warn().Str("filename", filename).Err(cfgError).Msg("Error while trying to read config file")
}
}) })
} }