diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/root.go | 46 | ||||
-rw-r--r-- | cmd/start.go | 37 |
2 files changed, 83 insertions, 0 deletions
diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..9e87b5b --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,46 @@ +package cmd + +import ( + "log" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +// LogLevel Flag +var LogLevel = "info" +var LogFormat = "json" +var cfgFile string +var rootCmd = &cobra.Command{ + Use: "apjournal", + Short: "apjournal", +} + +func init() { + cobra.OnInitialize(initConfig) + rootCmd.PersistentFlags().StringVar(&cfgFile, + "config", "", "config file (default is ./config.yml)") + viper.SetConfigName("config") + viper.AddConfigPath(".") // First try to load the config from the current directory + viper.AddConfigPath("$HOME") // Then try to load it from the HOME directory + viper.AddConfigPath("/etc/apjournal/") // As a last resort try to load it from the /etc/ +} + +func initConfig() { + if cfgFile != "" { + // Use config file from the flag. + viper.SetConfigFile(cfgFile) + } + viper.SetEnvPrefix("CFG") + viper.AutomaticEnv() + if err := viper.ReadInConfig(); err != nil { + log.Fatal("Can't read configuration file", "error", err) + } +} + +// Execute the commands +func Execute() { + if err := rootCmd.Execute(); err != nil { + log.Fatal("failed to execute", "error", err) + } +} diff --git a/cmd/start.go b/cmd/start.go new file mode 100644 index 0000000..00872aa --- /dev/null +++ b/cmd/start.go @@ -0,0 +1,37 @@ +package cmd + +import ( + "os" + "apjournal/config" + "apjournal/internal/server" + + "log/slog" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func init() { + rootCmd.AddCommand(startCmd) +} + +var startCmd = &cobra.Command{ + Use: "start", + Short: "Start data server", + Long: `Start data server`, + Run: func(cmd *cobra.Command, args []string) { + log := slog.New(slog.NewJSONHandler(os.Stdout, nil)) + // load server configuration from server + log.Debug("Loading server configuration") + if viper.ConfigFileUsed() != "" { + log.Debug("Configuration file loaded", "section", "init", + "path", viper.ConfigFileUsed()) + } + cfg := config.LoadConfig(viper.GetViper()) + + srv := server.NewServer(cfg, log) + // listen for new messages + log.Info("Listening for incoming events") + srv.Listen() + }, +} |