diff --git a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableCreateTimeSeriesExporter.java b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableCreateTimeSeriesExporter.java index 8997d0ce3c..ad2e76867c 100644 --- a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableCreateTimeSeriesExporter.java +++ b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableCreateTimeSeriesExporter.java @@ -21,14 +21,13 @@ import com.google.monitoring.v3.ProjectName; import io.opencensus.exporter.metrics.util.MetricExporter; import io.opencensus.metrics.export.Metric; -import io.opencensus.metrics.export.TimeSeries; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; final class BigtableCreateTimeSeriesExporter extends MetricExporter { private static final Logger logger = @@ -54,24 +53,29 @@ public void export(Collection metrics) { } try { - for (TimeSeries timeSeries : metric.getTimeSeriesList()) { - // Get the project id from the metrics so we could publish with multiple project ids - String projectId = - BigtableStackdriverExportUtils.getProjectId(metric.getMetricDescriptor(), timeSeries); - List timeSeriesList = - projectToTimeSeries.getOrDefault(projectId, new ArrayList<>()); - timeSeriesList.add( - BigtableStackdriverExportUtils.convertTimeSeries( - metric.getMetricDescriptor(), timeSeries, clientId, monitoredResource)); - projectToTimeSeries.put(projectId, timeSeriesList); - } + projectToTimeSeries = + metric.getTimeSeriesList().stream() + .collect( + Collectors.groupingBy( + timeSeries -> + BigtableStackdriverExportUtils.getProjectId( + metric.getMetricDescriptor(), timeSeries), + Collectors.mapping( + timeSeries -> + BigtableStackdriverExportUtils.convertTimeSeries( + metric.getMetricDescriptor(), + timeSeries, + clientId, + monitoredResource), + Collectors.toList()))); - for (String projectId : projectToTimeSeries.keySet()) { - ProjectName projectName = ProjectName.of(projectId); + for (Map.Entry> entry : + projectToTimeSeries.entrySet()) { + ProjectName projectName = ProjectName.of(entry.getKey()); CreateTimeSeriesRequest request = CreateTimeSeriesRequest.newBuilder() .setName(projectName.toString()) - .addAllTimeSeries(projectToTimeSeries.get(projectId)) + .addAllTimeSeries(entry.getValue()) .build(); this.metricServiceClient.createServiceTimeSeries(request); } diff --git a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverExportUtils.java b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverExportUtils.java index 4d991ff4e0..bdca097050 100644 --- a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverExportUtils.java +++ b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverExportUtils.java @@ -143,8 +143,7 @@ static com.google.monitoring.v3.TimeSeries convertTimeSeries( return builder.build(); } - static String getProjectId(MetricDescriptor metricDescriptor, TimeSeries timeSeries) - throws Exception { + static String getProjectId(MetricDescriptor metricDescriptor, TimeSeries timeSeries) { List labelKeys = metricDescriptor.getLabelKeys(); List labelValues = timeSeries.getLabelValues(); for (int i = 0; i < labelKeys.size(); i++) { @@ -152,7 +151,7 @@ static String getProjectId(MetricDescriptor metricDescriptor, TimeSeries timeSer return labelValues.get(i).getValue(); } } - throw new Exception("Can't find project id for the current timeseries"); + throw new IllegalStateException("Can't find project id for the current timeseries"); } static String getDefaultTaskValue() { diff --git a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverStatsExporter.java b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverStatsExporter.java index 03b1b6bfca..8896e52d89 100644 --- a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverStatsExporter.java +++ b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/BigtableStackdriverStatsExporter.java @@ -90,14 +90,4 @@ static MetricServiceClient createMetricServiceClient(Credentials credentials, Du settingsBuilder.createTimeSeriesSettings().setSimpleTimeoutNoRetries(stackdriverDuration); return MetricServiceClient.create(settingsBuilder.build()); } - - public static void unregister() { - synchronized (lock) { - if (instance != null) { - instance.intervalMetricReader.stop(); - } - - instance = null; - } - } } diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java index 83be6b2472..be2594b00f 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java @@ -201,12 +201,13 @@ public static void enableGfeOpenCensusStats() { } /** - * Register built in metrics. This is an experimental feature. Please fill up this form to have - * your project allow listed for the private preview: https://forms.gle/xuhu6vCunn2MjV2m9 + * Register built in metrics. + * + *

This is an experimental feature. Please fill up this form to have your project allow listed + * for the private preview: https://forms.gle/xuhu6vCunn2MjV2m9 */ @BetaApi("Built in metric is not currently stable and may change in the future") public static void registerBuiltinMetrics() throws IOException { - GoogleCredentials.getApplicationDefault(); if (BUILTIN_METRICS_REGISTERED.compareAndSet(false, true)) { BuiltinViews.registerBigtableBuiltinViews(); BigtableStackdriverStatsExporter.register(GoogleCredentials.getApplicationDefault()); @@ -214,9 +215,11 @@ public static void registerBuiltinMetrics() throws IOException { } /** - * Register built in metrics with credentials. This is an experimental feature. Please fill up - * this form to have your project allow listed for the private preview: - * https://forms.gle/xuhu6vCunn2MjV2m9 + * Register built in metrics with credentials. The credentials need to have metric write access + * for all the projects you're publishing to. + * + *

This is an experimental feature. Please fill up this form to have your project allow listed + * for the private preview: https://forms.gle/xuhu6vCunn2MjV2m9 */ @BetaApi("Built in metric is not currently stable and may change in the future") public static void registerBuiltinMetrics(Credentials credentials) throws IOException { @@ -226,14 +229,6 @@ public static void registerBuiltinMetrics(Credentials credentials) throws IOExce } } - /** Unregister built in metrics. * */ - @BetaApi("Built in metrics is not currently stable and may change in the future") - public static void unregisterBuiltinMetrics() { - if (BUILTIN_METRICS_REGISTERED.compareAndSet(true, false)) { - BigtableStackdriverStatsExporter.unregister(); - } - } - /** Returns the target project id. */ public String getProjectId() { return stubSettings.getProjectId(); @@ -283,16 +278,6 @@ public Long getBatchMutationsTargetRpcLatencyMs() { return stubSettings.bulkMutateRowsSettings().getTargetRpcLatencyMs(); } - /** - * Gets if built in metrics are registered. - * - * @return - */ - @BetaApi("Built in metrics is not currently stable and may change in the future") - public static boolean isBuiltinMetricsRegistered() { - return BUILTIN_METRICS_REGISTERED.get(); - } - /** Returns the underlying RPC settings. */ public EnhancedBigtableStubSettings getStubSettings() { return stubSettings; diff --git a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracer.java b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracer.java index 1c77a9c323..0d42ba806d 100644 --- a/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracer.java +++ b/google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracer.java @@ -66,9 +66,9 @@ class BuiltinMetricsTracer extends BigtableTracer { private AtomicInteger requestLeft = new AtomicInteger(0); // Monitored resource labels - private String tableId = "undefined"; + private String tableId = "unspecified"; private String zone = "global"; - private String cluster = "global"; + private String cluster = "unspecified"; // gfe stats private AtomicLong gfeMissingHeaders = new AtomicLong(0); diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java index 2989e5c84a..7f9e7481cb 100644 --- a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/BuiltinMetricsTracerTest.java @@ -340,7 +340,8 @@ public void testMutateRowAttempts() { verify(statsRecorderWrapper, timeout(50).times(fakeService.getAttemptCounter().get() + 1)) .record(status.capture(), tableId.capture(), zone.capture(), cluster.capture()); assertThat(zone.getAllValues()).containsExactly("global", "global", ZONE, ZONE); - assertThat(cluster.getAllValues()).containsExactly("global", "global", CLUSTER, CLUSTER); + assertThat(cluster.getAllValues()) + .containsExactly("unspecified", "unspecified", CLUSTER, CLUSTER); assertThat(status.getAllValues()).containsExactly("UNAVAILABLE", "UNAVAILABLE", "OK", "OK"); }