Skip to content

Commit cbb51b0

Browse files
authored
Optimizing network.go #129 from davidjumani/optimize-nw
2 parents 2d641ae + e544cc9 commit cbb51b0

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed

cmd/network.go

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -140,32 +140,38 @@ func getResponseData(data map[string]interface{}) map[string]interface{} {
140140
}
141141

142142
func pollAsyncJob(r *Request, jobID string) (map[string]interface{}, error) {
143-
for timeout := float64(r.Config.Core.Timeout); timeout > 0.0; {
144-
startTime := time.Now()
145-
spinner := r.Config.StartSpinner("polling for async API result")
146-
queryResult, queryError := NewAPIRequest(r, "queryAsyncJobResult", []string{"jobid=" + jobID}, false)
147-
diff := time.Duration(1*time.Second).Nanoseconds() - time.Now().Sub(startTime).Nanoseconds()
148-
if diff > 0 {
149-
time.Sleep(time.Duration(diff) * time.Nanosecond)
150-
}
151-
timeout = timeout - time.Now().Sub(startTime).Seconds()
152-
r.Config.StopSpinner(spinner)
153-
if queryError != nil {
154-
return queryResult, queryError
155-
}
156-
jobStatus := queryResult["jobstatus"].(float64)
157-
if jobStatus == 0 {
158-
continue
159-
}
160-
if jobStatus == 1 {
161-
return queryResult["jobresult"].(map[string]interface{}), nil
143+
timeout := time.NewTimer(time.Duration(float64(r.Config.Core.Timeout)) * time.Second)
144+
ticker := time.NewTicker(time.Duration(2 * time.Second))
145+
defer ticker.Stop()
146+
defer timeout.Stop()
162147

163-
}
164-
if jobStatus == 2 {
165-
return queryResult, errors.New("async API failed for job " + jobID)
148+
spinner := r.Config.StartSpinner("polling for async API result")
149+
defer r.Config.StopSpinner(spinner)
150+
151+
for {
152+
select {
153+
case <-timeout.C:
154+
return nil, errors.New("async API job query timed out")
155+
156+
case <-ticker.C:
157+
queryResult, queryError := NewAPIRequest(r, "queryAsyncJobResult", []string{"jobid=" + jobID}, false)
158+
if queryError != nil {
159+
return queryResult, queryError
160+
}
161+
jobStatus := queryResult["jobstatus"].(float64)
162+
163+
switch jobStatus {
164+
case 0:
165+
continue
166+
167+
case 1:
168+
return queryResult["jobresult"].(map[string]interface{}), nil
169+
170+
case 2:
171+
return queryResult, errors.New("async API failed for job " + jobID)
172+
}
166173
}
167174
}
168-
return nil, errors.New("async API job query timed out")
169175
}
170176

171177
// NewAPIRequest makes an API request to configured management server

0 commit comments

Comments
 (0)