68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
|
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 <timeout>] " +
|
||
|
"[--version] --config <config_path> <command>",
|
||
|
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)
|
||
|
}
|