in pkg/rules/grpc/grpc_config.go [50:119]
func (c *grpcOtelConfig) handleRPC(ctx context.Context, rs stats.RPCStats, isServer bool) { // nolint: revive // isServer is not a control flag.
span := trace.SpanFromContext(ctx)
if span == nil {
return
}
var (
messageId int64
)
gctx, _ := ctx.Value(gRPCContextKey{}).(*gRPCContext)
switch rs := rs.(type) {
case *stats.Begin:
case *stats.InPayload:
if c.ReceivedEvent {
span.AddEvent("message",
trace.WithAttributes(
semconv.MessageTypeReceived,
semconv.MessageIDKey.Int64(messageId),
semconv.MessageUncompressedSizeKey.Int(rs.Length),
),
)
}
case *stats.OutPayload:
if c.SentEvent {
span.AddEvent("message",
trace.WithAttributes(
semconv.MessageTypeSent,
semconv.MessageIDKey.Int64(messageId),
//semconv.MessageCompressedSizeKey.Int(rs.CompressedLength),
semconv.MessageUncompressedSizeKey.Int(rs.Length),
),
)
}
case *stats.OutTrailer:
case *stats.End:
if rs.Error != nil {
s, _ := status.FromError(rs.Error)
if isServer {
grpcServerInstrument.End(ctx, grpcRequest{}, grpcResponse{
statusCode: int(s.Code()),
}, rs.Error)
} else {
grpcClientInstrument.End(ctx, grpcRequest{}, grpcResponse{
statusCode: int(s.Code()),
}, rs.Error)
}
} else {
methodName := ""
if gctx != nil {
methodName = gctx.methodName
}
if isServer {
grpcServerInstrument.End(ctx, grpcRequest{
methodName: methodName,
}, grpcResponse{
statusCode: 200,
}, nil)
} else {
grpcClientInstrument.End(ctx, grpcRequest{
methodName: methodName,
}, grpcResponse{
statusCode: 200,
}, nil)
}
}
default:
return
}
}