forked from Elara6331/itd
		
	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:
		
							
								
								
									
										26
									
								
								config.go
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								config.go
									
									
									
									
									
								
							| @@ -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") | ||||||
|  | 		} | ||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user