Add support for reloading all settings automatically after changing config except connection and gateway configuration. Closes #373

This commit is contained in:
Wim 2018-05-01 22:23:37 +02:00
parent b24a47ad7f
commit 96a47a60ad
2 changed files with 48 additions and 0 deletions

View File

@ -2,8 +2,10 @@ package config
import ( import (
"bytes" "bytes"
"github.com/fsnotify/fsnotify"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/spf13/viper" "github.com/spf13/viper"
prefixed "github.com/x-cray/logrus-prefixed-formatter"
"os" "os"
"strings" "strings"
"sync" "sync"
@ -169,9 +171,13 @@ type Config struct {
} }
func NewConfig(cfgfile string) *Config { func NewConfig(cfgfile string) *Config {
log.SetFormatter(&prefixed.TextFormatter{PrefixPadding: 13, DisableColors: true, FullTimestamp: false})
flog := log.WithFields(log.Fields{"prefix": "config"})
var cfg ConfigValues var cfg ConfigValues
viper.SetConfigType("toml") viper.SetConfigType("toml")
viper.SetConfigFile(cfgfile)
viper.SetEnvPrefix("matterbridge") viper.SetEnvPrefix("matterbridge")
viper.AddConfigPath(".")
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
viper.AutomaticEnv() viper.AutomaticEnv()
f, err := os.Open(cfgfile) f, err := os.Open(cfgfile)
@ -191,6 +197,11 @@ func NewConfig(cfgfile string) *Config {
if cfg.General.MediaDownloadSize == 0 { if cfg.General.MediaDownloadSize == 0 {
cfg.General.MediaDownloadSize = 1000000 cfg.General.MediaDownloadSize = 1000000
} }
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
flog.Println("Config file changed:", e.Name)
})
mycfg.ConfigValues = &cfg mycfg.ConfigValues = &cfg
return mycfg return mycfg
} }

View File

@ -64,6 +64,9 @@ NickServPassword="secret"
#OPTIONAL only used for quakenet auth #OPTIONAL only used for quakenet auth
NickServUsername="username" NickServUsername="username"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Flood control #Flood control
#Delay in milliseconds between each message send to the IRC server #Delay in milliseconds between each message send to the IRC server
#OPTIONAL (default 1300) #OPTIONAL (default 1300)
@ -184,6 +187,9 @@ Nick="xmppbot"
#OPTIONAL (default false) #OPTIONAL (default false)
SkipTLSVerify=true SkipTLSVerify=true
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Nicks you want to ignore. #Nicks you want to ignore.
#Messages from those users will not be sent to other bridges. #Messages from those users will not be sent to other bridges.
#OPTIONAL #OPTIONAL
@ -265,6 +271,9 @@ Muc="conf.hipchat.com"
#REQUIRED #REQUIRED
Nick="yourlogin" Nick="yourlogin"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Nicks you want to ignore. #Nicks you want to ignore.
#Messages from those users will not be sent to other bridges. #Messages from those users will not be sent to other bridges.
#OPTIONAL #OPTIONAL
@ -382,6 +391,9 @@ IconURL="http://youricon.png"
#OPTIONAL (default false) #OPTIONAL (default false)
SkipTLSVerify=true SkipTLSVerify=true
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#how to format the list of IRC nicks when displayed in mattermost. #how to format the list of IRC nicks when displayed in mattermost.
#Possible options are "table" and "plain" #Possible options are "table" and "plain"
#OPTIONAL (default plain) #OPTIONAL (default plain)
@ -482,6 +494,9 @@ ShowTopicChange=false
#REQUIRED #REQUIRED
Token="Yourtokenhere" Token="Yourtokenhere"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Nicks you want to ignore. #Nicks you want to ignore.
#Messages from those users will not be sent to other bridges. #Messages from those users will not be sent to other bridges.
#OPTIONAL #OPTIONAL
@ -577,6 +592,9 @@ WebhookBindAddress="0.0.0.0:9999"
#OPTIONAL #OPTIONAL
IconURL="https://robohash.org/{NICK}.png?size=48x48" IconURL="https://robohash.org/{NICK}.png?size=48x48"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#how to format the list of IRC nicks when displayed in slack #how to format the list of IRC nicks when displayed in slack
#Possible options are "table" and "plain" #Possible options are "table" and "plain"
#OPTIONAL (default plain) #OPTIONAL (default plain)
@ -680,6 +698,9 @@ Token="Yourtokenhere"
#REQUIRED #REQUIRED
Server="yourservername" Server="yourservername"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Shows title, description and URL of embedded messages (sent by other bots) #Shows title, description and URL of embedded messages (sent by other bots)
#OPTIONAL (default false) #OPTIONAL (default false)
ShowEmbeds=false ShowEmbeds=false
@ -770,6 +791,9 @@ ShowTopicChange=false
#REQUIRED #REQUIRED
Token="Yourtokenhere" Token="Yourtokenhere"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#OPTIONAL (default empty) #OPTIONAL (default empty)
#Only supported format is "HTML", messages will be sent in html parsemode. #Only supported format is "HTML", messages will be sent in html parsemode.
#See https://core.telegram.org/bots/api#html-style #See https://core.telegram.org/bots/api#html-style
@ -892,6 +916,9 @@ NoTLS=false
#OPTIONAL (default false) #OPTIONAL (default false)
SkipTLSVerify=true SkipTLSVerify=true
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Whether to prefix messages from other bridges to rocketchat with the sender's nick. #Whether to prefix messages from other bridges to rocketchat with the sender's nick.
#Useful if username overrides for incoming webhooks isn't enabled on the #Useful if username overrides for incoming webhooks isn't enabled on the
#rocketchat server. If you set PrefixMessagesWithNick to true, each message #rocketchat server. If you set PrefixMessagesWithNick to true, each message
@ -979,6 +1006,9 @@ Password="yourpass"
#OPTIONAL (default false) #OPTIONAL (default false)
NoHomeServerSuffix=false NoHomeServerSuffix=false
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Whether to prefix messages from other bridges to matrix with the sender's nick. #Whether to prefix messages from other bridges to matrix with the sender's nick.
#Useful if username overrides for incoming webhooks isn't enabled on the #Useful if username overrides for incoming webhooks isn't enabled on the
#matrix server. If you set PrefixMessagesWithNick to true, each message #matrix server. If you set PrefixMessagesWithNick to true, each message
@ -1060,6 +1090,9 @@ Password="yourpass"
#OPTIONAL #OPTIONAL
Authcode="ABCE12" Authcode="ABCE12"
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#Whether to prefix messages from other bridges to matrix with the sender's nick. #Whether to prefix messages from other bridges to matrix with the sender's nick.
#Useful if username overrides for incoming webhooks isn't enabled on the #Useful if username overrides for incoming webhooks isn't enabled on the
#matrix server. If you set PrefixMessagesWithNick to true, each message #matrix server. If you set PrefixMessagesWithNick to true, each message
@ -1162,6 +1195,10 @@ RemoteNickFormat="{NICK}"
################################################################### ###################################################################
# Settings here are defaults that each protocol can override # Settings here are defaults that each protocol can override
[general] [general]
## RELOADABLE SETTINGS
## Settings below can be reloaded by editing the file
#RemoteNickFormat defines how remote users appear on this bridge #RemoteNickFormat defines how remote users appear on this bridge
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge