From 750bca5be61c41dcb87465c85a830d70dc9a0594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=CC=81bor=20Farkas?= Date: Mon, 19 Aug 2024 15:12:07 +0200 Subject: [PATCH] wip --- backend/httpclient/http_client.go | 34 ++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/backend/httpclient/http_client.go b/backend/httpclient/http_client.go index 40a4d39d4..8de498fa5 100644 --- a/backend/httpclient/http_client.go +++ b/backend/httpclient/http_client.go @@ -8,6 +8,7 @@ import ( "net" "net/http" + "github.com/grafana/grafana-plugin-sdk-go/backend/log" "github.com/grafana/grafana-plugin-sdk-go/backend/proxy" ) @@ -41,6 +42,30 @@ func New(opts ...Options) (*http.Client, error) { return c, nil } +type reportSizeRoundtripper struct { + next http.RoundTripper +} + +func newReportSizeRoundtripper(next http.RoundTripper) http.RoundTripper { + return &reportSizeRoundtripper{next: next} +} + +func (rt *reportSizeRoundtripper) RoundTrip(req *http.Request) (*http.Response, error) { + res, err := rt.next.RoundTrip(req) + + if err != nil { + return res, err + } + + res.Body = CountBytesReader(res.Body, func(size int64) { + log.DefaultLogger.Debug("downstream response info", "bytes", size, "url", req.URL.String()) + }) + + return res, err +} + +var _ http.RoundTripper = &reportSizeRoundtripper{} + // GetTransport creates a new http.RoundTripper given provided options. // If opts is nil the http.DefaultTransport will be returned. // If no middlewares are provided the DefaultMiddlewares() will be used. If you @@ -93,7 +118,14 @@ func GetTransport(opts ...Options) (http.RoundTripper, error) { return nil, err } - return roundTripperFromMiddlewares(clientOpts, clientOpts.Middlewares, transport) + _, hasDatasourceTypeLabel := clientOpts.Labels["datasource_type"] + + var rt http.RoundTripper = transport + if hasDatasourceTypeLabel { + rt = newReportSizeRoundtripper(rt) + } + + return roundTripperFromMiddlewares(clientOpts, clientOpts.Middlewares, rt) } // GetTLSConfig creates a new tls.Config given provided options.