ctop/config/main.go

64 lines
1.1 KiB
Go

package config
import (
"os"
"github.com/bcicen/ctop/logging"
)
var (
Global = NewDefaultConfig()
log = logging.Init()
)
type Config struct {
params map[string]*Param
switches map[string]*Switch
updates chan ConfigMsg
}
type ConfigMsg struct {
key string
val string
}
func Update(k, v string) {
Global.updates <- ConfigMsg{k, v}
}
func NewDefaultConfig() Config {
config := Config{
params: make(map[string]*Param),
switches: make(map[string]*Switch),
updates: make(chan ConfigMsg),
}
for _, p := range params {
config.params[p.key] = p
log.Debugf("loaded config param: \"%s\": \"%s\"", p.key, p.val)
}
for _, t := range switches {
config.switches[t.key] = t
log.Debugf("loaded config switch: \"%s\": %t", t.key, t.val)
}
go func() {
for m := range config.updates {
config.params[m.key].val = m.val
log.Noticef("config change: %s: %s", m.key, m.val)
}
}()
return config
}
// Return env var value if set, else return defaultVal
func getEnv(key, defaultVal string) string {
val := os.Getenv(key)
if val != "" {
return val
}
return defaultVal
}