Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var PerfCmd = &cobra.Command{ Use: "perf", Short: "Performance Management", Long: `Performance Management & Benchmarking using Meshery CLI.`, Example: "mesheryctl perf --name \"a quick stress test\" --url http://192.168.1.15/productpage --qps 300 --concurrent-requests 2 --duration 30s --token \"provider=Meshery\"", Args: cobra.NoArgs, PreRunE: func(cmd *cobra.Command, args []string) error { return system.RunPreflightHealthChecks(true, cmd.Use) }, RunE: func(cmd *cobra.Command, args []string) error { // Importing SMP Configuration from the file var req *http.Request if filePath != "" { smpConfig, err := ioutil.ReadFile(filePath) if err != nil { return err } mctlCfg, err := config.GetMesheryCtl(viper.GetViper()) if err != nil { return errors.Wrap(err, "error processing config") } req, err = http.NewRequest("POST", mctlCfg.GetBaseMesheryURL()+"/api/perf/load-test-smp", bytes.NewBuffer(smpConfig)) if err != nil { return errors.Wrapf(err, utils.PerfError("Failed to invoke performance test")) } } else { var err error if testName == "" { log.Debug("Test Name not provided") testName = utils.StringWithCharset(8) log.Debug("Using random test name: ", testName) } if testURL == "" { return errors.New(utils.PerfError("please enter a test URL")) } // Method to check if the entered Test URL is valid or not var validURL = govalidator.IsURL(testURL) if !validURL { return errors.New(utils.PerfError("please enter a valid test URL")) } mctlCfg, err := config.GetMesheryCtl(viper.GetViper()) if err != nil { return errors.Wrap(err, "error processing config") } req, err = http.NewRequest("POST", mctlCfg.GetBaseMesheryURL()+"/api/perf/load-test", nil) if err != nil { return errors.Wrapf(err, utils.PerfError("Failed to invoke performance test")) } q := req.URL.Query() q.Add("name", testName) q.Add("loadGenerator", loadGenerator) q.Add("c", concurrentRequests) q.Add("url", testURL) q.Add("qps", qps) durLen := len(testDuration) q.Add("dur", string(testDuration[durLen-1])) q.Add("t", string(testDuration[:durLen-1])) if testMesh != "" { q.Add("mesh", testMesh) } req.URL.RawQuery = q.Encode() } if err := utils.AddAuthDetails(req, tokenPath); err != nil { return errors.Wrap(err, utils.PerfError("failed to add auth details to request")) } client := &http.Client{} resp, err := client.Do(req) if err != nil { return errors.Wrapf(err, utils.PerfError(fmt.Sprintf("failed to make request to %s", testURL))) } if utils.ContentTypeIsHTML(resp) { return errors.New("failed to run test") } log.Debug("Initiating Performance test ...") log.Debug(resp.Status) defer utils.SafeClose(resp.Body) data, err := ioutil.ReadAll(resp.Body) if err != nil { return errors.Wrap(err, utils.PerfError("failed to read response body")) } log.Debug(string(data)) if err := utils.UpdateAuthDetails(tokenPath); err != nil { return errors.Wrap(err, utils.PerfError("failed to update auth details")) } log.Debug("Test Completed Successfully!") return nil }, }
PerfCmd represents the Performance Management CLI command
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.