io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of opentelemetry-grpc-1.6 Show documentation
Show all versions of opentelemetry-grpc-1.6 Show documentation
Instrumentation of Java libraries using OpenTelemetry.
The newest version!
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.grpc.v1_6;
import io.grpc.ClientInterceptor;
import io.grpc.ServerInterceptor;
import io.grpc.Status;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
/** Entrypoint for instrumenting gRPC servers or clients. */
public final class GrpcTelemetry {
/** Returns a new {@link GrpcTelemetry} configured with the given {@link OpenTelemetry}. */
public static GrpcTelemetry create(OpenTelemetry openTelemetry) {
return builder(openTelemetry).build();
}
/** Returns a new {@link GrpcTelemetryBuilder} configured with the given {@link OpenTelemetry}. */
public static GrpcTelemetryBuilder builder(OpenTelemetry openTelemetry) {
return new GrpcTelemetryBuilder(openTelemetry);
}
private final Instrumenter serverInstrumenter;
private final Instrumenter clientInstrumenter;
private final ContextPropagators propagators;
private final boolean captureExperimentalSpanAttributes;
GrpcTelemetry(
Instrumenter serverInstrumenter,
Instrumenter clientInstrumenter,
ContextPropagators propagators,
boolean captureExperimentalSpanAttributes) {
this.serverInstrumenter = serverInstrumenter;
this.clientInstrumenter = clientInstrumenter;
this.propagators = propagators;
this.captureExperimentalSpanAttributes = captureExperimentalSpanAttributes;
}
/**
* Returns a new {@link ClientInterceptor} for use with methods like {@link
* io.grpc.ManagedChannelBuilder#intercept(ClientInterceptor...)}.
*/
public ClientInterceptor newClientInterceptor() {
return new TracingClientInterceptor(clientInstrumenter, propagators);
}
/**
* Returns a new {@link ServerInterceptor} for use with methods like {@link
* io.grpc.ServerBuilder#intercept(ServerInterceptor)}.
*/
public ServerInterceptor newServerInterceptor() {
return new TracingServerInterceptor(serverInstrumenter, captureExperimentalSpanAttributes);
}
}