diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 12:36:04 +0000 |
commit | b09c6d56832eb1718c07d74abf3bc6ae3fe4e030 (patch) | |
tree | d2caec2610d4ea887803ec9e9c3cd77136c448ba /internal/command/command.go | |
parent | Initial commit. (diff) | |
download | icingadb-b09c6d56832eb1718c07d74abf3bc6ae3fe4e030.tar.xz icingadb-b09c6d56832eb1718c07d74abf3bc6ae3fe4e030.zip |
Adding upstream version 1.1.0.upstream/1.1.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'internal/command/command.go')
-rw-r--r-- | internal/command/command.go | 58 |
1 files changed, 58 insertions, 0 deletions
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) +} |