-
Notifications
You must be signed in to change notification settings - Fork 0
/
argparse.go
89 lines (70 loc) · 2.32 KB
/
argparse.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
package argparse
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
log "github.com/sirupsen/logrus"
)
var (
BuildMajorVersion string = ""
BuildMinorVersion string = ""
BuildPatchVersion string = ""
BuildCommitSHA string = ""
BuildShortCommitSHA string = ""
BuildDate string = ""
BuildPlatform string = ""
)
var SemVersion string = fmt.Sprintf("%s.%s.%s", BuildMajorVersion, BuildMinorVersion, BuildPatchVersion)
type runtimeContext struct {
CPUProfile string
LogLevelStr string
}
var (
runtimeCtx runtimeContext
replicateCtrMgr bool = false
)
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "anysdk",
Version: SemVersion,
Short: "model for SQL semantics from openapi docs",
Long: `
model for SQL semantics from openapi docs
`,
Run: func(cmd *cobra.Command, args []string) {
// in the root command is executed with no arguments, print the help message
usagemsg := cmd.Long + "\n\n" + cmd.UsageString()
fmt.Println(usagemsg)
},
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() error {
return rootCmd.Execute()
}
func init() {
cobra.OnInitialize(initConfig)
rootCmd.SetVersionTemplate("InfraQL v{{.Version}} " + BuildPlatform + " (" + BuildShortCommitSHA + ")\nBuildDate: " + BuildDate + "\nhttps://infraql.io\n")
// Here you will define your flags and configuration settings.
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
rootCmd.PersistentFlags().StringVar(&runtimeCtx.CPUProfile, "cpuprofile", "", "cpuprofile file, none if empty")
rootCmd.PersistentFlags().StringVar(&runtimeCtx.LogLevelStr, "loglevel", "warn", "loglevel")
rootCmd.AddCommand(execCmd)
}
func setLogLevel() {
logLevel, err := log.ParseLevel(runtimeCtx.LogLevelStr)
if err != nil {
log.Fatal(err)
}
log.SetLevel(logLevel)
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
setLogLevel()
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.
if err := viper.ReadInConfig(); err == nil {
fmt.Println("Using config file:", viper.ConfigFileUsed())
}
}