Skip to content

Commit

Permalink
Refactor apiClientImpl.DoGetFallback
Browse files Browse the repository at this point in the history
Make apiClientImpl.DoGetFallback more idiomatic and efficient:
 * Save result of args.Encode() operation as it might be used 2 times in
   the function and due to looping and sorting it might be heavy.
 * Follow line-of-sight practise and therefore simplify the code.
  • Loading branch information
dohnto committed Apr 7, 2022
1 parent 29e8191 commit 4bf68a2
Showing 1 changed file with 5 additions and 9 deletions.
14 changes: 5 additions & 9 deletions api/prometheus/v1/api.go
Expand Up @@ -1133,27 +1133,23 @@ func (h *apiClientImpl) Do(ctx context.Context, req *http.Request) (*http.Respon
// DoGetFallback will attempt to do the request as-is, and on a 405 or 501 it
// will fallback to a GET request.
func (h *apiClientImpl) DoGetFallback(ctx context.Context, u *url.URL, args url.Values) (*http.Response, []byte, Warnings, error) {
req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(args.Encode()))
encodedArgs := args.Encode()
req, err := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(encodedArgs))
if err != nil {
return nil, nil, nil, err
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

resp, body, warnings, err := h.Do(ctx, req)
if resp != nil && (resp.StatusCode == http.StatusMethodNotAllowed || resp.StatusCode == http.StatusNotImplemented) {
u.RawQuery = args.Encode()
u.RawQuery = encodedArgs
req, err = http.NewRequest(http.MethodGet, u.String(), nil)
if err != nil {
return nil, nil, warnings, err
}

} else {
if err != nil {
return resp, body, warnings, err
}
return resp, body, warnings, nil
return h.Do(ctx, req)
}
return h.Do(ctx, req)
return resp, body, warnings, err
}

func formatTime(t time.Time) string {
Expand Down

0 comments on commit 4bf68a2

Please sign in to comment.