From a21ce0dba037d6faed1b2a0dd1e03dfb8ab125c9 Mon Sep 17 00:00:00 2001 From: Brad Moylan Date: Thu, 16 Jan 2025 10:37:14 -0800 Subject: [PATCH 1/3] feature: Add client.connection.dialer timer to measure DialContext() --- .../httpclient/client_builder.go | 2 +- conjure-go-client/httpclient/metrics.go | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/conjure-go-client/httpclient/client_builder.go b/conjure-go-client/httpclient/client_builder.go index 1bf8461d..933c7890 100644 --- a/conjure-go-client/httpclient/client_builder.go +++ b/conjure-go-client/httpclient/client_builder.go @@ -108,7 +108,7 @@ func (b *httpClientBuilder) Build(ctx context.Context, params ...HTTPClientParam tlsProvider = refreshableProvider } - dialer := refreshingclient.NewRefreshableDialer(ctx, b.DialerParams) + dialer := newMetricsDialer(refreshingclient.NewRefreshableDialer(ctx, b.DialerParams), b.ServiceName, b.DisableMetrics) transport := refreshingclient.NewRefreshableTransport(ctx, b.TransportParams, tlsProvider, dialer) transport = wrapTransport(transport, newMetricsMiddleware(b.ServiceName, b.MetricsTagProviders, b.DisableMetrics)) transport = wrapTransport(transport, newTraceMiddleware(b.ServiceName, b.DisableRequestSpan, b.DisableTraceHeaders)) diff --git a/conjure-go-client/httpclient/metrics.go b/conjure-go-client/httpclient/metrics.go index eb1cf1a0..02541c5c 100644 --- a/conjure-go-client/httpclient/metrics.go +++ b/conjure-go-client/httpclient/metrics.go @@ -23,6 +23,7 @@ import ( "net/http/httptrace" "time" + "github.com/palantir/conjure-go-runtime/v2/conjure-go-client/httpclient/internal/refreshingclient" "github.com/palantir/pkg/metrics" "github.com/palantir/pkg/refreshable" werror "github.com/palantir/witchcraft-go-error" @@ -30,6 +31,7 @@ import ( const ( MetricTagServiceName = "service-name" + metricClientDialer = "client.connection.dialer" metricClientResponse = "client.response" metricTagFamily = "family" metricTagMethod = "method" @@ -78,6 +80,25 @@ func (s StaticTagsProvider) Tags(_ *http.Request, _ *http.Response, _ error) met return metrics.Tags(s) } +type metricsDialer struct { + Dialer refreshingclient.ContextDialer + ServiceName refreshable.String + Disabled refreshable.Bool +} + +func newMetricsDialer(dialer refreshingclient.ContextDialer, serviceName refreshable.String, disabled refreshable.Bool) refreshingclient.ContextDialer { + return &metricsDialer{Dialer: dialer, ServiceName: serviceName, Disabled: disabled} +} + +func (d *metricsDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { + defer func(startTime time.Time) { + serviceNameTag := metrics.NewTagWithFallbackValue(MetricTagServiceName, d.ServiceName.CurrentString(), "unknown") + metrics.FromContext(ctx).Timer(metricClientDialer, serviceNameTag).UpdateSince(startTime) + }(time.Now()) + + return d.Dialer.DialContext(ctx, network, address) +} + // MetricsMiddleware updates the "client.response" timer metric on every request. // By default, metrics are tagged with 'service-name', 'method', and 'family' (of the // status code). This metric name and tag set matches http-remoting's DefaultHostMetrics: From 032a84acdc70467ab8727b10a3359812889536bd Mon Sep 17 00:00:00 2001 From: svc-changelog Date: Thu, 16 Jan 2025 18:37:58 +0000 Subject: [PATCH 2/3] Add generated changelog entries --- changelog/@unreleased/pr-747.v2.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelog/@unreleased/pr-747.v2.yml diff --git a/changelog/@unreleased/pr-747.v2.yml b/changelog/@unreleased/pr-747.v2.yml new file mode 100644 index 00000000..a1b2877f --- /dev/null +++ b/changelog/@unreleased/pr-747.v2.yml @@ -0,0 +1,5 @@ +type: feature +feature: + description: Add client.connection.dialer timer to measure DialContext() + links: + - https://github.com/palantir/conjure-go-runtime/pull/747 From eb290a3f6e3bd7aa4d56fbb512b743f1ac10f159 Mon Sep 17 00:00:00 2001 From: Brad Moylan Date: Thu, 16 Jan 2025 10:40:37 -0800 Subject: [PATCH 3/3] disabled --- conjure-go-client/httpclient/metrics.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/conjure-go-client/httpclient/metrics.go b/conjure-go-client/httpclient/metrics.go index 02541c5c..ea6aa47a 100644 --- a/conjure-go-client/httpclient/metrics.go +++ b/conjure-go-client/httpclient/metrics.go @@ -91,10 +91,12 @@ func newMetricsDialer(dialer refreshingclient.ContextDialer, serviceName refresh } func (d *metricsDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) { - defer func(startTime time.Time) { - serviceNameTag := metrics.NewTagWithFallbackValue(MetricTagServiceName, d.ServiceName.CurrentString(), "unknown") - metrics.FromContext(ctx).Timer(metricClientDialer, serviceNameTag).UpdateSince(startTime) - }(time.Now()) + if !d.Disabled.CurrentBool() { + defer func(startTime time.Time) { + serviceNameTag := metrics.NewTagWithFallbackValue(MetricTagServiceName, d.ServiceName.CurrentString(), "unknown") + metrics.FromContext(ctx).Timer(metricClientDialer, serviceNameTag).UpdateSince(startTime) + }(time.Now()) + } return d.Dialer.DialContext(ctx, network, address) }