nurse/main.go
Peter Kurfer 4c2aa968d2
Implement config reading
- support config file
- support reading checks, server definition and endpoint definitions from env
2022-05-08 11:00:22 +02:00

66 lines
1.3 KiB
Go

package main
import (
"log"
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"github.com/baez90/nurse/config"
)
var (
logLevel = zapcore.InfoLevel
cfgFile string
cfg config.Nurse
)
func main() {
if err := prepareFlags(); err != nil {
log.Fatalf("Failed to parse flags: %v", err)
}
setupLogging()
logger := zap.L()
envCfg, err := config.New(
config.WithValuesFrom(cfg),
config.WithConfigFile(cfgFile),
config.WithServersFromEnv(),
config.WithEndpointsFromEnv(),
)
if err != nil {
logger.Error("Failed to load config from environment", zap.Error(err))
os.Exit(1)
}
logger.Debug("Loaded config", zap.Any("config", envCfg))
}
func setupLogging() {
cfg := zap.NewProductionConfig()
cfg.Level = zap.NewAtomicLevelAt(logLevel)
logger, err := cfg.Build()
if err != nil {
log.Fatalf("Failed to setup logging: %v", err)
}
zap.ReplaceGlobals(logger)
}
func prepareFlags() error {
set := config.ConfigureFlags(&cfg)
set.Var(&logLevel, "log-level", "Log level to use")
set.StringVar(
&cfgFile,
"config",
config.LookupEnvOr[string]("NURSE_CONFIG", "", config.Identity[string]),
"Config file to load, if not set $HOME/.nurse.yaml, /etc/nurse/config.yaml and ./nurse.yaml are tried - optional",
)
return set.Parse(os.Args)
}