1package cmd 2 3import ( 4 "github.com/inconshreveable/log15" 5 "github.com/knqyf263/gost/db" 6 "github.com/knqyf263/gost/server" 7 "github.com/spf13/cobra" 8 "github.com/spf13/viper" 9) 10 11// serverCmd represents the server command 12var serverCmd = &cobra.Command{ 13 Use: "server", 14 Short: "Start security tracker HTTP server", 15 Long: `Start security tracker HTTP server`, 16 RunE: executeServer, 17} 18 19func init() { 20 RootCmd.AddCommand(serverCmd) 21 22 serverCmd.PersistentFlags().String("bind", "", "HTTP server bind to IP address (default: loop back interface") 23 viper.BindPFlag("bind", serverCmd.PersistentFlags().Lookup("bind")) 24 viper.SetDefault("bind", "127.0.0.1") 25 26 serverCmd.PersistentFlags().String("port", "", "HTTP server port number (default: 1325") 27 viper.BindPFlag("port", serverCmd.PersistentFlags().Lookup("port")) 28 viper.SetDefault("port", "1325") 29} 30 31func executeServer(cmd *cobra.Command, args []string) (err error) { 32 logDir := viper.GetString("log-dir") 33 driver, locked, err := db.NewDB(viper.GetString("dbtype"), viper.GetString("dbpath"), viper.GetBool("debug-sql")) 34 if err != nil { 35 if locked { 36 log15.Error("Failed to initialize DB. Close DB connection before fetching", "err", err) 37 } 38 return err 39 } 40 41 log15.Info("Starting HTTP Server...") 42 if err = server.Start(logDir, driver); err != nil { 43 log15.Error("Failed to start server.", "err", err) 44 return err 45 } 46 47 return nil 48} 49