-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
98 lines (82 loc) · 2.66 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package main
import (
"context"
"log"
"os"
"github.com/namsral/flag"
"go.uber.org/zap"
"github.com/shlin168/go-nvd/db"
"github.com/shlin168/go-nvd/server"
"github.com/shlin168/go-nvd/utils"
)
func main() {
fset := flag.NewFlagSetWithEnvPrefix(os.Args[0], "NVD", flag.ExitOnError)
// service
lisAddr := fset.String("listen", ":8080", "server listen on # port")
metricsAddr := fset.String("metric", ":6060", "server metrics listen on # port")
// db
dbType := fset.String("db-type", db.MongoDBID, "which db to dump data, only support mongo so far")
dbUser := fset.String("db-user", "admin", "user name to connect db")
dbPwd := fset.String("db-pwd", "admin", "user password to connect db")
dbEndpoint := fset.String("db-endpoint", "localhost:27017", "endpoint of db")
dbTimeout := fset.Duration("db-timeout", db.DefaultTimeout, "timeout of operation to db")
// logging
errloglvl := fset.String("err-loglvl", zap.InfoLevel.String(), "log level for error logger")
acsloglvl := fset.String("acs-loglvl", zap.InfoLevel.String(), "log level for access logger")
fset.Parse(os.Args[1:])
errLogger, err := utils.GetLoggerFromLvlString(*errloglvl)
if err != nil {
log.Fatalf("Get logger failed: %v", err)
}
defer errLogger.Sync() // flushes buffer, if any
errLogger.Info("Flags - Server",
zap.String("listen", *lisAddr),
zap.String("metrics", *metricsAddr),
zap.String("err-loglvl", *errloglvl),
zap.String("acs-loglvl", *acsloglvl),
)
errLogger.Info("Flags - DB",
zap.String("type", *dbType),
zap.String("endpoint", *dbEndpoint),
zap.Duration("timeout", *dbTimeout),
)
acsLogger, err := utils.GetLoggerFromLvlString(*acsloglvl)
if err != nil {
log.Fatalf("Get access logger failed: %v", err)
}
// Init DB client
dbCfg := db.Config{
Timeout: *dbTimeout,
Batch: 1,
Logger: errLogger,
}
if err := dbCfg.Validate(); err != nil {
log.Fatalf("validate db config err: %v", err)
}
var dbCli server.NvdDB
switch *dbType {
case db.MongoDBID:
dbOps := []db.MongoOptions{db.MongoConfig(dbCfg)}
dbCli, err = db.NewMongo(*dbUser, *dbPwd, *dbEndpoint, dbOps...)
if err != nil {
log.Fatalf("Init mongo db client err: %v", err)
}
defer dbCli.Disconnect(context.Background())
default:
log.Fatalf("unsupported db type: %s", *dbType)
}
nvdCtrl, err := server.NewNvdController("v1", dbCli)
if err != nil {
log.Fatalf("Init nvd controller err: %v", err)
}
// Init server and start
srv, err := server.New(*lisAddr, *metricsAddr,
server.Controllers([]server.Controller{nvdCtrl}...),
server.ErrorLogger(errLogger),
server.AccessLogger(acsLogger),
)
if err != nil {
log.Fatalf("Init server err: %v", err)
}
srv.Start(context.Background())
}