icingadb/internal/command/command.go
2021-05-31 16:53:57 +02:00

58 lines
1.1 KiB
Go

package command
import (
"github.com/icinga/icingadb/pkg/config"
"github.com/icinga/icingadb/pkg/icingadb"
"github.com/icinga/icingadb/pkg/icingaredis"
"github.com/icinga/icingadb/pkg/utils"
"github.com/pkg/errors"
"go.uber.org/zap"
)
type Command struct {
Flags *config.Flags
Config *config.Config
Logger *zap.SugaredLogger
}
func New() *Command {
flags, err := config.ParseFlags()
if err != nil {
utils.Fatal(err)
}
cfg, err := config.FromYAMLFile(flags.Config)
if err != nil {
utils.Fatal(err)
}
logger, err := zap.NewDevelopment()
if err != nil {
utils.Fatal(errors.Wrap(err, "can't create logger"))
}
sugar := logger.Sugar()
return &Command{
Flags: flags,
Config: cfg,
Logger: sugar,
}
}
func (c Command) Database() *icingadb.DB {
db, err := c.Config.Database.Open(c.Logger)
if err != nil {
c.Logger.Fatalw("can't create database connection pool from config", zap.Error(err))
}
return db
}
func (c Command) Redis() *icingaredis.Client {
rc, err := c.Config.Redis.NewClient(c.Logger)
if err != nil {
c.Logger.Fatalw("can't create Redis client from config", zap.Error(err))
}
return rc
}