Skip to content

Commit 2b69029

Browse files
authored
otelgrpc: Fix stats handlers to honor WithMessageEvents option (#4536)
1 parent f6aeb0d commit 2b69029

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
3232

3333
- The `go.opentelemetry.io/contrib/samplers/jaegerremote` sampler does not panic when the default HTTP round-tripper (`http.DefaultTransport`) is not `*http.Transport`. (#4045)
3434
- The `UnaryServerInterceptor` in `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc` now sets gRPC status code correctly for the `rpc.server.duration` metric. (#4481)
35+
- The `NewClientHandler`, `NewServerHandler` in `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc` now honor `otelgrpc.WithMessageEvents` options. (#4536)
3536

3637
## [1.20.0/0.45.0/0.14.0] - 2023-09-28
3738

instrumentation/google.golang.org/grpc/otelgrpc/stats_handler.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -153,28 +153,32 @@ func (c *config) handleRPC(ctx context.Context, rs stats.RPCStats) {
153153
c.rpcRequestSize.Record(wctx, int64(rs.Length), metric.WithAttributes(metricAttrs...))
154154
}
155155

156-
span.AddEvent("message",
157-
trace.WithAttributes(
158-
semconv.MessageTypeReceived,
159-
semconv.MessageIDKey.Int64(messageId),
160-
semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
161-
semconv.MessageUncompressedSizeKey.Int(rs.Length),
162-
),
163-
)
156+
if c.ReceivedEvent {
157+
span.AddEvent("message",
158+
trace.WithAttributes(
159+
semconv.MessageTypeReceived,
160+
semconv.MessageIDKey.Int64(messageId),
161+
semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
162+
semconv.MessageUncompressedSizeKey.Int(rs.Length),
163+
),
164+
)
165+
}
164166
case *stats.OutPayload:
165167
if gctx != nil {
166168
messageId = atomic.AddInt64(&gctx.messagesSent, 1)
167169
c.rpcResponseSize.Record(wctx, int64(rs.Length), metric.WithAttributes(metricAttrs...))
168170
}
169171

170-
span.AddEvent("message",
171-
trace.WithAttributes(
172-
semconv.MessageTypeSent,
173-
semconv.MessageIDKey.Int64(messageId),
174-
semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
175-
semconv.MessageUncompressedSizeKey.Int(rs.Length),
176-
),
177-
)
172+
if c.SentEvent {
173+
span.AddEvent("message",
174+
trace.WithAttributes(
175+
semconv.MessageTypeSent,
176+
semconv.MessageIDKey.Int64(messageId),
177+
semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
178+
semconv.MessageUncompressedSizeKey.Int(rs.Length),
179+
),
180+
)
181+
}
178182
case *stats.OutTrailer:
179183
case *stats.End:
180184
var rpcStatusAttr attribute.KeyValue

instrumentation/google.golang.org/grpc/otelgrpc/test/grpc_stats_handler_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,18 @@ func TestStatsHandler(t *testing.T) {
5252
err := newGrpcTest(
5353
listener,
5454
[]grpc.DialOption{
55-
grpc.WithStatsHandler(otelgrpc.NewClientHandler(otelgrpc.WithTracerProvider(clientTP), otelgrpc.WithMeterProvider(clientMP))),
55+
grpc.WithStatsHandler(otelgrpc.NewClientHandler(
56+
otelgrpc.WithTracerProvider(clientTP),
57+
otelgrpc.WithMeterProvider(clientMP),
58+
otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents)),
59+
),
5660
},
5761
[]grpc.ServerOption{
58-
grpc.StatsHandler(otelgrpc.NewServerHandler(otelgrpc.WithTracerProvider(serverTP), otelgrpc.WithMeterProvider(serverMP))),
62+
grpc.StatsHandler(otelgrpc.NewServerHandler(
63+
otelgrpc.WithTracerProvider(serverTP),
64+
otelgrpc.WithMeterProvider(serverMP),
65+
otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents, otelgrpc.SentEvents)),
66+
),
5967
},
6068
)
6169
require.NoError(t, err)

0 commit comments

Comments
 (0)