2021-12-10 17:27:40 -05:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
|
|
|
|
distspec "github.com/opencontainers/distribution-spec/specs-go"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
|
|
"github.com/spf13/cobra"
|
2022-10-20 11:39:20 -05:00
|
|
|
|
2024-01-31 23:34:07 -05:00
|
|
|
"zotregistry.dev/zot/pkg/api/config"
|
2021-12-10 17:27:40 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
// "zb" - performance benchmark and stress.
|
|
|
|
func NewPerfRootCmd() *cobra.Command {
|
|
|
|
showVersion := false
|
|
|
|
|
2022-03-23 10:22:45 -05:00
|
|
|
var auth, workdir, repo, outFmt, srcIPs, srcCIDR string
|
2021-12-10 17:27:40 -05:00
|
|
|
|
|
|
|
var concurrency, requests int
|
|
|
|
|
2023-05-19 11:51:15 -05:00
|
|
|
var skipCleanup bool
|
|
|
|
|
2021-12-10 17:27:40 -05:00
|
|
|
rootCmd := &cobra.Command{
|
2022-05-09 15:58:12 -05:00
|
|
|
Use: "zb <url>",
|
2021-12-10 17:27:40 -05:00
|
|
|
Short: "`zb`",
|
|
|
|
Long: "`zb`",
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
if showVersion {
|
|
|
|
log.Info().Str("distribution-spec", distspec.Version).Str("commit", config.Commit).
|
|
|
|
Str("binary-type", config.BinaryType).Str("go version", config.GoVersion).Msg("version")
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(args) == 0 {
|
|
|
|
_ = cmd.Usage()
|
|
|
|
cmd.SilenceErrors = false
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
url := ""
|
|
|
|
if len(args) > 0 {
|
|
|
|
url = args[0]
|
|
|
|
}
|
|
|
|
|
|
|
|
if requests < concurrency {
|
|
|
|
panic("requests cannot be less than concurrency")
|
|
|
|
}
|
|
|
|
|
|
|
|
requests = concurrency * (requests / concurrency)
|
|
|
|
|
2023-05-19 11:51:15 -05:00
|
|
|
Perf(workdir, url, auth, repo, concurrency, requests, outFmt, srcIPs, srcCIDR, skipCleanup)
|
2021-12-10 17:27:40 -05:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
rootCmd.Flags().StringVarP(&auth, "auth-creds", "A", "",
|
|
|
|
"Use colon-separated BASIC auth creds")
|
2022-03-23 10:22:45 -05:00
|
|
|
rootCmd.Flags().StringVarP(&srcIPs, "src-ips", "i", "",
|
|
|
|
"Use colon-separated ips to make requests from, src-ips and src-cidr are mutually exclusive")
|
|
|
|
rootCmd.Flags().StringVarP(&srcCIDR, "src-cidr", "s", "",
|
|
|
|
"Use specified cidr to obtain ips to make requests from, src-ips and src-cidr are mutually exclusive")
|
2021-12-10 17:27:40 -05:00
|
|
|
rootCmd.Flags().StringVarP(&workdir, "working-dir", "d", "",
|
|
|
|
"Use specified directory to store test data")
|
|
|
|
rootCmd.Flags().StringVarP(&repo, "repo", "r", "",
|
|
|
|
"Use specified repo on remote registry for test data")
|
|
|
|
rootCmd.Flags().IntVarP(&concurrency, "concurrency", "c", 1,
|
|
|
|
"Number of multiple requests to make at a time")
|
|
|
|
rootCmd.Flags().IntVarP(&requests, "requests", "n", 1,
|
|
|
|
"Number of requests to perform")
|
2022-01-13 17:06:35 -05:00
|
|
|
rootCmd.Flags().StringVarP(&outFmt, "output-format", "o", "",
|
|
|
|
"Output format of test results: stdout (default), json, ci-cd")
|
2023-05-19 11:51:15 -05:00
|
|
|
rootCmd.Flags().BoolVar(&skipCleanup, "skip-cleanup", false,
|
|
|
|
"Clean up pushed repos from remote registry after running benchmark (default true)")
|
2021-12-10 17:27:40 -05:00
|
|
|
|
|
|
|
// "version"
|
2022-01-20 11:03:13 -05:00
|
|
|
rootCmd.Flags().BoolVarP(&showVersion, "version", "v", false, "Show the version and exit")
|
2021-12-10 17:27:40 -05:00
|
|
|
|
|
|
|
return rootCmd
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
if err := NewPerfRootCmd().Execute(); err != nil {
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
}
|