Skip to content
This repository was archived by the owner on Dec 8, 2022. It is now read-only.

Commit 24ef262

Browse files
committed
use new grpc metadata api
1 parent b43ab4f commit 24ef262

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

grpc.go

+27-19
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
"context"
1212

13-
"github.com/opentracing/opentracing-go"
13+
opentracing "github.com/opentracing/opentracing-go"
1414
"github.com/opentracing/opentracing-go/ext"
1515
"google.golang.org/grpc"
1616
"google.golang.org/grpc/metadata"
@@ -31,12 +31,13 @@ func tracingUnaryClientInterceptor(fr FlightRecorder, tracer opentracing.Tracer)
3131
invoker grpc.UnaryInvoker,
3232
opts ...grpc.CallOption,
3333
) error {
34-
fs, ctx, done := fr.WithNewSpan(ctx, formatRPCName(method))
34+
obsName := formatRPCName(method)
35+
fs, ctx, done := fr.WithNewSpan(ctx, obsName)
3536
defer done()
3637
span := fs.TraceSpan()
3738
ext.SpanKind.Set(span, ext.SpanKindRPCClientEnum)
3839

39-
md, ok := metadata.FromContext(ctx)
40+
md, ok := metadata.FromOutgoingContext(ctx)
4041
if !ok {
4142
md = metadata.New(nil)
4243
} else {
@@ -47,9 +48,11 @@ func tracingUnaryClientInterceptor(fr FlightRecorder, tracer opentracing.Tracer)
4748
fs.Warn("tracer_inject", "error injecting trace metadata", Vals{}.WithError(err))
4849
}
4950

50-
ctx = metadata.NewContext(ctx, md)
51+
ctx = metadata.NewOutgoingContext(ctx, md)
5152

52-
if err := invoker(ctx, method, req, reply, cc, opts...); err != nil {
53+
err := invoker(ctx, method, req, reply, cc, opts...)
54+
fs.Incr(fmt.Sprintf("grpc_client.%s.%s", obsName, grpc.Code(err).String()))
55+
if err != nil {
5356
if ctx.Err() == nil {
5457
fs.Trace(fmt.Sprintf("error in gRPC %s", method), Vals{}.WithError(err))
5558
ext.Error.Set(span, true)
@@ -77,7 +80,7 @@ func tracingStreamClientInterceptor(fr FlightRecorder, tracer opentracing.Tracer
7780
span := fs.TraceSpan()
7881
ext.SpanKind.Set(span, ext.SpanKindRPCClientEnum)
7982

80-
md, ok := metadata.FromContext(ctx)
83+
md, ok := metadata.FromOutgoingContext(ctx)
8184
if !ok {
8285
md = metadata.New(nil)
8386
} else {
@@ -88,9 +91,12 @@ func tracingStreamClientInterceptor(fr FlightRecorder, tracer opentracing.Tracer
8891
fs.Warn("tracer_inject", "error injecting trace metadata", Vals{}.WithError(err))
8992
}
9093

91-
ctx = metadata.NewContext(ctx, md)
94+
ctx = metadata.NewOutgoingContext(ctx, md)
9295

9396
cs, err := streamer(ctx, desc, cc, method, opts...)
97+
98+
fs.Incr(fmt.Sprintf("grpc_client.%s.%s", obsName, grpc.Code(err).String()))
99+
94100
if err != nil {
95101
if ctx.Err() == nil {
96102
fs.Trace(fmt.Sprintf("error in gRPC %s", method), Vals{}.WithError(err))
@@ -100,7 +106,7 @@ func tracingStreamClientInterceptor(fr FlightRecorder, tracer opentracing.Tracer
100106
}
101107
}
102108

103-
return &clientStreamInterceptor{cs, fr.ScopeName(obsName).WithSpan(ctx), span, done, 0, 0}, err
109+
return &clientStreamInterceptor{cs, span, done, 0, 0}, err
104110
}
105111
}
106112

@@ -111,13 +117,15 @@ func tracingUnaryServerInterceptor(fr FlightRecorder, tracer opentracing.Tracer)
111117
info *grpc.UnaryServerInfo,
112118
handler grpc.UnaryHandler,
113119
) (resp interface{}, err error) {
114-
md, ok := metadata.FromContext(ctx)
120+
obsName := formatRPCName(info.FullMethod)
121+
md, ok := metadata.FromIncomingContext(ctx)
115122
if !ok {
116123
md = metadata.New(nil)
117124
}
125+
118126
spanCtx, err := tracer.Extract(opentracing.TextMap, grpcTraceMD(md))
119127

120-
fs, ctx, done := fr.WithNewSpanContext(ctx, formatRPCName(info.FullMethod), spanCtx)
128+
fs, ctx, done := fr.WithNewSpanContext(ctx, obsName, spanCtx)
121129
defer done()
122130
span := fs.TraceSpan()
123131
ext.SpanKind.Set(span, ext.SpanKindRPCServerEnum)
@@ -129,6 +137,9 @@ func tracingUnaryServerInterceptor(fr FlightRecorder, tracer opentracing.Tracer)
129137

130138
ctx = opentracing.ContextWithSpan(ctx, span)
131139
resp, err = handler(ctx, req)
140+
141+
fs.Incr(fmt.Sprintf("grpc_server.%s.%s", obsName, grpc.Code(err).String()))
142+
132143
if err != nil {
133144
if ctx.Err() == nil {
134145
fs.Trace(fmt.Sprintf("error in gRPC %s", info.FullMethod), Vals{}.WithError(err))
@@ -151,7 +162,7 @@ func tracingStreamServerInterceptor(fr FlightRecorder, tracer opentracing.Tracer
151162
handler grpc.StreamHandler,
152163
) error {
153164
ctx := ss.Context()
154-
md, ok := metadata.FromContext(ctx)
165+
md, ok := metadata.FromIncomingContext(ctx)
155166
if !ok {
156167
md = metadata.New(nil)
157168
}
@@ -168,9 +179,12 @@ func tracingStreamServerInterceptor(fr FlightRecorder, tracer opentracing.Tracer
168179
}
169180

170181
ctx = opentracing.ContextWithSpan(ctx, span)
171-
ssi := &serverStreamInterceptor{ss, fr.ScopeName(obsName).WithSpan(ctx), span, done, 0, 0, ctx}
182+
ssi := &serverStreamInterceptor{ss, span, done, 0, 0, ctx}
172183
defer ssi.finish()
173-
if err := handler(srv, ssi); err != nil {
184+
185+
err = handler(srv, ssi)
186+
fs.Incr(fmt.Sprintf("grpc_server.%s.%s", obsName, grpc.Code(err).String()))
187+
if err != nil {
174188
if ctx.Err() == nil {
175189
fs.Trace(fmt.Sprintf("error in gRPC %s", info.FullMethod), Vals{}.WithError(err))
176190
ext.Error.Set(span, true)
@@ -186,7 +200,6 @@ func tracingStreamServerInterceptor(fr FlightRecorder, tracer opentracing.Tracer
186200

187201
type clientStreamInterceptor struct {
188202
cs grpc.ClientStream
189-
fs FlightSpan
190203
span opentracing.Span
191204
done func()
192205
inCount, outCount int
@@ -209,7 +222,6 @@ func (csi *clientStreamInterceptor) Context() context.Context {
209222
}
210223

211224
func (csi *clientStreamInterceptor) SendMsg(m interface{}) error {
212-
csi.fs.Incr("stream_sent")
213225
csi.outCount++
214226
return csi.cs.SendMsg(m)
215227
}
@@ -223,15 +235,13 @@ func (csi *clientStreamInterceptor) RecvMsg(m interface{}) error {
223235
return err
224236
}
225237

226-
csi.fs.Incr("stream_received")
227238
csi.inCount++
228239

229240
return err
230241
}
231242

232243
type serverStreamInterceptor struct {
233244
ss grpc.ServerStream
234-
fs FlightSpan
235245
span opentracing.Span
236246
done func()
237247
inCount, outCount int
@@ -255,13 +265,11 @@ func (ssi *serverStreamInterceptor) Context() context.Context {
255265
}
256266

257267
func (ssi *serverStreamInterceptor) SendMsg(m interface{}) error {
258-
ssi.fs.Incr("stream_sent")
259268
ssi.outCount++
260269
return ssi.ss.SendMsg(m)
261270
}
262271

263272
func (ssi *serverStreamInterceptor) RecvMsg(m interface{}) error {
264-
ssi.fs.Incr("stream_received")
265273
ssi.inCount++
266274
return ssi.ss.RecvMsg(m)
267275
}

0 commit comments

Comments
 (0)