This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-csbench.git


The following commit(s) were added to refs/heads/main by this push:
     new e495242  Changing executeAPI to utilize POST request (#18)
e495242 is described below

commit e495242efc177d0a3fc2af2de35a367a213f9116
Author: Kevin Li <35612973+kevin-...@users.noreply.github.com>
AuthorDate: Sun Jul 13 20:53:01 2025 -0700

    Changing executeAPI to utilize POST request (#18)
    
    * Changing executeAPI to utilize POST request
    
    * Adding changes to accomadate GET requestS
    
    * Code Formatting Fix
    
    * Adding last changes
    
    * Update apirunner/apirunner.go
    
    * Apply suggestions from code review
    
    * Update apirunner/apirunner.go
    
    ---------
    
    Co-authored-by: Kevin Li <kl...@apple.com>
    Co-authored-by: Suresh Kumar Anaparti <sureshkumar.anapa...@gmail.com>
---
 apirunner/apirunner.go | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/apirunner/apirunner.go b/apirunner/apirunner.go
index 8a3987c..5767b7c 100644
--- a/apirunner/apirunner.go
+++ b/apirunner/apirunner.go
@@ -30,6 +30,7 @@ import (
        "net/http"
        "net/url"
        "os"
+       "regexp"
        "strconv"
        "strings"
        "time"
@@ -124,11 +125,16 @@ func executeAPIandCalculate(profileName string, apiURL 
string, command string, p
        var avgTime float64
        var totalTime float64
        var count float64
+       getRequestList := 
map[string]struct{}{"isaccountallowedtocreateofferingswithtags": {}, 
"readyforshutdown": {}, "cloudianisenabled": {}, "quotabalance": {}, 
+       "quotasummary": {}, "quotatarifflist": {}, "quotaisenabled": {}, 
"quotastatement": {}, "verifyoauthcodeandgetuser": {}}
+       _, isInGetRequestList := getRequestList[command]
+       isGetRequest, _ := regexp.MatchString("^(get|list|query|find)(\\w+)+$", 
command)
+
        if iterations != 1 {
                log.Infof("Calling API %s for %d number of iterations with 
parameters %s", command, iterations, params)
                for i := 1; i <= iterations; i++ {
                        log.Infof("Started with iteration %d for the command 
%s", i, command)
-                       elapsedTime, apicount, result := executeAPI(apiURL, 
params)
+                       elapsedTime, apicount, result := executeAPI(apiURL, 
params, !(isGetRequest || isInGetRequestList))
                        count = apicount
                        if elapsedTime < minTime {
                                minTime = elapsedTime
@@ -145,7 +151,7 @@ func executeAPIandCalculate(profileName string, apiURL 
string, command string, p
                log.Infof("count [%.f] : Time in seconds [Min - %.2f] [Max - 
%.2f] [Avg - %.2f]\n", count, minTime, maxTime, avgTime)
                saveData(apiURL, count, minTime, maxTime, avgTime, page, 
pagesize, keyword, profileName, command, dbProfile, reportAppend)
        } else {
-               elapsedTime, apicount, _ := executeAPI(apiURL, params)
+               elapsedTime, apicount, _ := executeAPI(apiURL, params, 
!(isGetRequest || isInGetRequestList))
                log.Infof("Elapsed time [%.2f seconds] for the count [%.0f]", 
elapsedTime, apicount)
                saveData(apiURL, count, elapsedTime, elapsedTime, elapsedTime, 
page, pagesize, keyword, profileName, command, dbProfile, reportAppend)
        }
@@ -251,12 +257,24 @@ func saveData(apiURL string, count float64, minTime 
float64, maxTime float64, av
        log.Info(message)
 }
 
-func executeAPI(apiURL string, params url.Values) (float64, float64, bool) {
+func executeAPI(apiURL string, params url.Values, postRequest bool) (float64, 
float64, bool) {
        // Send the API request and calculate the time
-       apiURL = fmt.Sprintf("%s?%s", apiURL, params.Encode())
+       var resp *http.Response
+       var err error
        log.Infof("Running the API %s", apiURL)
        start := time.Now()
-       resp, err := http.Get(apiURL)
+       if postRequest {
+               dataBody := strings.NewReader(params.Encode())
+               resp, err = http.Post(
+                       apiURL,
+                       "application/x-www-form-urlencoded",
+                       dataBody,
+               )
+       } else {
+               apiURL = fmt.Sprintf("%s?%s", apiURL, params.Encode())
+               resp, err = http.Get(apiURL)
+       }
+
        APIscount++
        if err != nil {
                log.Infof("Error sending API request: %s with error %s\n", 
apiURL, err)

Reply via email to