fermentord/internal/configuration/config.go

55 lines
887 B
Go
Raw Normal View History

2022-03-11 20:06:33 +00:00
package configuration
import (
"log"
2022-08-02 05:26:41 +00:00
"sync"
2022-03-11 20:06:33 +00:00
"github.com/getsentry/sentry-go"
"github.com/spf13/viper"
)
2022-08-02 05:26:41 +00:00
var (
globalConfig Configuration
globalLock *sync.Mutex
)
2022-03-11 20:06:33 +00:00
2022-08-02 05:26:41 +00:00
func init() {
globalLock = &sync.Mutex{}
}
2022-03-11 20:06:33 +00:00
2022-08-02 05:26:41 +00:00
func Global() (c Configuration) {
globalLock.Lock()
c = globalConfig
globalLock.Unlock()
return
2022-03-11 20:06:33 +00:00
}
2022-08-02 18:59:27 +00:00
func Initialize() {
2022-08-02 05:26:41 +00:00
setDefaults()
2022-03-11 20:06:33 +00:00
viper.AddConfigPath("/etc")
viper.AddConfigPath("/usr/local/etc")
viper.AddConfigPath(".")
viper.SetConfigName("fermentord")
viper.SetConfigType("toml")
2022-08-02 18:59:27 +00:00
}
func LoadConfiguration() Configuration {
globalLock.Lock()
defer globalLock.Unlock()
2022-03-11 20:06:33 +00:00
if err := viper.ReadInConfig(); err != nil {
log.Printf("Error loading configuration: %v", err)
}
2022-03-15 16:20:47 +00:00
config := &Configuration{}
2022-03-11 20:06:33 +00:00
if err := viper.Unmarshal(config); err != nil {
2022-07-25 08:55:25 +00:00
sentry.CaptureException(err)
2022-03-11 20:06:33 +00:00
log.Fatal(err)
}
2022-08-02 05:26:41 +00:00
globalConfig = *config
2022-08-02 18:59:27 +00:00
return globalConfig
2022-03-11 20:06:33 +00:00
}