bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/cmd/synsec-cli/main.go (about) 1 package main 2 3 import ( 4 "bitbucket.org/Aishee/synsec/pkg/csconfig" 5 "bitbucket.org/Aishee/synsec/pkg/cwhub" 6 "bitbucket.org/Aishee/synsec/pkg/cwversion" 7 "bitbucket.org/Aishee/synsec/pkg/database" 8 9 log "github.com/sirupsen/logrus" 10 "github.com/spf13/cobra" 11 "github.com/spf13/cobra/doc" 12 ) 13 14 var trace_lvl, dbg_lvl, nfo_lvl, wrn_lvl, err_lvl bool 15 16 var ConfigFilePath string 17 var csConfig *csconfig.Config 18 var dbClient *database.Client 19 20 var OutputFormat string 21 22 var downloadOnly bool 23 var forceAction bool 24 var purge bool 25 var all bool 26 var restoreOldBackup bool 27 28 var prometheusURL string 29 30 func initConfig() { 31 var err error 32 if trace_lvl { 33 log.SetLevel(log.TraceLevel) 34 } else if dbg_lvl { 35 log.SetLevel(log.DebugLevel) 36 } else if nfo_lvl { 37 log.SetLevel(log.InfoLevel) 38 } else if wrn_lvl { 39 log.SetLevel(log.WarnLevel) 40 } else if err_lvl { 41 log.SetLevel(log.ErrorLevel) 42 } 43 logFormatter := &log.TextFormatter{TimestampFormat: "02-01-2006 03:04:05 PM", FullTimestamp: true} 44 log.SetFormatter(logFormatter) 45 csConfig, err = csconfig.NewConfig(ConfigFilePath, false, false) 46 if err != nil { 47 log.Fatalf(err.Error()) 48 } 49 log.Debugf("Using %s as configuration file", ConfigFilePath) 50 if err := csConfig.LoadCCSCLI(); err != nil { 51 log.Fatalf(err.Error()) 52 } 53 54 if csConfig.Cscli == nil { 55 log.Fatalf("missing 'ccscli' configuration in '%s', exiting", ConfigFilePath) 56 } 57 58 if cwhub.HubBranch == "" && csConfig.Cscli.HubBranch != "" { 59 cwhub.HubBranch = csConfig.Cscli.HubBranch 60 } 61 if OutputFormat != "" { 62 csConfig.Cscli.Output = OutputFormat 63 if OutputFormat != "json" && OutputFormat != "raw" && OutputFormat != "human" { 64 log.Fatalf("output format %s unknown", OutputFormat) 65 } 66 } 67 if csConfig.Cscli.Output == "" { 68 csConfig.Cscli.Output = "human" 69 } 70 71 if csConfig.Cscli.Output == "json" { 72 log.SetFormatter(&log.JSONFormatter{}) 73 log.SetLevel(log.ErrorLevel) 74 } else if csConfig.Cscli.Output == "raw" { 75 log.SetLevel(log.ErrorLevel) 76 } 77 78 } 79 80 var validArgs = []string{ 81 "scenarios", "parsers", "collections", "lapi", "postoverflows", "machines", "metrics", "bouncers", "alerts", "decisions", "simulation", "hub", "dashboard", "config", "completion", "version", 82 } 83 84 func main() { 85 86 var rootCmd = &cobra.Command{ 87 Use: "ccscli", 88 Short: "ccscli allows you to manage synsec", 89 Long: `ccscli is the main command to interact with your synsec service, scenarios & db. 90 It is meant to allow you to manage bans, parsers/scenarios/etc, api and generally manage you synsec setup.`, 91 ValidArgs: validArgs, 92 /*TBD examples*/ 93 } 94 var cmdDocGen = &cobra.Command{ 95 Use: "doc", 96 Short: "Generate the documentation in `./doc/`. Directory must exist.", 97 Args: cobra.ExactArgs(0), 98 Hidden: true, 99 Run: func(cmd *cobra.Command, args []string) { 100 if err := doc.GenMarkdownTree(rootCmd, "./doc/"); err != nil { 101 log.Fatalf("Failed to generate cobra doc: %s", err.Error()) 102 } 103 }, 104 } 105 rootCmd.AddCommand(cmdDocGen) 106 /*usage*/ 107 var cmdVersion = &cobra.Command{ 108 Use: "version", 109 Short: "Display version and exit.", 110 Args: cobra.ExactArgs(0), 111 Run: func(cmd *cobra.Command, args []string) { 112 cwversion.Show() 113 }, 114 } 115 rootCmd.AddCommand(cmdVersion) 116 117 rootCmd.PersistentFlags().StringVarP(&ConfigFilePath, "config", "c", "/etc/synsec/config.yaml", "path to synsec config file") 118 rootCmd.PersistentFlags().StringVarP(&OutputFormat, "output", "o", "", "Output format : human, json, raw.") 119 rootCmd.PersistentFlags().BoolVar(&dbg_lvl, "debug", false, "Set logging to debug.") 120 rootCmd.PersistentFlags().BoolVar(&nfo_lvl, "info", false, "Set logging to info.") 121 rootCmd.PersistentFlags().BoolVar(&wrn_lvl, "warning", false, "Set logging to warning.") 122 rootCmd.PersistentFlags().BoolVar(&err_lvl, "error", false, "Set logging to error.") 123 rootCmd.PersistentFlags().BoolVar(&trace_lvl, "trace", false, "Set logging to trace.") 124 125 rootCmd.PersistentFlags().StringVar(&cwhub.HubBranch, "branch", "", "Override hub branch on github") 126 if err := rootCmd.PersistentFlags().MarkHidden("branch"); err != nil { 127 log.Fatalf("failed to make branch hidden : %s", err) 128 } 129 cobra.OnInitialize(initConfig) 130 /*don't sort flags so we can enforce order*/ 131 rootCmd.Flags().SortFlags = false 132 rootCmd.PersistentFlags().SortFlags = false 133 134 rootCmd.AddCommand(NewConfigCmd()) 135 rootCmd.AddCommand(NewHubCmd()) 136 rootCmd.AddCommand(NewMetricsCmd()) 137 rootCmd.AddCommand(NewDashboardCmd()) 138 rootCmd.AddCommand(NewDecisionsCmd()) 139 rootCmd.AddCommand(NewAlertsCmd()) 140 // rootCmd.AddCommand(NewInspectCmd()) 141 rootCmd.AddCommand(NewSimulationCmds()) 142 rootCmd.AddCommand(NewBouncersCmd()) 143 rootCmd.AddCommand(NewMachinesCmd()) 144 rootCmd.AddCommand(NewParsersCmd()) 145 rootCmd.AddCommand(NewScenariosCmd()) 146 rootCmd.AddCommand(NewCollectionsCmd()) 147 rootCmd.AddCommand(NewPostOverflowsCmd()) 148 rootCmd.AddCommand(NewLapiCmd()) 149 rootCmd.AddCommand(NewCompletionCmd()) 150 if err := rootCmd.Execute(); err != nil { 151 log.Fatalf("While executing root command : %s", err) 152 } 153 }