| // Copyright 2015 The etcd Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package cmd |
| |
| import ( |
| "sync" |
| "time" |
| |
| "go.etcd.io/etcd/client/pkg/v3/transport" |
| |
| "github.com/spf13/cobra" |
| "gopkg.in/cheggaaa/pb.v1" |
| ) |
| |
| // This represents the base command when called without any subcommands |
| var RootCmd = &cobra.Command{ |
| Use: "benchmark", |
| Short: "A low-level benchmark tool for etcd3", |
| Long: `benchmark is a low-level benchmark tool for etcd3. |
| It uses gRPC client directly and does not depend on |
| etcd client library. |
| `, |
| } |
| |
| var ( |
| endpoints []string |
| totalConns uint |
| totalClients uint |
| precise bool |
| sample bool |
| |
| bar *pb.ProgressBar |
| wg sync.WaitGroup |
| |
| tls transport.TLSInfo |
| |
| cpuProfPath string |
| memProfPath string |
| |
| user string |
| |
| dialTimeout time.Duration |
| |
| targetLeader bool |
| ) |
| |
| func init() { |
| RootCmd.PersistentFlags().StringSliceVar(&endpoints, "endpoints", []string{"127.0.0.1:2379"}, "gRPC endpoints") |
| RootCmd.PersistentFlags().UintVar(&totalConns, "conns", 1, "Total number of gRPC connections") |
| RootCmd.PersistentFlags().UintVar(&totalClients, "clients", 1, "Total number of gRPC clients") |
| |
| RootCmd.PersistentFlags().BoolVar(&precise, "precise", false, "use full floating point precision") |
| RootCmd.PersistentFlags().BoolVar(&sample, "sample", false, "'true' to sample requests for every second") |
| RootCmd.PersistentFlags().StringVar(&tls.CertFile, "cert", "", "identify HTTPS client using this SSL certificate file") |
| RootCmd.PersistentFlags().StringVar(&tls.KeyFile, "key", "", "identify HTTPS client using this SSL key file") |
| RootCmd.PersistentFlags().StringVar(&tls.TrustedCAFile, "cacert", "", "verify certificates of HTTPS-enabled servers using this CA bundle") |
| |
| RootCmd.PersistentFlags().StringVar(&user, "user", "", "provide username[:password] and prompt if password is not supplied.") |
| RootCmd.PersistentFlags().DurationVar(&dialTimeout, "dial-timeout", 0, "dial timeout for client connections") |
| |
| RootCmd.PersistentFlags().BoolVar(&targetLeader, "target-leader", false, "connect only to the leader node") |
| } |