diff --git a/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverMeterRegistry.java b/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverMeterRegistry.java
index 41f3b6170d..4b5acbb599 100644
--- a/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverMeterRegistry.java
+++ b/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverMeterRegistry.java
@@ -25,8 +25,8 @@
import com.google.monitoring.v3.*;
import com.google.protobuf.Timestamp;
import io.micrometer.core.annotation.Incubating;
-import io.micrometer.core.instrument.*;
import io.micrometer.core.instrument.Timer;
+import io.micrometer.core.instrument.*;
import io.micrometer.core.instrument.config.MissingRequiredConfigurationException;
import io.micrometer.core.instrument.distribution.CountAtBucket;
import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
@@ -65,6 +65,7 @@
*/
@Incubating(since = "1.1.0")
public class StackdriverMeterRegistry extends StepMeterRegistry {
+
private static final ThreadFactory DEFAULT_THREAD_FACTORY = new NamedThreadFactory("stackdriver-metrics-publisher");
/**
@@ -122,7 +123,7 @@ public void start(ThreadFactory threadFactory) {
} else {
try {
this.client = MetricServiceClient.create(metricServiceSettings);
- logger.info("publishing metrics to stackdriver every " + TimeUtils.format(config.step()));
+ logger.info("publishing metrics to stackdriver every {}", TimeUtils.format(config.step()));
super.start(threadFactory);
} catch (Exception e) {
logger.error("unable to create stackdriver client", e);
diff --git a/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverNamingConvention.java b/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverNamingConvention.java
index 108b690ee4..58ef99ce20 100644
--- a/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverNamingConvention.java
+++ b/implementations/micrometer-registry-stackdriver/src/main/java/io/micrometer/stackdriver/StackdriverNamingConvention.java
@@ -15,26 +15,31 @@
*/
package io.micrometer.stackdriver;
+import java.util.regex.Pattern;
+
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.StringUtils;
import io.micrometer.core.lang.Nullable;
-import java.util.regex.Pattern;
-
/**
* {@link NamingConvention} for Stackdriver.
- *
+ *
* Names are mapped to Stackdriver's metric type names and tag keys are mapped to its metric label names.
*
- * @see "Naming rules" section on Stackdriver's reference documentation
*
+ * @see "Naming rules" section on Stackdriver's reference documentation
+ * and
+ * @see "Custom Metrics" on the Stackdriver's Quotas and limits reference documentation
+ *
* @author Jon Schneider
* @since 1.1.0
*/
public class StackdriverNamingConvention implements NamingConvention {
+
private static final int MAX_NAME_LENGTH = 200;
private static final int MAX_TAG_KEY_LENGTH = 100;
+ private static final int MAX_TAG_VALUE_LENGTH = 1024;
private static final Pattern NAME_BLACKLIST = Pattern.compile("[^\\w./_]");
private static final Pattern TAG_KEY_BLACKLIST = Pattern.compile("[^\\w_]");
private final NamingConvention nameDelegate;
@@ -62,4 +67,9 @@ private String sanitize(String value, Pattern blacklist, int maxLength) {
public String tagKey(String key) {
return sanitize(tagKeyDelegate.tagKey(key), TAG_KEY_BLACKLIST, MAX_TAG_KEY_LENGTH);
}
+
+ @Override
+ public String tagValue(String value) {
+ return StringUtils.truncate(value, MAX_TAG_VALUE_LENGTH);
+ }
}
diff --git a/implementations/micrometer-registry-stackdriver/src/test/java/io/micrometer/stackdriver/StackdriverNamingConventionTest.java b/implementations/micrometer-registry-stackdriver/src/test/java/io/micrometer/stackdriver/StackdriverNamingConventionTest.java
index 882dbc3a75..9c7054d835 100644
--- a/implementations/micrometer-registry-stackdriver/src/test/java/io/micrometer/stackdriver/StackdriverNamingConventionTest.java
+++ b/implementations/micrometer-registry-stackdriver/src/test/java/io/micrometer/stackdriver/StackdriverNamingConventionTest.java
@@ -44,4 +44,10 @@ void tagValue() {
assertThat(namingConvention.tagValue("my.tag.value")).isEqualTo("my.tag.value");
}
+ @Test
+ void tooLongTagValue() {
+ assertThat(namingConvention.tagValue("thisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolong"))
+ .isEqualTo("thisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistoolongthisistool");
+ }
+
}