From b09c6d56832eb1718c07d74abf3bc6ae3fe4e030 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 14:36:04 +0200 Subject: Adding upstream version 1.1.0. Signed-off-by: Daniel Baumann --- internal/command/command.go | 58 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 internal/command/command.go (limited to 'internal/command') diff --git a/internal/command/command.go b/internal/command/command.go new file mode 100644 index 0000000..a4c76ab --- /dev/null +++ b/internal/command/command.go @@ -0,0 +1,58 @@ +package command + +import ( + "fmt" + "github.com/icinga/icingadb/internal" + "github.com/icinga/icingadb/pkg/config" + "github.com/icinga/icingadb/pkg/icingadb" + "github.com/icinga/icingadb/pkg/icingaredis" + "github.com/icinga/icingadb/pkg/logging" + goflags "github.com/jessevdk/go-flags" + "github.com/pkg/errors" + "os" +) + +// Command provides factories for creating Redis and Database connections from Config. +type Command struct { + Flags *config.Flags + Config *config.Config +} + +// New creates and returns a new Command, parses CLI flags and YAML the config, and initializes the logger. +func New() *Command { + flags, err := config.ParseFlags() + if err != nil { + var cliErr *goflags.Error + if errors.As(err, &cliErr) && cliErr.Type == goflags.ErrHelp { + os.Exit(0) + } + + os.Exit(2) + } + + if flags.Version { + internal.Version.Print() + os.Exit(0) + } + + cfg, err := config.FromYAMLFile(flags.Config) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(2) + } + + return &Command{ + Flags: flags, + Config: cfg, + } +} + +// Database creates and returns a new icingadb.DB connection from config.Config. +func (c Command) Database(l *logging.Logger) (*icingadb.DB, error) { + return c.Config.Database.Open(l) +} + +// Redis creates and returns a new icingaredis.Client connection from config.Config. +func (c Command) Redis(l *logging.Logger) (*icingaredis.Client, error) { + return c.Config.Redis.NewClient(l) +} -- cgit v1.2.3