Skip to content

Commit 899af84

Browse files
committed
(feature/all) Extend DialSettings.Validate to support OpenTelemetryOpts
1 parent dad6421 commit 899af84

File tree

4 files changed

+28
-16
lines changed

4 files changed

+28
-16
lines changed

internal/settings.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"time"
1616

1717
"cloud.google.com/go/auth"
18+
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
19+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
1820
"golang.org/x/oauth2"
1921
"golang.org/x/oauth2/google"
2022
"google.golang.org/api/internal/impersonate"
@@ -78,7 +80,9 @@ type DialSettings struct {
7880
EnableAsyncRefreshDryRun func()
7981

8082
// otelhttp/otelgrpc options
81-
OpenTelemetryOpts []any
83+
OpenTelemetryOpts []any
84+
OpenTelemetryOptsGRPC []otelgrpc.Option
85+
OpenTelemetryOptsHTTP []otelhttp.Option
8286
}
8387

8488
// GetScopes returns the user-provided scopes, if set, or else falls back to the
@@ -181,6 +185,16 @@ func (ds *DialSettings) Validate() error {
181185
if ds.ImpersonationConfig != nil && len(ds.ImpersonationConfig.Scopes) == 0 && len(ds.Scopes) == 0 {
182186
return errors.New("WithImpersonatedCredentials requires scopes being provided")
183187
}
188+
for _, opt := range ds.OpenTelemetryOpts {
189+
switch o := opt.(type) {
190+
case otelhttp.Option:
191+
ds.OpenTelemetryOptsHTTP = append(ds.OpenTelemetryOptsHTTP, o)
192+
case otelgrpc.Option:
193+
ds.OpenTelemetryOptsGRPC = append(ds.OpenTelemetryOptsGRPC, o.(otelgrpc.Option))
194+
default:
195+
return errors.New("WithOpenTelemetryOpts options must be of type otelhttp.Option or otelgrpc.Option")
196+
}
197+
}
184198
return nil
185199
}
186200

internal/settings_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import (
1212

1313
"google.golang.org/api/internal/impersonate"
1414
"google.golang.org/grpc"
15+
"google.golang.org/grpc/stats"
1516

17+
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
18+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
1619
"golang.org/x/oauth2"
1720
"golang.org/x/oauth2/google"
1821
)
@@ -38,6 +41,13 @@ func TestSettingsValidate(t *testing.T) {
3841
{ClientCertSource: dummyGetClientCertificate},
3942
{ImpersonationConfig: &impersonate.Config{Scopes: []string{"x"}}},
4043
{ImpersonationConfig: &impersonate.Config{}, Scopes: []string{"x"}},
44+
{OpenTelemetryOpts: []any{
45+
otelgrpc.WithFilter(func(ri *stats.RPCTagInfo) bool {
46+
return true
47+
}),
48+
otelhttp.WithFilter(func(ri *http.Request) bool {
49+
return true
50+
})}},
4151
} {
4252
err := ds.Validate()
4353
if err != nil {
@@ -67,6 +77,7 @@ func TestSettingsValidate(t *testing.T) {
6777
{ClientCertSource: dummyGetClientCertificate, GRPCDialOpts: []grpc.DialOption{grpc.WithInsecure()}},
6878
{ClientCertSource: dummyGetClientCertificate, GRPCConnPoolSize: 1},
6979
{ImpersonationConfig: &impersonate.Config{}},
80+
{OpenTelemetryOpts: []any{"string"}},
7081
} {
7182
err := ds.Validate()
7283
if err == nil {

transport/grpc/dial.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -400,12 +400,7 @@ func addOpenTelemetryStatsHandler(opts []grpc.DialOption, settings *internal.Dia
400400
if settings.TelemetryDisabled {
401401
return opts
402402
}
403-
otelOpts := []otelgrpc.Option{}
404-
for _, opt := range settings.OpenTelemetryOpts {
405-
if opt, ok := opt.(otelgrpc.Option); ok {
406-
otelOpts = append(otelOpts, opt)
407-
}
408-
}
403+
otelOpts := settings.OpenTelemetryOptsGRPC
409404
return append(opts, grpc.WithStatsHandler(otelGRPCStatsHandler(otelOpts)))
410405
}
411406

transport/http/dial.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -306,15 +306,7 @@ func addOpenTelemetryTransport(trans http.RoundTripper, settings *internal.DialS
306306
if settings.TelemetryDisabled {
307307
return trans
308308
}
309-
310-
opts := []otelhttp.Option{}
311-
for _, opt := range settings.OpenTelemetryOpts {
312-
if opt, ok := opt.(otelhttp.Option); ok {
313-
opts = append(opts, opt)
314-
}
315-
}
316-
317-
return otelhttp.NewTransport(trans, opts...)
309+
return otelhttp.NewTransport(trans, settings.OpenTelemetryOptsHTTP...)
318310
}
319311

320312
// clonedTransport returns the given RoundTripper as a cloned *http.Transport.

0 commit comments

Comments
 (0)