Move metric check for name length (#893)

This commit is contained in:
Giovanni Liva 2020-02-20 16:24:06 +01:00 committed by GitHub
parent f4dea297be
commit 7d51abc5f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 25 deletions

View File

@ -22,6 +22,8 @@ import javax.annotation.concurrent.Immutable;
@Immutable @Immutable
public final class StringUtils { public final class StringUtils {
public static final int NAME_MAX_LENGTH = 255;
/** /**
* Determines whether the {@code String} contains only printable characters. * Determines whether the {@code String} contains only printable characters.
* *
@ -52,7 +54,7 @@ public final class StringUtils {
* @return whether the metricName contains a valid name. * @return whether the metricName contains a valid name.
*/ */
public static boolean isValidMetricName(String metricName) { public static boolean isValidMetricName(String metricName) {
if (metricName.isEmpty()) { if (metricName.isEmpty() || metricName.length() > NAME_MAX_LENGTH) {
return false; return false;
} }
String pattern = "[aA-zZ][aA-zZ0-9_\\-.]*"; String pattern = "[aA-zZ][aA-zZ0-9_\\-.]*";

View File

@ -31,10 +31,9 @@ public final class DefaultMeter implements Meter {
private static final DefaultMeter INSTANCE = new DefaultMeter(); private static final DefaultMeter INSTANCE = new DefaultMeter();
/* VisibleForTesting */ static final int NAME_MAX_LENGTH = 255;
/* VisibleForTesting */ static final String ERROR_MESSAGE_INVALID_NAME = /* VisibleForTesting */ static final String ERROR_MESSAGE_INVALID_NAME =
"Name should be a ASCII string with a length no greater than " "Name should be a ASCII string with a length no greater than "
+ NAME_MAX_LENGTH + StringUtils.NAME_MAX_LENGTH
+ " characters."; + " characters.";
/** /**
@ -50,54 +49,42 @@ public final class DefaultMeter implements Meter {
@Override @Override
public DoubleCounter.Builder doubleCounterBuilder(String name) { public DoubleCounter.Builder doubleCounterBuilder(String name) {
Utils.checkNotNull(name, "name"); Utils.checkNotNull(name, "name");
Utils.checkArgument( Utils.checkArgument(StringUtils.isValidMetricName(name), ERROR_MESSAGE_INVALID_NAME);
StringUtils.isValidMetricName(name) && name.length() <= NAME_MAX_LENGTH,
ERROR_MESSAGE_INVALID_NAME);
return new NoopDoubleCounter.NoopBuilder(); return new NoopDoubleCounter.NoopBuilder();
} }
@Override @Override
public LongCounter.Builder longCounterBuilder(String name) { public LongCounter.Builder longCounterBuilder(String name) {
Utils.checkNotNull(name, "name"); Utils.checkNotNull(name, "name");
Utils.checkArgument( Utils.checkArgument(StringUtils.isValidMetricName(name), ERROR_MESSAGE_INVALID_NAME);
StringUtils.isValidMetricName(name) && name.length() <= NAME_MAX_LENGTH,
ERROR_MESSAGE_INVALID_NAME);
return new NoopLongCounter.NoopBuilder(); return new NoopLongCounter.NoopBuilder();
} }
@Override @Override
public DoubleMeasure.Builder doubleMeasureBuilder(String name) { public DoubleMeasure.Builder doubleMeasureBuilder(String name) {
Utils.checkNotNull(name, "name"); Utils.checkNotNull(name, "name");
Utils.checkArgument( Utils.checkArgument(StringUtils.isValidMetricName(name), ERROR_MESSAGE_INVALID_NAME);
StringUtils.isValidMetricName(name) && name.length() <= NAME_MAX_LENGTH,
ERROR_MESSAGE_INVALID_NAME);
return new NoopDoubleMeasure.NoopBuilder(); return new NoopDoubleMeasure.NoopBuilder();
} }
@Override @Override
public LongMeasure.Builder longMeasureBuilder(String name) { public LongMeasure.Builder longMeasureBuilder(String name) {
Utils.checkNotNull(name, "name"); Utils.checkNotNull(name, "name");
Utils.checkArgument( Utils.checkArgument(StringUtils.isValidMetricName(name), ERROR_MESSAGE_INVALID_NAME);
StringUtils.isValidMetricName(name) && name.length() <= NAME_MAX_LENGTH,
ERROR_MESSAGE_INVALID_NAME);
return new NoopLongMeasure.NoopBuilder(); return new NoopLongMeasure.NoopBuilder();
} }
@Override @Override
public DoubleObserver.Builder doubleObserverBuilder(String name) { public DoubleObserver.Builder doubleObserverBuilder(String name) {
Utils.checkNotNull(name, "name"); Utils.checkNotNull(name, "name");
Utils.checkArgument( Utils.checkArgument(StringUtils.isValidMetricName(name), ERROR_MESSAGE_INVALID_NAME);
StringUtils.isValidMetricName(name) && name.length() <= NAME_MAX_LENGTH,
ERROR_MESSAGE_INVALID_NAME);
return new NoopDoubleObserver.NoopBuilder(); return new NoopDoubleObserver.NoopBuilder();
} }
@Override @Override
public LongObserver.Builder longObserverBuilder(String name) { public LongObserver.Builder longObserverBuilder(String name) {
Utils.checkNotNull(name, "name"); Utils.checkNotNull(name, "name");
Utils.checkArgument( Utils.checkArgument(StringUtils.isValidMetricName(name), ERROR_MESSAGE_INVALID_NAME);
StringUtils.isValidMetricName(name) && name.length() <= NAME_MAX_LENGTH,
ERROR_MESSAGE_INVALID_NAME);
return new NoopLongObserver.NoopBuilder(); return new NoopLongObserver.NoopBuilder();
} }

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics; package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry; import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -47,7 +48,7 @@ public class DoubleCounterTest {
@Test @Test
public void preventTooLongName() { public void preventTooLongName() {
char[] chars = new char[DefaultMeter.NAME_MAX_LENGTH + 1]; char[] chars = new char[StringUtils.NAME_MAX_LENGTH + 1];
Arrays.fill(chars, 'a'); Arrays.fill(chars, 'a');
String longName = String.valueOf(chars); String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class); thrown.expect(IllegalArgumentException.class);

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics; package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry; import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import org.junit.Rule; import org.junit.Rule;
@ -40,7 +41,7 @@ public class DoubleObserverTest {
@Test @Test
public void preventTooLongName() { public void preventTooLongName() {
char[] chars = new char[DefaultMeter.NAME_MAX_LENGTH + 1]; char[] chars = new char[StringUtils.NAME_MAX_LENGTH + 1];
Arrays.fill(chars, 'a'); Arrays.fill(chars, 'a');
String longName = String.valueOf(chars); String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class); thrown.expect(IllegalArgumentException.class);

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics; package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry; import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -46,7 +47,7 @@ public class LongCounterTest {
@Test @Test
public void preventTooLongName() { public void preventTooLongName() {
char[] chars = new char[DefaultMeter.NAME_MAX_LENGTH + 1]; char[] chars = new char[StringUtils.NAME_MAX_LENGTH + 1];
Arrays.fill(chars, 'a'); Arrays.fill(chars, 'a');
String longName = String.valueOf(chars); String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class); thrown.expect(IllegalArgumentException.class);

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics; package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry; import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import org.junit.Rule; import org.junit.Rule;
@ -40,7 +41,7 @@ public class LongObserverTest {
@Test @Test
public void preventTooLongName() { public void preventTooLongName() {
char[] chars = new char[DefaultMeter.NAME_MAX_LENGTH + 1]; char[] chars = new char[StringUtils.NAME_MAX_LENGTH + 1];
Arrays.fill(chars, 'a'); Arrays.fill(chars, 'a');
String longName = String.valueOf(chars); String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class); thrown.expect(IllegalArgumentException.class);