Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-pages.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaime Martinez <jmartinez@gitlab.com>2021-02-08 03:39:50 +0300
committerJaime Martinez <jmartinez@gitlab.com>2021-02-08 03:39:53 +0300
commitde481bad5878862ae6f693190c3aa3d85242b2c9 (patch)
tree5295952727779ca2597dd897be85379e3d6f9fc8 /internal/httptransport
parent9504871174848d6c3f47c6ba1d89899d1cd6c7f1 (diff)
Export MeteredRoundTripper
Exports the struct so that it can be asserted and adds a method that is called by the zip VFS.
Diffstat (limited to 'internal/httptransport')
-rw-r--r--internal/httptransport/metered_round_tripper.go17
-rw-r--r--internal/httptransport/trace.go4
-rw-r--r--internal/httptransport/transport.go2
-rw-r--r--internal/httptransport/transport_test.go4
4 files changed, 17 insertions, 10 deletions
diff --git a/internal/httptransport/metered_round_tripper.go b/internal/httptransport/metered_round_tripper.go
index fc652086..e8facbaa 100644
--- a/internal/httptransport/metered_round_tripper.go
+++ b/internal/httptransport/metered_round_tripper.go
@@ -12,7 +12,9 @@ import (
log "github.com/sirupsen/logrus"
)
-type meteredRoundTripper struct {
+// MeteredRoundTripper is a custom http.Transport that implements the http.RoundTripper interface.
+// It holds prometheus metrics to report connection usage and durations.
+type MeteredRoundTripper struct {
next http.RoundTripper
name string
tracer *prometheus.HistogramVec
@@ -29,7 +31,7 @@ func NewMeteredRoundTripper(transport *http.Transport, name string, tracerVec, d
transport = DefaultTransport
}
- return &meteredRoundTripper{
+ return &MeteredRoundTripper{
next: transport,
name: name,
tracer: tracerVec,
@@ -39,9 +41,9 @@ func NewMeteredRoundTripper(transport *http.Transport, name string, tracerVec, d
}
}
-// RoundTripper wraps the original http.Transport into a meteredRoundTripper which
+// RoundTrip wraps the original http.Transport into a MeteredRoundTripper which
// reports metrics on request duration, tracing and request count
-func (mrt *meteredRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
+func (mrt *MeteredRoundTripper) RoundTrip(r *http.Request) (*http.Response, error) {
start := time.Now()
ctx := httptrace.WithClientTrace(r.Context(), mrt.newTracer(start))
@@ -67,7 +69,7 @@ func (mrt *meteredRoundTripper) RoundTrip(r *http.Request) (*http.Response, erro
return resp, nil
}
-func (mrt *meteredRoundTripper) logResponse(req *http.Request, resp *http.Response) {
+func (mrt *MeteredRoundTripper) logResponse(req *http.Request, resp *http.Response) {
if log.GetLevel() == log.TraceLevel {
l := log.WithFields(log.Fields{
"client_name": mrt.name,
@@ -82,3 +84,8 @@ func (mrt *meteredRoundTripper) logResponse(req *http.Request, resp *http.Respon
l.Traceln("response")
}
}
+
+// RegisterProtocol calls the RegisterProtocol on the MeteredRoundTripper's next Transport
+func (mrt *MeteredRoundTripper) RegisterProtocol(scheme string, rt http.RoundTripper) {
+ mrt.next.(*http.Transport).RegisterProtocol(scheme, rt)
+}
diff --git a/internal/httptransport/trace.go b/internal/httptransport/trace.go
index 9ece5fc4..f99b282d 100644
--- a/internal/httptransport/trace.go
+++ b/internal/httptransport/trace.go
@@ -8,7 +8,7 @@ import (
"gitlab.com/gitlab-org/labkit/log"
)
-func (mrt *meteredRoundTripper) newTracer(start time.Time) *httptrace.
+func (mrt *MeteredRoundTripper) newTracer(start time.Time) *httptrace.
ClientTrace {
trace := &httptrace.ClientTrace{
GetConn: func(host string) {
@@ -71,7 +71,7 @@ func (mrt *meteredRoundTripper) newTracer(start time.Time) *httptrace.
return trace
}
-func (mrt *meteredRoundTripper) httpTraceObserve(label string, start time.Time) {
+func (mrt *MeteredRoundTripper) httpTraceObserve(label string, start time.Time) {
mrt.tracer.WithLabelValues(label).
Observe(time.Since(start).Seconds())
}
diff --git a/internal/httptransport/transport.go b/internal/httptransport/transport.go
index fcadc5fe..a462f7ee 100644
--- a/internal/httptransport/transport.go
+++ b/internal/httptransport/transport.go
@@ -12,7 +12,7 @@ import (
)
const (
- // DefaultTTFBTimeout is the timeout used in the meteredRoundTripper
+ // DefaultTTFBTimeout is the timeout used in the MeteredRoundTripper
// when calling http.Transport.RoundTrip. The request will be cancelled
// if the response takes longer than this.
DefaultTTFBTimeout = 15 * time.Second
diff --git a/internal/httptransport/transport_test.go b/internal/httptransport/transport_test.go
index feaf63b6..25c27f17 100644
--- a/internal/httptransport/transport_test.go
+++ b/internal/httptransport/transport_test.go
@@ -55,7 +55,7 @@ func Test_withRoundTripper(t *testing.T) {
timeout: time.Nanosecond,
}
- mtr := &meteredRoundTripper{next: next, durations: histVec, counter: counterVec, ttfbTimeout: DefaultTTFBTimeout}
+ mtr := &MeteredRoundTripper{next: next, durations: histVec, counter: counterVec, ttfbTimeout: DefaultTTFBTimeout}
r := httptest.NewRequest("GET", "/", nil)
res, err := mtr.RoundTrip(r)
@@ -86,7 +86,7 @@ func TestRoundTripTTFBTimeout(t *testing.T) {
err: nil,
}
- mtr := &meteredRoundTripper{next: next, durations: histVec, counter: counterVec, ttfbTimeout: time.Nanosecond}
+ mtr := &MeteredRoundTripper{next: next, durations: histVec, counter: counterVec, ttfbTimeout: time.Nanosecond}
req, err := http.NewRequest("GET", "https://gitlab.com", nil)
require.NoError(t, err)