Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public enum Transport {
* @return the server port, or {@code null} if not set
*/
@Nullable
public abstract Integer serverPort();
abstract Integer serverPort();

/**
* Returns the library metadata associated with the RPC.
Expand Down Expand Up @@ -135,7 +135,7 @@ String rpcSystemName() {
* @return the operation type, or {@code null} if not set
*/
@Nullable
public abstract OperationType operationType();
abstract OperationType operationType();

/**
* Returns the HTTP method used for the RPC, in case the RPC is an HttpJson method.
Expand All @@ -159,11 +159,11 @@ String rpcSystemName() {

/** The service name of a client (e.g. "bigtable", "spanner"). */
@Nullable
public abstract String serviceName();
abstract String serviceName();

/** The url domain of the request (e.g. "pubsub.googleapis.com"). */
@Nullable
public abstract String urlDomain();
abstract String urlDomain();

@Nullable
protected abstract Supplier<String> destinationResourceIdSupplier();
Expand All @@ -173,7 +173,7 @@ String rpcSystemName() {
* //pubsub.googleapis.com/projects/p/locations/l/topics/t).
*/
@Nullable
public String destinationResourceId() {
String destinationResourceId() {
Supplier<String> supplier = destinationResourceIdSupplier();
if (supplier == null) {
return null;
Expand Down Expand Up @@ -209,7 +209,7 @@ <RequestT> ApiTracerContext withResourceNameExtractor(
/**
* @return a map of attributes to be included in attempt-level spans
*/
public Map<String, Object> getAttemptAttributes() {
Map<String, Object> getAttemptAttributes() {
Map<String, Object> attributes = new HashMap<>();
if (!Strings.isNullOrEmpty(serverAddress())) {
attributes.put(ObservabilityAttributes.SERVER_ADDRESS_ATTRIBUTE, serverAddress());
Expand Down Expand Up @@ -322,15 +322,15 @@ ApiTracerContext merge(ApiTracerContext other) {
return builder.build();
}

public static ApiTracerContext empty() {
static ApiTracerContext empty() {
return newBuilder().setLibraryMetadata(LibraryMetadata.empty()).build();
}

public static Builder newBuilder() {
return new AutoValue_ApiTracerContext.Builder();
}

public abstract Builder toBuilder();
abstract Builder toBuilder();

@AutoValue.Builder
public abstract static class Builder {
Expand All @@ -342,7 +342,7 @@ public abstract static class Builder {

public abstract Builder setTransport(@Nullable Transport transport);

public abstract Builder setOperationType(@Nullable OperationType operationType);
abstract Builder setOperationType(@Nullable OperationType operationType);

public abstract Builder setServerPort(@Nullable Integer serverPort);

Expand All @@ -354,7 +354,7 @@ public abstract static class Builder {

public abstract Builder setUrlDomain(@Nullable String urlDomain);

public abstract Builder setDestinationResourceIdSupplier(
abstract Builder setDestinationResourceIdSupplier(
@Nullable Supplier<String> destinationResourceIdSupplier);

public abstract ApiTracerContext build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,15 @@ public OpenTelemetryMetricsFactory(OpenTelemetry openTelemetry) {
this.clientLevelTracerContext = ApiTracerContext.empty();
}

private OpenTelemetryMetricsFactory(
ApiTracerContext clientLevelTracerContext,
OpenTelemetry openTelemetry,
GoldenSignalsMetricsRecorder metricsRecorder) {
this.clientLevelTracerContext = clientLevelTracerContext;
this.openTelemetry = openTelemetry;
this.metricsRecorder = metricsRecorder;
}

@Override
public ApiTracer newTracer(ApiTracer parent, SpanName spanName, OperationType operationType) {
if (metricsRecorder == null) {
Expand Down Expand Up @@ -83,12 +92,11 @@ public ApiTracerFactory withContext(ApiTracerContext context) {
if (context == null) {
return new BaseApiTracerFactory();
}
this.metricsRecorder =
GoldenSignalsMetricsRecorder.create(openTelemetry, context.libraryMetadata());
if (this.metricsRecorder == null) {
metricsRecorder = GoldenSignalsMetricsRecorder.create(openTelemetry, context.libraryMetadata());
if (metricsRecorder == null) {
return new BaseApiTracerFactory();
}
this.clientLevelTracerContext = context;
return this;
return new OpenTelemetryMetricsFactory(
clientLevelTracerContext.merge(context), openTelemetry, metricsRecorder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
package com.google.api.gax.tracing;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.*;

import com.google.api.gax.rpc.LibraryMetadata;
Expand All @@ -52,9 +51,9 @@ void newTracerWithSpanName_shouldCreateTracer_ifMetricsRecorderIsNotNull() {
LibraryMetadata metadata =
LibraryMetadata.newBuilder().setArtifactName("gax-java").setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();
tracerFactory.withContext(context);
ApiTracerFactory factoryWithContext = tracerFactory.withContext(context);
ApiTracer actual =
tracerFactory.newTracer(
factoryWithContext.newTracer(
mock(ApiTracer.class), mock(SpanName.class), ApiTracerFactory.OperationType.Unary);
assertThat(actual).isInstanceOf(OpenTelemetryMetricsTracer.class);
}
Expand All @@ -69,17 +68,17 @@ void newTracerWithSpanName_shouldCreateBaseTracer_ifMetricsRecorderIsNull() {

@Test
void newTracerWithApiTracerContext_shouldMergeApiTracerContext() {
ApiTracerContext clientLevelTracerContext = mock(ApiTracerContext.class, RETURNS_DEEP_STUBS);
ApiTracerContext methodLevelTracerContext = mock(ApiTracerContext.class);
when(clientLevelTracerContext.libraryMetadata().artifactName()).thenReturn("gax-java");
when(clientLevelTracerContext.libraryMetadata().isEmpty()).thenReturn(false);
when(clientLevelTracerContext.merge(methodLevelTracerContext))
.thenReturn(clientLevelTracerContext);
LibraryMetadata metadata =
LibraryMetadata.newBuilder().setArtifactName("gax-java").setVersion("1.0").build();
ApiTracerContext clientLevelTracerContext =
ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();
ApiTracerContext methodLevelTracerContext =
ApiTracerContext.newBuilder().setLibraryMetadata(LibraryMetadata.empty()).build();

tracerFactory.withContext(clientLevelTracerContext);
ApiTracer actual = tracerFactory.newTracer(mock(ApiTracer.class), methodLevelTracerContext);
ApiTracerFactory factoryWithContext = tracerFactory.withContext(clientLevelTracerContext);
ApiTracer actual =
factoryWithContext.newTracer(mock(ApiTracer.class), methodLevelTracerContext);

verify(clientLevelTracerContext).merge(methodLevelTracerContext);
assertThat(actual).isInstanceOf(OpenTelemetryMetricsTracer.class);
}

Expand Down Expand Up @@ -140,8 +139,8 @@ void testNeedsContext_returnsFalseWhenContextIsNotEmpty() {
LibraryMetadata.newBuilder().setArtifactName("gax-java").setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();

tracerFactory.withContext(context);
ApiTracerFactory factoryWithContext = tracerFactory.withContext(context);

assertThat(tracerFactory.needsContext()).isFalse();
assertThat(factoryWithContext.needsContext()).isFalse();
}
}
Loading