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

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -47,7 +48,7 @@ public class DoubleCounterTest {
@Test
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');
String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class);

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Rule;
@ -40,7 +41,7 @@ public class DoubleObserverTest {
@Test
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');
String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class);

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@ -46,7 +47,7 @@ public class LongCounterTest {
@Test
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');
String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class);

View File

@ -17,6 +17,7 @@
package io.opentelemetry.metrics;
import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.internal.StringUtils;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Rule;
@ -40,7 +41,7 @@ public class LongObserverTest {
@Test
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');
String longName = String.valueOf(chars);
thrown.expect(IllegalArgumentException.class);