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  }