Skip to content

Commit c5dab4a

Browse files
committed
refactor(o11y): consolidate metrics recorder validation
Extracted the metadata validation into a static `create` method inside `GoldenSignalsMetricsRecorder`. This allows the recorder to own the validation logic while allowing `GoldenSignalsMetricsTracerFactory` to cleanly bail out and return a `BaseApiTracerFactory` if telemetry cannot be correctly constructed, maximizing performance by avoiding any tracer overhead without duplicating checks.
1 parent 77287da commit c5dab4a

File tree

4 files changed

+21
-18
lines changed

4 files changed

+21
-18
lines changed

sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/GoldenSignalsMetricsRecorder.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,23 @@ class GoldenSignalsMetricsRecorder {
5151
Arrays.asList(
5252
0.0, 0.0001, 0.0005, 0.0010, 0.005, 0.010, 0.050, 0.100, 0.5, 1.0, 5.0, 10.0, 60.0, 300.0,
5353
900.0, 3600.0);
54-
@javax.annotation.Nullable final DoubleHistogram clientRequestDurationRecorder;
54+
final DoubleHistogram clientRequestDurationRecorder;
5555

56-
GoldenSignalsMetricsRecorder(
56+
@javax.annotation.Nullable
57+
static GoldenSignalsMetricsRecorder create(
5758
OpenTelemetry openTelemetry, com.google.api.gax.rpc.LibraryMetadata libraryMetadata) {
58-
String libraryName =
59-
libraryMetadata != null && libraryMetadata.artifactName() != null ? libraryMetadata.artifactName() : "";
60-
if (libraryName.isEmpty()) {
61-
this.clientRequestDurationRecorder = null;
62-
return;
59+
if (libraryMetadata == null || com.google.common.base.Strings.isNullOrEmpty(libraryMetadata.artifactName())) {
60+
return null;
6361
}
62+
return new GoldenSignalsMetricsRecorder(openTelemetry, libraryMetadata);
63+
}
64+
65+
private GoldenSignalsMetricsRecorder(
66+
OpenTelemetry openTelemetry, com.google.api.gax.rpc.LibraryMetadata libraryMetadata) {
6467
io.opentelemetry.api.metrics.MeterBuilder meterBuilder =
65-
openTelemetry.meterBuilder(libraryName);
68+
openTelemetry.meterBuilder(libraryMetadata.artifactName());
6669
String libraryVersion = libraryMetadata.version();
67-
if (libraryVersion != null && !libraryVersion.isEmpty()) {
70+
if (!com.google.common.base.Strings.isNullOrEmpty(libraryVersion)) {
6871
meterBuilder.setInstrumentationVersion(libraryVersion);
6972
}
7073
Meter meter = meterBuilder.build();
@@ -79,9 +82,7 @@ class GoldenSignalsMetricsRecorder {
7982
}
8083

8184
void recordOperationLatency(double operationLatency, Map<String, Object> attributes) {
82-
if (clientRequestDurationRecorder != null) {
83-
clientRequestDurationRecorder.record(
84-
operationLatency, ObservabilityUtils.toOtelAttributes(attributes));
85-
}
85+
clientRequestDurationRecorder.record(
86+
operationLatency, ObservabilityUtils.toOtelAttributes(attributes));
8687
}
8788
}

sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/GoldenSignalsMetricsTracerFactory.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,12 @@ public ApiTracerFactory withContext(ApiTracerContext context) {
7979
if (context == null) {
8080
return new BaseApiTracerFactory();
8181
}
82-
this.clientLevelTracerContext = context;
8382
this.metricsRecorder =
84-
new GoldenSignalsMetricsRecorder(
85-
openTelemetry, clientLevelTracerContext.libraryMetadata());
83+
GoldenSignalsMetricsRecorder.create(openTelemetry, context.libraryMetadata());
84+
if (this.metricsRecorder == null) {
85+
return new BaseApiTracerFactory();
86+
}
87+
this.clientLevelTracerContext = context;
8688
return this;
8789
}
8890
}

sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/GoldenSignalsMetricsRecorderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ void setUp() {
6363
OpenTelemetry openTelemetry =
6464
OpenTelemetrySdk.builder().setMeterProvider(meterProvider).build();
6565
recorder =
66-
new GoldenSignalsMetricsRecorder(
66+
GoldenSignalsMetricsRecorder.create(
6767
openTelemetry,
6868
com.google.api.gax.rpc.LibraryMetadata.newBuilder()
6969
.setArtifactName(ARTIFACT_NAME)

sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/GoldenSignalsMetricsTracerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ void setUp() {
6868
ticker = new FakeTicker();
6969
tracer =
7070
new GoldenSignalsMetricsTracer(
71-
new GoldenSignalsMetricsRecorder(
71+
GoldenSignalsMetricsRecorder.create(
7272
openTelemetry,
7373
com.google.api.gax.rpc.LibraryMetadata.newBuilder()
7474
.setArtifactName(ARTIFACT_NAME)

0 commit comments

Comments
 (0)