From d5364016f64e93519a0b631ea148b0250a20d4d0 Mon Sep 17 00:00:00 2001 From: Moritz Mack Date: Wed, 5 Oct 2022 10:57:46 +0200 Subject: [PATCH] Fix validation of measurement name in InfluxDBPublisher (addresses #22238) --- .../publishing/InfluxDBPublisher.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/sdks/java/testing/test-utils/src/main/java/org/apache/beam/sdk/testutils/publishing/InfluxDBPublisher.java b/sdks/java/testing/test-utils/src/main/java/org/apache/beam/sdk/testutils/publishing/InfluxDBPublisher.java index 6adaa298d7423..913c020af617a 100644 --- a/sdks/java/testing/test-utils/src/main/java/org/apache/beam/sdk/testutils/publishing/InfluxDBPublisher.java +++ b/sdks/java/testing/test-utils/src/main/java/org/apache/beam/sdk/testutils/publishing/InfluxDBPublisher.java @@ -25,6 +25,7 @@ import static org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkState; import static org.apache.commons.lang3.StringUtils.isBlank; import static org.apache.commons.lang3.StringUtils.isNoneBlank; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import com.google.auto.value.AutoValue; import com.google.gson.Gson; @@ -40,6 +41,7 @@ import javax.annotation.Nullable; import org.apache.beam.sdk.testutils.NamedTestResult; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.annotations.VisibleForTesting; +import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Collections2; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableSet; import org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Maps; @@ -102,6 +104,7 @@ public static DataPoint dataPoint( Map tags, Map fields, @Nullable Long timestampSecs) { + Preconditions.checkArgument(isNotBlank(measurement), "Measurement cannot be blank"); return new AutoValue_InfluxDBPublisher_DataPoint( measurement, tags, fields, timestampSecs, TimeUnit.SECONDS); } @@ -113,6 +116,7 @@ public static DataPoint dataPoint( Map fields, @Nullable Long timestamp, TimeUnit timestampUnit) { + Preconditions.checkArgument(isNotBlank(measurement), "Measurement cannot be blank"); return new AutoValue_InfluxDBPublisher_DataPoint( measurement, tags, fields, timestamp, timestampUnit); } @@ -128,10 +132,14 @@ public static void publishNexmarkResults( public static void publishWithSettings( final Collection results, final InfluxDBSettings settings) { - @SuppressWarnings("nullness") - Collection dataPoints = - Collections2.transform(results, res -> res.toInfluxDBDataPoint(settings.measurement)); - publish(settings, dataPoints); + if (isNotBlank(settings.measurement)) { + @SuppressWarnings("nullness") + Collection dataPoints = + Collections2.transform(results, res -> res.toInfluxDBDataPoint(settings.measurement)); + publish(settings, dataPoints); + } else { + LOG.warn("Missing setting InfluxDB measurement. Metrics won't be published."); + } } public static void publish( @@ -143,7 +151,7 @@ public static void publish( private static void publishWithCheck(final InfluxDBSettings settings, final String data) { requireNonNull(settings, "InfluxDB settings must not be null"); - if (isNoneBlank(settings.measurement, settings.database)) { + if (isNotBlank(settings.database)) { try { final HttpClientBuilder builder = provideHttpBuilder(settings); final HttpPost postRequest = providePOSTRequest(settings); @@ -153,7 +161,7 @@ private static void publishWithCheck(final InfluxDBSettings settings, final Stri LOG.warn("Unable to publish metrics due to error: {}", exception.getMessage()); } } else { - LOG.warn("Missing property -- measurement/database. Metrics won't be published."); + LOG.warn("Missing setting InfluxDB database. Metrics won't be published."); } }