fermentord/internal/configuration/config.go
Søren Rasmussen 78d6841bd1
All checks were successful
continuous-integration/drone/push Build is passing
Refactor configuration reload
2022-08-02 20:59:27 +02:00

54 lines
887 B
Go

package configuration
import (
"log"
"sync"
"github.com/getsentry/sentry-go"
"github.com/spf13/viper"
)
var (
globalConfig Configuration
globalLock *sync.Mutex
)
func init() {
globalLock = &sync.Mutex{}
}
func Global() (c Configuration) {
globalLock.Lock()
c = globalConfig
globalLock.Unlock()
return
}
func Initialize() {
setDefaults()
viper.AddConfigPath("/etc")
viper.AddConfigPath("/usr/local/etc")
viper.AddConfigPath(".")
viper.SetConfigName("fermentord")
viper.SetConfigType("toml")
}
func LoadConfiguration() Configuration {
globalLock.Lock()
defer globalLock.Unlock()
if err := viper.ReadInConfig(); err != nil {
log.Printf("Error loading configuration: %v", err)
}
config := &Configuration{}
if err := viper.Unmarshal(config); err != nil {
sentry.CaptureException(err)
log.Fatal(err)
}
globalConfig = *config
return globalConfig
}