| package cmd |
| |
| import ( |
| "fmt" |
| "os" |
| |
| "github.com/spf13/cobra" |
| "go.skia.org/infra/go/metrics2" |
| "go.skia.org/infra/go/sklog/glog_and_cloud" |
| "go.skia.org/infra/perf/go/config" |
| ) |
| |
| var instanceConfigFile string |
| var instanceConfig *config.InstanceConfig |
| var promPort string |
| |
| // rootCmd represents the base command when called without any subcommands |
| var rootCmd = &cobra.Command{ |
| Use: "perfserver", |
| Short: "The main Perf application.", |
| Long: `The main Perf application. |
| |
| The different parts of Perf are run as sub-commands, for example |
| to run the ingestion process: |
| |
| perfserver ingest --config=instance_config.json ... |
| |
| `, |
| PersistentPreRunE: func(cmd *cobra.Command, args []string) error { |
| glog_and_cloud.SetLogger(glog_and_cloud.NewStdErrCloudLogger(glog_and_cloud.SLogStderr)) |
| |
| var err error |
| instanceConfig, err = config.InstanceConfigFromFile(instanceConfigFile) |
| if err != nil { |
| return err |
| } |
| |
| metrics2.InitPrometheus(promPort) |
| |
| return nil |
| }, |
| } |
| |
| // 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() { |
| if err := initSubCommands(); err != nil { |
| fmt.Println(err) |
| os.Exit(1) |
| } |
| if err := rootCmd.Execute(); err != nil { |
| fmt.Println(err) |
| os.Exit(1) |
| } |
| } |
| |
| func initSubCommands() error { |
| // 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(&instanceConfigFile, "config", "", "Instance config file. Must be supplied.") |
| err := rootCmd.MarkPersistentFlagRequired("config") |
| if err != nil { |
| return err |
| } |
| |
| rootCmd.PersistentFlags().StringVar(&promPort, "prom_port", ":20000", "Metrics service address (e.g., ':20000')") |
| |
| alertInit() |
| ingestInit() |
| frontendInit() |
| |
| return nil |
| } |