summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/root.go46
-rw-r--r--cmd/start.go37
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()
+ },
+}