Skip to content
This repository was archived by the owner on May 8, 2026. It is now read-only.

Commit a915fb7

Browse files
chore: internalize converters in the metrics exporter (#2804)
Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: - [ ] Make sure to open an issue as a [bug/issue](https://togithub.com/googleapis/java-bigtable/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea - [ ] Ensure the tests and linter pass - [ ] Code coverage does not decrease (if any source code was changed) - [ ] Appropriate docs were updated (if necessary) - [ ] Rollback plan is reviewed and LGTMed - [ ] All new data plane features have a completed end to end testing plan Fixes #<issue_number_goes_here> ☕️ If you write sample code, please follow the [samples format]( https://togithub.com/GoogleCloudPlatform/java-docs-samples/blob/main/SAMPLE_FORMAT.md).
1 parent 5de9d30 commit a915fb7

4 files changed

Lines changed: 23 additions & 29 deletions

File tree

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableClientContext.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,7 @@ public static BigtableClientContext create(
124124
if (settings.areInternalMetricsEnabled()) {
125125
builtinOtel =
126126
Util.createBuiltinOtel(
127-
InstanceName.of(settings.getProjectId(), settings.getInstanceId()),
128-
settings.getAppProfileId(),
127+
clientInfo,
129128
credentials,
130129
settings.getMetricsEndpoint(),
131130
universeDomain,

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableCloudMonitoringExporter.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,13 @@
3939
import com.google.api.gax.core.NoCredentialsProvider;
4040
import com.google.api.gax.rpc.PermissionDeniedException;
4141
import com.google.auth.Credentials;
42+
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.ClientInfo;
4243
import com.google.cloud.monitoring.v3.MetricServiceClient;
4344
import com.google.cloud.monitoring.v3.MetricServiceSettings;
4445
import com.google.common.annotations.VisibleForTesting;
4546
import com.google.common.base.Preconditions;
4647
import com.google.common.base.Supplier;
48+
import com.google.common.base.Suppliers;
4749
import com.google.common.collect.ImmutableList;
4850
import com.google.common.collect.ImmutableMap;
4951
import com.google.common.collect.ImmutableSet;
@@ -112,10 +114,10 @@ public final class BigtableCloudMonitoringExporter implements MetricExporter {
112114
private final AtomicBoolean exportFailureLogged = new AtomicBoolean(false);
113115

114116
static BigtableCloudMonitoringExporter create(
117+
ClientInfo clientInfo,
115118
@Nullable Credentials credentials,
116119
@Nullable String endpoint,
117120
String universeDomain,
118-
List<TimeSeriesConverter> converters,
119121
@Nullable ScheduledExecutorService executorService)
120122
throws IOException {
121123
Preconditions.checkNotNull(universeDomain);
@@ -152,6 +154,13 @@ static BigtableCloudMonitoringExporter create(
152154
// it as not retried for now.
153155
settingsBuilder.createServiceTimeSeriesSettings().setSimpleTimeoutNoRetriesDuration(timeout);
154156

157+
ImmutableList<TimeSeriesConverter> converters =
158+
ImmutableList.of(
159+
new PublicTimeSeriesConverter(),
160+
new InternalTimeSeriesConverter(
161+
Suppliers.memoize(
162+
() -> BigtableExporterUtils.createInternalMonitoredResource(clientInfo))));
163+
155164
return new BigtableCloudMonitoringExporter(
156165
MetricServiceClient.create(settingsBuilder.build()), converters);
157166
}

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BigtableExporterUtils.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
import com.google.api.Distribution;
3939
import com.google.api.Metric;
4040
import com.google.api.MonitoredResource;
41-
import com.google.bigtable.v2.InstanceName;
4241
import com.google.cloud.bigtable.Version;
42+
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.ClientInfo;
4343
import com.google.cloud.opentelemetry.detection.AttributeKeys;
4444
import com.google.cloud.opentelemetry.detection.DetectedPlatform;
4545
import com.google.cloud.opentelemetry.detection.GCPPlatformDetector;
@@ -182,10 +182,9 @@ static List<TimeSeries> convertToApplicationResourceTimeSeries(
182182
}
183183

184184
@Nullable
185-
static MonitoredResource createInternalMonitoredResource(
186-
InstanceName instanceName, String appProfileId) {
185+
static MonitoredResource createInternalMonitoredResource(ClientInfo clientInfo) {
187186
try {
188-
MonitoredResource monitoredResource = detectResource(instanceName, appProfileId);
187+
MonitoredResource monitoredResource = detectResource(clientInfo);
189188
logger.log(Level.FINE, "Internal metrics monitored resource: %s", monitoredResource);
190189
return monitoredResource;
191190
} catch (Exception e) {
@@ -198,7 +197,7 @@ static MonitoredResource createInternalMonitoredResource(
198197
}
199198

200199
@Nullable
201-
private static MonitoredResource detectResource(InstanceName instanceName, String appProfileId) {
200+
private static MonitoredResource detectResource(ClientInfo clientInfo) {
202201
GCPPlatformDetector detector = GCPPlatformDetector.DEFAULT_INSTANCE;
203202
DetectedPlatform detectedPlatform = detector.detectPlatform();
204203

@@ -245,9 +244,9 @@ private static MonitoredResource detectResource(InstanceName instanceName, Strin
245244

246245
return MonitoredResource.newBuilder()
247246
.setType("bigtable_client")
248-
.putLabels("project_id", instanceName.getProject())
249-
.putLabels("instance", instanceName.getInstance())
250-
.putLabels("app_profile", appProfileId)
247+
.putLabels("project_id", clientInfo.getInstanceName().getProject())
248+
.putLabels("instance", clientInfo.getInstanceName().getInstance())
249+
.putLabels("app_profile", clientInfo.getAppProfileId())
251250
.putLabels("client_project", detectedPlatform.getProjectId())
252251
.putLabels("region", region)
253252
.putLabels("cloud_platform", cloud_platform)

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/Util.java

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.google.bigtable.v2.AuthorizedViewName;
2828
import com.google.bigtable.v2.CheckAndMutateRowRequest;
2929
import com.google.bigtable.v2.GenerateInitialChangeStreamPartitionsRequest;
30-
import com.google.bigtable.v2.InstanceName;
3130
import com.google.bigtable.v2.MaterializedViewName;
3231
import com.google.bigtable.v2.MutateRowRequest;
3332
import com.google.bigtable.v2.MutateRowsRequest;
@@ -42,8 +41,6 @@
4241
import com.google.cloud.bigtable.data.v2.BigtableDataSettings;
4342
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.ClientInfo;
4443
import com.google.cloud.bigtable.data.v2.stub.MetadataExtractorInterceptor;
45-
import com.google.common.base.Suppliers;
46-
import com.google.common.collect.ImmutableList;
4744
import com.google.common.collect.ImmutableMap;
4845
import io.grpc.Metadata;
4946
import io.grpc.Status;
@@ -162,8 +159,7 @@ static Map<String, List<String>> createStatsHeaders(ApiCallContext apiCallContex
162159
}
163160

164161
public static OpenTelemetrySdk createBuiltinOtel(
165-
InstanceName instanceName,
166-
String appProfileId,
162+
ClientInfo clientInfo,
167163
@Nullable Credentials defaultCredentials,
168164
@Nullable String metricsEndpoint,
169165
String universeDomain,
@@ -189,17 +185,7 @@ public static OpenTelemetrySdk createBuiltinOtel(
189185

190186
MetricExporter publicExporter =
191187
BigtableCloudMonitoringExporter.create(
192-
credentials,
193-
metricsEndpoint,
194-
universeDomain,
195-
ImmutableList.of(
196-
new BigtableCloudMonitoringExporter.PublicTimeSeriesConverter(),
197-
new BigtableCloudMonitoringExporter.InternalTimeSeriesConverter(
198-
Suppliers.memoize(
199-
() ->
200-
BigtableExporterUtils.createInternalMonitoredResource(
201-
instanceName, appProfileId)))),
202-
executor);
188+
clientInfo, credentials, metricsEndpoint, universeDomain, executor);
203189
PeriodicMetricReaderBuilder readerBuilder =
204190
PeriodicMetricReader.builder(publicExporter).setExecutor(executor);
205191
meterProvider.registerMetricReader(readerBuilder.build());
@@ -274,7 +260,8 @@ public static ApiTracerFactory createOCMetricsFactory(
274260
}
275261

276262
public static BuiltinMetricsTracerFactory createOtelMetricsFactory(
277-
OpenTelemetry otel, ClientInfo clientInfo) {
278-
return new BuiltinMetricsTracerFactory(otel, clientInfo);
263+
OpenTelemetry otel, ClientInfo clientInfo) throws IOException {
264+
265+
return BuiltinMetricsTracerFactory.create(otel, clientInfo);
279266
}
280267
}

0 commit comments

Comments
 (0)