From 6a00e61a37864afc77f49d7690c1d19cb658dfdc Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Thu, 18 Aug 2022 09:23:06 -0400 Subject: [PATCH] test: add integration test for builtin metrics --- google-cloud-bigtable-bom/pom.xml | 1 + google-cloud-bigtable-deps-bom/pom.xml | 1 + google-cloud-bigtable/pom.xml | 6 +- .../bigtable/data/v2/it/BuiltinMetricsIT.java | 116 ++++++++++++++++++ pom.xml | 18 ++- 5 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BuiltinMetricsIT.java diff --git a/google-cloud-bigtable-bom/pom.xml b/google-cloud-bigtable-bom/pom.xml index 8dd219c4d7..daaf927cf1 100644 --- a/google-cloud-bigtable-bom/pom.xml +++ b/google-cloud-bigtable-bom/pom.xml @@ -9,6 +9,7 @@ com.google.cloud google-cloud-shared-config 1.5.1 + Google Cloud Bigtable BOM diff --git a/google-cloud-bigtable-deps-bom/pom.xml b/google-cloud-bigtable-deps-bom/pom.xml index a3a90f94db..52d87d441a 100644 --- a/google-cloud-bigtable-deps-bom/pom.xml +++ b/google-cloud-bigtable-deps-bom/pom.xml @@ -8,6 +8,7 @@ com.google.cloud google-cloud-shared-config 1.5.1 + com.google.cloud diff --git a/google-cloud-bigtable/pom.xml b/google-cloud-bigtable/pom.xml index d565f746de..3bc567b31e 100644 --- a/google-cloud-bigtable/pom.xml +++ b/google-cloud-bigtable/pom.xml @@ -60,11 +60,11 @@ - com.google.cloud google-cloud-bigtable-stats - + io.opencensus @@ -653,7 +653,7 @@ maven-failsafe-plugin - true + false classes diff --git a/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BuiltinMetricsIT.java b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BuiltinMetricsIT.java new file mode 100644 index 0000000000..b5c81f41da --- /dev/null +++ b/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/it/BuiltinMetricsIT.java @@ -0,0 +1,116 @@ +package com.google.cloud.bigtable.data.v2.it; + +import static com.google.common.truth.TruthJUnit.assume; + +import com.google.api.client.util.Lists; +import com.google.cloud.bigtable.data.v2.BigtableDataSettings; +import com.google.cloud.bigtable.data.v2.models.Query; +import com.google.cloud.bigtable.data.v2.models.Row; +import com.google.cloud.bigtable.data.v2.models.RowMutation; +import com.google.cloud.bigtable.test_helpers.env.EmulatorEnv; +import com.google.cloud.bigtable.test_helpers.env.TestEnvRule; +import com.google.cloud.monitoring.v3.MetricServiceClient; +import com.google.common.truth.Truth; +import com.google.monitoring.v3.ListTimeSeriesRequest; +import com.google.monitoring.v3.ListTimeSeriesResponse; +import com.google.monitoring.v3.ProjectName; +import com.google.monitoring.v3.TimeInterval; +import com.google.protobuf.util.Timestamps; +import java.io.IOException; +import java.util.ArrayList; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; + +public class BuiltinMetricsIT { + @ClassRule public static TestEnvRule testEnvRule = new TestEnvRule(); + public static MetricServiceClient metricClient; + + public static String[] VIEWS = { + "operation_latencies", + "retry_count", + "attempt_latencies", + "server_latencies", + "connectivity_error_count", + "application_latencies" + }; + + @BeforeClass + public static void setUpClass() throws IOException { + assume() + .withMessage("Builtin metrics integration test is not supported by emulator") + .that(testEnvRule.env()) + .isNotInstanceOf(EmulatorEnv.class); + + // Enable built in metrics + BigtableDataSettings.enableBuiltinMetrics(); + + // Create a cloud monitoring client + metricClient = MetricServiceClient.create(); + } + + @Test + public void testBuiltinMetrics() throws Exception { + // Send a MutateRow and ReadRows request + testEnvRule + .env() + .getDataClient() + .mutateRow( + RowMutation.create(testEnvRule.env().getTableId(), "a-new-key") + .setCell(testEnvRule.env().getFamilyId(), "q", "abc")); + ArrayList rows = + Lists.newArrayList( + testEnvRule + .env() + .getDataClient() + .readRows(Query.create(testEnvRule.env().getTableId()).limit(10))); + + // Sleep 5 minutes so the metrics could be published and precomputation is done + Thread.sleep(60 * 5 * 1000); + + ProjectName name = ProjectName.of(testEnvRule.env().getProjectId()); + + // Restrict time to last 10 minutes + long startMillis = System.currentTimeMillis() - ((60 * 10) * 1000); + TimeInterval interval = + TimeInterval.newBuilder() + .setStartTime(Timestamps.fromMillis(startMillis)) + .setEndTime(Timestamps.fromMillis(System.currentTimeMillis())) + .build(); + + for (String view : VIEWS) { + // Filter on instance and method name + // Verify that metrics are published for MutateRow request + String metricFilter = + String.format( + "metric.type=\"bigtable.googleapis.com/client/%s\" " + + "AND resource.labels.instance=\"%s\" AND metric.labels.method=\"Bigtable.MutateRow\"", + view, testEnvRule.env().getInstanceId()); + ListTimeSeriesRequest.Builder requestBuilder = + ListTimeSeriesRequest.newBuilder() + .setName(name.toString()) + .setFilter(metricFilter) + .setInterval(interval) + .setView(ListTimeSeriesRequest.TimeSeriesView.FULL); + ListTimeSeriesResponse response = + metricClient.listTimeSeriesCallable().call(requestBuilder.build()); + Truth.assertThat(response.getTimeSeriesCount()).isGreaterThan(0); + + // Verify that metrics are published for ReadRows request + metricFilter = + String.format( + "metric.type=\"bigtable.googleapis.com/client/operation_latencies\" " + + "AND resource.labels.instance=\"%s\" AND metric.labels.method=\"Bigtable.ReadRows\"", + testEnvRule.env().getInstanceId()); + requestBuilder.setFilter(metricFilter); + response = metricClient.listTimeSeriesCallable().call(requestBuilder.build()); + Truth.assertThat(response.getTimeSeriesCount()).isGreaterThan(0); + } + } + + @AfterClass + public static void tearDown() { + metricClient.close(); + } +} diff --git a/pom.xml b/pom.xml index b4d3e20b29..88ca1199c5 100644 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,7 @@ com.google.cloud google-cloud-shared-config 1.5.3 + @@ -339,6 +340,22 @@ + + + + with-shaded + + + !skip-shaded + + + + google-cloud-bigtable-stats + + @@ -347,7 +364,6 @@ grpc-google-cloud-bigtable-v2 proto-google-cloud-bigtable-admin-v2 proto-google-cloud-bigtable-v2 - google-cloud-bigtable-stats google-cloud-bigtable-emulator-core google-cloud-bigtable-emulator google-cloud-bigtable-bom