diff options
Diffstat (limited to 'svc/conf.go')
-rw-r--r-- | svc/conf.go | 111 |
1 files changed, 42 insertions, 69 deletions
diff --git a/svc/conf.go b/svc/conf.go index f4d6518..0d9e739 100644 --- a/svc/conf.go +++ b/svc/conf.go @@ -21,7 +21,6 @@ type Configuration struct { DBPath string `yaml:"DatabasePath"` AssetsDir string `yaml:"-"` StdoutLogging bool `yaml:"StdoutLogging"` - Version string `yaml:"-"` CacheInterval time.Duration `yaml:"StatusFetchInterval"` DBInterval time.Duration `yaml:"DatabasePushInterval"` LastCache time.Time `yaml:"-"` @@ -39,6 +38,29 @@ type Instance struct { Desc string `yaml:"Instance.Description"` } +func initConfig() { + + parseConfigFlag() + + setConfigDefaults() + + log.Printf("Loading configuration ...\n") + if err := viper.ReadInConfig(); err != nil { + log.Printf("%v\n", err.Error()) + log.Printf("Using defaults ...\n") + bindConfig() + return + } + + viper.WatchConfig() + viper.OnConfigChange(func(e fsnotify.Event) { + log.Printf("Config file change detected. Reloading...\n") + bindConfig() + initLogging() + }) + bindConfig() +} + func initLogging() { confObj.Mu.RLock() @@ -70,8 +92,24 @@ func initLogging() { confObj.Mu.RUnlock() } -func initConfig() { +func setConfigDefaults() { + viper.SetDefault("ListenPort", 9001) + viper.SetDefault("LogFile", "getwtxt.log") + viper.SetDefault("DatabasePath", "getwtxt.db") + viper.SetDefault("AssetsDirectory", "assets") + viper.SetDefault("DatabaseType", "leveldb") + viper.SetDefault("StdoutLogging", false) + viper.SetDefault("ReCacheInterval", "1h") + viper.SetDefault("DatabasePushInterval", "5m") + viper.SetDefault("Instance.SiteName", "getwtxt") + viper.SetDefault("Instance.OwnerName", "Anonymous Microblogger") + viper.SetDefault("Instance.Email", "nobody@knows") + viper.SetDefault("Instance.URL", "https://twtxt.example.com") + viper.SetDefault("Instance.Description", "A fast, resilient twtxt registry server written in Go!") +} + +func parseConfigFlag() { if *flagConfFile == "" { viper.SetConfigName("getwtxt") viper.SetConfigType("yml") @@ -85,42 +123,14 @@ func initConfig() { if path == "" { path = "." } - if file == "" { - file = *flagConfFile - } filename := strings.Split(file, ".") viper.SetConfigName(filename[0]) viper.SetConfigType(filename[1]) viper.AddConfigPath(path) } +} - log.Printf("Loading configuration ...\n") - if err := viper.ReadInConfig(); err != nil { - log.Printf("%v\n", err.Error()) - log.Printf("Using defaults ...\n") - } else { - viper.WatchConfig() - viper.OnConfigChange(func(e fsnotify.Event) { - log.Printf("Config file change detected. Reloading...\n") - rebindConfig() - }) - } - - viper.SetDefault("ListenPort", 9001) - viper.SetDefault("LogFile", "getwtxt.log") - viper.SetDefault("DatabasePath", "getwtxt.db") - viper.SetDefault("AssetsDirectory", "assets") - viper.SetDefault("DatabaseType", "leveldb") - viper.SetDefault("StdoutLogging", false) - viper.SetDefault("ReCacheInterval", "1h") - viper.SetDefault("DatabasePushInterval", "5m") - - viper.SetDefault("Instance.SiteName", "getwtxt") - viper.SetDefault("Instance.OwnerName", "Anonymous Microblogger") - viper.SetDefault("Instance.Email", "nobody@knows") - viper.SetDefault("Instance.URL", "https://twtxt.example.com") - viper.SetDefault("Instance.Description", "A fast, resilient twtxt registry server written in Go!") - +func bindConfig() { confObj.Mu.Lock() confObj.Port = viper.GetInt("ListenPort") @@ -157,7 +167,6 @@ func initConfig() { confObj.LastCache = time.Now() confObj.LastPush = time.Now() - confObj.Version = Vers confObj.Instance.Vers = Vers confObj.Instance.Name = viper.GetString("Instance.SiteName") @@ -167,40 +176,4 @@ func initConfig() { confObj.Instance.Desc = viper.GetString("Instance.Description") confObj.Mu.Unlock() - -} - -func rebindConfig() { - - confObj.Mu.RLock() - if !confObj.StdoutLogging { - closeLog <- true - } - confObj.Mu.RUnlock() - - confObj.Mu.Lock() - - confObj.DBType = strings.ToLower(viper.GetString("DatabaseType")) - if *flagDBType != "" { - confObj.DBType = *flagDBType - } - - confObj.LogFile = viper.GetString("LogFile") - confObj.DBPath = viper.GetString("DatabasePath") - if *flagDBPath != "" { - confObj.DBPath = *flagDBPath - } - confObj.StdoutLogging = viper.GetBool("StdoutLogging") - confObj.CacheInterval = viper.GetDuration("StatusFetchInterval") - confObj.DBInterval = viper.GetDuration("DatabasePushInterval") - - confObj.Instance.Name = viper.GetString("Instance.SiteName") - confObj.Instance.URL = viper.GetString("Instance.URL") - confObj.Instance.Owner = viper.GetString("Instance.OwnerName") - confObj.Instance.Mail = viper.GetString("Instance.Email") - confObj.Instance.Desc = viper.GetString("Instance.Description") - - confObj.Mu.Unlock() - - initLogging() } |