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 }