package modules import ( "context" "os" "strings" "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/version" "github.com/spf13/cobra" "github.com/spf13/pflag" "github.com/spf13/viper" ) const ( defaultPrintResponseLimit = 1024 cfgConfigPath = "config" cfgHTTPTimeoutFlag = "http-timeout" cfgSkipVerifyTLS = "skip-verify-tls" ) var ( cfgFile string rootCmd = &cobra.Command{ Use: "frostfs-s3-playback", Version: version.Version, Short: "FrostFS S3 Traffic Playback", Long: "Helps to reproduce s3 commands from log files", Example: "frostfs-s3-playback [--skip-verify-tls] [--http-timeout ] " + "[--version] --config ", SilenceUsage: true, SilenceErrors: true, PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { return viper.BindPFlags(cmd.Flags()) }, RunE: func(cmd *cobra.Command, _ []string) error { return cmd.Help() }, } ) func Execute(ctx context.Context) (*cobra.Command, error) { return rootCmd.ExecuteContextC(ctx) } func initConfig() { viper.SetConfigFile(cfgFile) _ = viper.ReadInConfig() } func init() { cobra.OnInitialize(initConfig) cobra.EnableTraverseRunHooks = true rootCmd.SetGlobalNormalizationFunc(func(_ *pflag.FlagSet, name string) pflag.NormalizedName { return pflag.NormalizedName(strings.ReplaceAll(name, "_", "-")) }) rootCmd.PersistentFlags().StringVar(&cfgFile, cfgConfigPath, "", "configuration filepath") _ = rootCmd.MarkPersistentFlagRequired(cfgConfigPath) _ = rootCmd.MarkPersistentFlagFilename(cfgConfigPath) rootCmd.PersistentFlags().Duration(cfgHTTPTimeoutFlag, time.Minute, "http request timeout") rootCmd.PersistentFlags().Bool(cfgSkipVerifyTLS, false, "skip TLS certificate verification") rootCmd.SetOut(os.Stdout) initRunCmd() rootCmd.AddCommand(runCmd) }