-
-
Notifications
You must be signed in to change notification settings - Fork 171
/
cmd.go
119 lines (98 loc) · 2.37 KB
/
cmd.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package main
import (
"database/sql"
"os"
"path"
"path/filepath"
"github.com/dosco/graphjin/core/v3"
"github.com/dosco/graphjin/serv/v3"
"github.com/spf13/cobra"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
var (
// These variables are set using -ldflags
version string
commit string
date string
)
var (
log *zap.SugaredLogger
db *sql.DB
dbOpened bool
conf *serv.Config
cpath string
)
func Cmd() {
log = newLogger(false).Sugar()
cobra.EnableCommandSorting = false
rootCmd := &cobra.Command{
Use: "graphjin",
Short: BuildDetails(),
}
rootCmd.PersistentFlags().StringVar(&cpath,
"path", "./config", "path to config files")
rootCmd.AddCommand(newCmd())
rootCmd.AddCommand(servCmd())
rootCmd.AddCommand(versionCmd())
rootCmd.AddCommand(initCmd())
rootCmd.AddCommand(deployCmd())
rootCmd.AddCommand(dbCmd())
if v := cmdSecrets(); v != nil {
rootCmd.AddCommand(v)
}
// rootCmd.AddCommand(&cobra.Command{
// Use: fmt.Sprintf("conf:dump [%s]", strings.Join(viper.SupportedExts, "|")),
// Short: "Dump config to file",
// Long: "Dump current config to a file in the selected format",
// Run: cmdConfDump,
// })
if err := rootCmd.Execute(); err != nil {
log.Fatalf("%s", err)
}
}
func setup(cpath string) {
if conf != nil {
return
}
setupAgain(cpath)
}
func setupAgain(cpath string) {
cp, err := filepath.Abs(cpath)
if err != nil {
log.Fatal(err)
}
cn := serv.GetConfigName()
if conf, err = serv.ReadInConfig(path.Join(cp, cn)); err != nil {
log.Fatal(err)
}
}
func initDB(openDB bool) {
var err error
if db != nil && openDB == dbOpened {
return
}
fs := core.NewOsFS(cpath)
if db, err = serv.NewDB(conf, openDB, log, fs); err != nil {
log.Fatalf("Failed to connect to database: %s", err)
}
dbOpened = openDB
}
func newLogger(json bool) *zap.Logger {
econf := zapcore.EncoderConfig{
MessageKey: "msg",
LevelKey: "level",
NameKey: "logger",
EncodeLevel: zapcore.LowercaseLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.StringDurationEncoder,
}
var core zapcore.Core
if json {
core = zapcore.NewCore(zapcore.NewJSONEncoder(econf), os.Stdout, zap.DebugLevel)
} else {
econf.EncodeLevel = zapcore.CapitalColorLevelEncoder
core = zapcore.NewCore(zapcore.NewConsoleEncoder(econf), os.Stdout, zap.DebugLevel)
}
return zap.New(core)
}