Peter Kurfer
4c2aa968d2
- support config file - support reading checks, server definition and endpoint definitions from env
66 lines
1.3 KiB
Go
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)
|
|
}
|