void recordFinishedCall() {
            if (attemptsPerCall.get() == 0) {
                ClientTracer tracer = new ClientTracer(this, tracerModule, null, fullMethodName,
                        metricsClientMeters);
                tracer.attemptNanos = attemptStopwatch.elapsed(TimeUnit.NANOSECONDS);
                tracer.statusCode = status.getCode();
                tracer.recordFinishedAttempt();
            } else if (inboundMetricTracer != null) {
                // activeStreams has been decremented to 0 by attemptEnded(),
                // so inboundMetricTracer.statusCode is guaranteed to be assigned already.
                inboundMetricTracer.recordFinishedAttempt();
            }
            callLatencyNanos = clientCallStopWatch.elapsed(TimeUnit.NANOSECONDS);
            Tags clientCallMetricTags =
                    Tags.of("grpc.method", this.fullMethodName,
                            "grpc.status", status.getCode().toString(),
                            INSTRUMENTATION_SOURCE_TAG_KEY, Constants.LIBRARY_NAME,
                            INSTRUMENTATION_VERSION_TAG_KEY, Constants.VERSION);
            this.metricsClientMeters.getClientCallDuration()
                    .withTags(clientCallMetricTags)
                    .record(callLatencyNanos, TimeUnit.NANOSECONDS);
        }
Provides factories for {@link io.grpc.StreamTracer} that records metrics.

<p>
On the client-side, a factory is created for each call, and the factory creates a stream tracer for each attempt.

<b>Note:</b> This class uses experimental grpc-java-API features.
grpc-client-spring-boot-starter/src/main/java/net/devh/boot/grpc/client/metrics/MetricsClientStreamTracers.java