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