mirror of
https://github.com/grafana/grafana.git
synced 2025-09-23 18:52:33 +08:00
Prometheus: Small improvements to the custom client (#51709)
* Add suggestions * Fix tests
This commit is contained in:
@ -138,10 +138,13 @@ func createRequest(ctx context.Context, method string, u *url.URL, body []byte,
|
|||||||
if header != nil {
|
if header != nil {
|
||||||
request.Header = header
|
request.Header = header
|
||||||
}
|
}
|
||||||
// This may not be true but right now we don't have more information here and seems like we send just this type
|
|
||||||
// of encoding right now if it is a POST
|
|
||||||
if strings.ToUpper(method) == http.MethodPost {
|
if strings.ToUpper(method) == http.MethodPost {
|
||||||
|
// This may not be true but right now we don't have more information here and seems like we send just this type
|
||||||
|
// of encoding right now if it is a POST
|
||||||
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
|
// This allows transport to retry request. See https://github.com/prometheus/client_golang/pull/1022
|
||||||
|
// It's set to nil so it is not actually sent over the wire, just used in Go http lib to retry requests.
|
||||||
|
request.Header["Idempotency-Key"] = nil
|
||||||
}
|
}
|
||||||
return request, nil
|
return request, nil
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,14 @@ func TestService(t *testing.T) {
|
|||||||
sender := &fakeSender{}
|
sender := &fakeSender{}
|
||||||
err := service.CallResource(context.Background(), req, sender)
|
err := service.CallResource(context.Background(), req, sender)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, http.Header{"Content-Type": {"application/x-www-form-urlencoded"}, "foo": {"bar"}}, httpProvider.Roundtripper.Req.Header)
|
require.Equal(
|
||||||
|
t,
|
||||||
|
http.Header{
|
||||||
|
"Content-Type": {"application/x-www-form-urlencoded"},
|
||||||
|
"Idempotency-Key": []string(nil),
|
||||||
|
"foo": {"bar"},
|
||||||
|
},
|
||||||
|
httpProvider.Roundtripper.Req.Header)
|
||||||
require.Equal(t, http.MethodPost, httpProvider.Roundtripper.Req.Method)
|
require.Equal(t, http.MethodPost, httpProvider.Roundtripper.Req.Method)
|
||||||
body, err := io.ReadAll(httpProvider.Roundtripper.Req.Body)
|
body, err := io.ReadAll(httpProvider.Roundtripper.Req.Body)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package resource
|
package resource
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||||
@ -83,14 +83,17 @@ func (r *Resource) Execute(ctx context.Context, req *backend.CallResourceRequest
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
data, err := ioutil.ReadAll(resp.Body)
|
var buf bytes.Buffer
|
||||||
|
// Should be more efficient than ReadAll. See https://github.com/prometheus/client_golang/pull/976
|
||||||
|
_, err = buf.ReadFrom(resp.Body)
|
||||||
|
body := buf.Bytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
callResponse := &backend.CallResourceResponse{
|
callResponse := &backend.CallResourceResponse{
|
||||||
Status: resp.StatusCode,
|
Status: resp.StatusCode,
|
||||||
Headers: resp.Header,
|
Headers: resp.Header,
|
||||||
Body: data,
|
Body: body,
|
||||||
}
|
}
|
||||||
|
|
||||||
return callResponse, err
|
return callResponse, err
|
||||||
|
Reference in New Issue
Block a user