(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption)
| 113 | } |
| 114 | |
| 115 | func (h *clientMetricsHandler) streamInterceptor(ctx context.Context, desc *grpc.StreamDesc, cc *grpc.ClientConn, method string, streamer grpc.Streamer, opts ...grpc.CallOption) (grpc.ClientStream, error) { |
| 116 | ctx, ci := getOrCreateCallInfo(ctx, cc, method, opts...) |
| 117 | |
| 118 | if h.options.MetricsOptions.pluginOption != nil { |
| 119 | md := h.options.MetricsOptions.pluginOption.GetMetadata() |
| 120 | for k, vs := range md { |
| 121 | for _, v := range vs { |
| 122 | ctx = metadata.AppendToOutgoingContext(ctx, k, v) |
| 123 | } |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | startTime := time.Now() |
| 128 | callback := func(err error) { |
| 129 | h.perCallMetrics(ctx, err, startTime, ci) |
| 130 | } |
| 131 | opts = append([]grpc.CallOption{grpc.OnFinish(callback)}, opts...) |
| 132 | return streamer(ctx, desc, cc, method, opts...) |
| 133 | } |
| 134 | |
| 135 | // perCallMetrics records per call metrics for both unary and stream calls. |
| 136 | func (h *clientMetricsHandler) perCallMetrics(ctx context.Context, err error, startTime time.Time, ci *callInfo) { |
nothing calls this directly
no test coverage detected