aboutsummaryrefslogtreecommitdiff
path: root/exporters
diff options
context:
space:
mode:
authorYang Song <songy23@users.noreply.github.com>2018-08-08 11:09:34 -0700
committerGitHub <noreply@github.com>2018-08-08 11:09:34 -0700
commit43651556393859b342d6db65b11aa6dca61b3678 (patch)
tree47196211d3baf9adcdffd0f78494eb6e73a5d894 /exporters
parenta77396ddb5dcc2ea48d1b2eb90890f59e8e4d9f4 (diff)
downloadopencensus-java-43651556393859b342d6db65b11aa6dca61b3678.tar.gz
Allow users to use custom metric name prefix for Stackdriver (#1057)
Diffstat (limited to 'exporters')
-rw-r--r--exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java28
-rw-r--r--exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java47
-rw-r--r--exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfiguration.java22
-rw-r--r--exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java36
-rw-r--r--exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java72
-rw-r--r--exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java59
-rw-r--r--exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfigurationTest.java4
7 files changed, 219 insertions, 49 deletions
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java
index 2c571cfe..93f287c6 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtils.java
@@ -87,8 +87,6 @@ final class StackdriverExportUtils {
private static final String GLOBAL = "global";
private static final Logger logger = Logger.getLogger(StackdriverExportUtils.class.getName());
- private static final String CUSTOM_METRIC_DOMAIN = "custom.googleapis.com";
- private static final String CUSTOM_OPENCENSUS_DOMAIN = CUSTOM_METRIC_DOMAIN + "/opencensus/";
private static final String OPENCENSUS_TASK_VALUE_DEFAULT = generateDefaultTaskValue();
private static final String PROJECT_ID_LABEL_KEY = "project_id";
@@ -204,7 +202,8 @@ final class StackdriverExportUtils {
// Construct a MetricDescriptor using a View.
@javax.annotation.Nullable
- static MetricDescriptor createMetricDescriptor(View view, String projectId) {
+ static MetricDescriptor createMetricDescriptor(
+ View view, String projectId, String domain, String displayNamePrefix) {
if (!(view.getWindow() instanceof View.AggregationWindow.Cumulative)) {
// TODO(songya): Only Cumulative view will be exported to Stackdriver in this version.
return null;
@@ -212,13 +211,14 @@ final class StackdriverExportUtils {
MetricDescriptor.Builder builder = MetricDescriptor.newBuilder();
String viewName = view.getName().asString();
- String type = generateType(viewName);
+ String type = generateType(viewName, domain);
// Name format refers to
// cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors/create
builder.setName(String.format("projects/%s/metricDescriptors/%s", projectId, type));
builder.setType(type);
builder.setDescription(view.getDescription());
- builder.setDisplayName("OpenCensus/" + viewName);
+ String displayName = createDisplayName(viewName, displayNamePrefix);
+ builder.setDisplayName(displayName);
for (TagKey tagKey : view.getColumns()) {
builder.addLabels(createLabelDescriptor(tagKey));
}
@@ -234,8 +234,12 @@ final class StackdriverExportUtils {
return builder.build();
}
- private static String generateType(String viewName) {
- return CUSTOM_OPENCENSUS_DOMAIN + viewName;
+ private static String generateType(String viewName, String domain) {
+ return domain + viewName;
+ }
+
+ private static String createDisplayName(String viewName, String displayNamePrefix) {
+ return displayNamePrefix + viewName;
}
// Construct a LabelDescriptor from a TagKey
@@ -293,7 +297,9 @@ final class StackdriverExportUtils {
// Convert ViewData to a list of TimeSeries, so that ViewData can be uploaded to Stackdriver.
static List<TimeSeries> createTimeSeriesList(
- @javax.annotation.Nullable ViewData viewData, MonitoredResource monitoredResource) {
+ @javax.annotation.Nullable ViewData viewData,
+ MonitoredResource monitoredResource,
+ String domain) {
List<TimeSeries> timeSeriesList = Lists.newArrayList();
if (viewData == null) {
return timeSeriesList;
@@ -314,7 +320,7 @@ final class StackdriverExportUtils {
for (Entry<List</*@Nullable*/ TagValue>, AggregationData> entry :
viewData.getAggregationMap().entrySet()) {
TimeSeries.Builder builder = shared.clone();
- builder.setMetric(createMetric(view, entry.getKey()));
+ builder.setMetric(createMetric(view, entry.getKey(), domain));
builder.addPoints(
createPoint(entry.getValue(), viewData.getWindowData(), view.getAggregation()));
timeSeriesList.add(builder.build());
@@ -325,10 +331,10 @@ final class StackdriverExportUtils {
// Create a Metric using the TagKeys and TagValues.
@VisibleForTesting
- static Metric createMetric(View view, List</*@Nullable*/ TagValue> tagValues) {
+ static Metric createMetric(View view, List</*@Nullable*/ TagValue> tagValues, String domain) {
Metric.Builder builder = Metric.newBuilder();
// TODO(songya): use pre-defined metrics for canonical views
- builder.setType(generateType(view.getName().asString()));
+ builder.setType(generateType(view.getName().asString(), domain));
Map<String, String> stringTagMap = Maps.newHashMap();
List<TagKey> columns = view.getColumns();
checkArgument(
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
index 5025c519..7873e29e 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorker.java
@@ -21,6 +21,7 @@ import com.google.api.MonitoredResource;
import com.google.api.gax.rpc.ApiException;
import com.google.cloud.monitoring.v3.MetricServiceClient;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.monitoring.v3.CreateMetricDescriptorRequest;
import com.google.monitoring.v3.CreateTimeSeriesRequest;
@@ -65,12 +66,21 @@ final class StackdriverExporterWorker implements Runnable {
// Stackdriver Monitoring v3 only accepts up to 200 TimeSeries per CreateTimeSeries call.
@VisibleForTesting static final int MAX_BATCH_EXPORT_SIZE = 200;
+ @VisibleForTesting static final String DEFAULT_DISPLAY_NAME_PREFIX = "OpenCensus/";
+ @VisibleForTesting static final String CUSTOM_METRIC_DOMAIN = "custom.googleapis.com/";
+ @VisibleForTesting static final String EXTERNAL_METRIC_DOMAIN = "external.googleapis.com/";
+
+ @VisibleForTesting
+ static final String CUSTOM_OPENCENSUS_DOMAIN = CUSTOM_METRIC_DOMAIN + "opencensus/";
+
private final long scheduleDelayMillis;
private final String projectId;
private final ProjectName projectName;
private final MetricServiceClient metricServiceClient;
private final ViewManager viewManager;
private final MonitoredResource monitoredResource;
+ private final String domain;
+ private final String displayNamePrefix;
private final Map<View.Name, View> registeredViews = new HashMap<View.Name, View>();
private static final Tracer tracer = Tracing.getTracer();
@@ -81,13 +91,16 @@ final class StackdriverExporterWorker implements Runnable {
MetricServiceClient metricServiceClient,
Duration exportInterval,
ViewManager viewManager,
- MonitoredResource monitoredResource) {
+ MonitoredResource monitoredResource,
+ @javax.annotation.Nullable String metricNamePrefix) {
this.scheduleDelayMillis = exportInterval.toMillis();
this.projectId = projectId;
projectName = ProjectName.newBuilder().setProject(projectId).build();
this.metricServiceClient = metricServiceClient;
this.viewManager = viewManager;
this.monitoredResource = monitoredResource;
+ this.domain = getDomain(metricNamePrefix);
+ this.displayNamePrefix = getDisplayNamePrefix(metricNamePrefix);
Tracing.getExportComponent()
.getSampledSpanStore()
@@ -122,7 +135,7 @@ final class StackdriverExporterWorker implements Runnable {
// canonical metrics. Registration is required only for custom view definitions. Canonical
// views should be pre-registered.
MetricDescriptor metricDescriptor =
- StackdriverExportUtils.createMetricDescriptor(view, projectId);
+ StackdriverExportUtils.createMetricDescriptor(view, projectId, domain, displayNamePrefix);
if (metricDescriptor == null) {
// Don't register interval views in this version.
return false;
@@ -170,7 +183,7 @@ final class StackdriverExporterWorker implements Runnable {
List<TimeSeries> timeSeriesList = Lists.newArrayList();
for (/*@Nullable*/ ViewData viewData : viewDataList) {
timeSeriesList.addAll(
- StackdriverExportUtils.createTimeSeriesList(viewData, monitoredResource));
+ StackdriverExportUtils.createTimeSeriesList(viewData, monitoredResource, domain));
}
for (List<TimeSeries> batchedTimeSeries :
Lists.partition(timeSeriesList, MAX_BATCH_EXPORT_SIZE)) {
@@ -231,4 +244,32 @@ final class StackdriverExporterWorker implements Runnable {
private static String exceptionMessage(Throwable e) {
return e.getMessage() != null ? e.getMessage() : e.getClass().getName();
}
+
+ @VisibleForTesting
+ static String getDomain(@javax.annotation.Nullable String metricNamePrefix) {
+ String domain;
+ if (Strings.isNullOrEmpty(metricNamePrefix)) {
+ domain = CUSTOM_OPENCENSUS_DOMAIN;
+ } else {
+ if (metricNamePrefix.startsWith(CUSTOM_METRIC_DOMAIN)
+ || metricNamePrefix.startsWith(EXTERNAL_METRIC_DOMAIN)) {
+ domain = metricNamePrefix;
+ } else {
+ domain = CUSTOM_METRIC_DOMAIN + metricNamePrefix + '/';
+ }
+ }
+ return domain;
+ }
+
+ @VisibleForTesting
+ static String getDisplayNamePrefix(@javax.annotation.Nullable String metricNamePrefix) {
+ if (metricNamePrefix == null) {
+ return DEFAULT_DISPLAY_NAME_PREFIX;
+ } else {
+ if (!metricNamePrefix.endsWith("/") && !metricNamePrefix.isEmpty()) {
+ metricNamePrefix += '/';
+ }
+ return metricNamePrefix;
+ }
+ }
}
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfiguration.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfiguration.java
index 8a332c46..c4008ca1 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfiguration.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfiguration.java
@@ -71,6 +71,15 @@ public abstract class StackdriverStatsConfiguration {
public abstract MonitoredResource getMonitoredResource();
/**
+ * Returns the name prefix for Stackdriver metrics.
+ *
+ * @return the metric name prefix.
+ * @since 0.16
+ */
+ @Nullable
+ public abstract String getMetricNamePrefix();
+
+ /**
* Returns a new {@link Builder}.
*
* @return a {@code Builder}.
@@ -127,6 +136,19 @@ public abstract class StackdriverStatsConfiguration {
public abstract Builder setMonitoredResource(MonitoredResource monitoredResource);
/**
+ * Sets the the name prefix for Stackdriver metrics.
+ *
+ * <p>It is suggested to use prefix with custom or external domain name, for example
+ * "custom.googleapis.com/myorg/" or "external.googleapis.com/prometheus/". If the given prefix
+ * doesn't start with a valid domain, we will add "custom.googleapis.com/" before the prefix.
+ *
+ * @param prefix the metric name prefix.
+ * @return this.
+ * @since 0.16
+ */
+ public abstract Builder setMetricNamePrefix(String prefix);
+
+ /**
* Builds a new {@link StackdriverStatsConfiguration} with current settings.
*
* @return a {@code StackdriverStatsConfiguration}.
diff --git a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java
index 380f4ea9..51c54916 100644
--- a/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java
+++ b/exporters/stats/stackdriver/src/main/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsExporter.java
@@ -79,11 +79,17 @@ public final class StackdriverStatsExporter {
MetricServiceClient metricServiceClient,
Duration exportInterval,
ViewManager viewManager,
- MonitoredResource monitoredResource) {
+ MonitoredResource monitoredResource,
+ @Nullable String metricNamePrefix) {
checkArgument(exportInterval.compareTo(ZERO) > 0, "Duration must be positive");
StackdriverExporterWorker worker =
new StackdriverExporterWorker(
- projectId, metricServiceClient, exportInterval, viewManager, monitoredResource);
+ projectId,
+ metricServiceClient,
+ exportInterval,
+ viewManager,
+ monitoredResource,
+ metricNamePrefix);
this.workerThread = new DaemonThreadFactory().newThread(worker);
}
@@ -106,7 +112,7 @@ public final class StackdriverStatsExporter {
checkNotNull(credentials, "credentials");
checkNotNull(projectId, "projectId");
checkNotNull(exportInterval, "exportInterval");
- createInternal(credentials, projectId, exportInterval, null);
+ createInternal(credentials, projectId, exportInterval, null, null);
}
/**
@@ -136,7 +142,7 @@ public final class StackdriverStatsExporter {
throws IOException {
checkNotNull(projectId, "projectId");
checkNotNull(exportInterval, "exportInterval");
- createInternal(null, projectId, exportInterval, null);
+ createInternal(null, projectId, exportInterval, null, null);
}
/**
@@ -159,6 +165,9 @@ public final class StackdriverStatsExporter {
* cloud.google.com/monitoring/custom-metrics/creating-metrics#which-resource for a list of valid
* {@code MonitoredResource}s.
*
+ * <p>If {@code metricNamePrefix} of the configuration is not set, the exporter will use the
+ * default prefix "OpenCensus".
+ *
* @param configuration the {@code StackdriverStatsConfiguration}.
* @throws IllegalStateException if a Stackdriver exporter is already created.
* @since 0.11.0
@@ -170,7 +179,8 @@ public final class StackdriverStatsExporter {
configuration.getCredentials(),
configuration.getProjectId(),
configuration.getExportInterval(),
- configuration.getMonitoredResource());
+ configuration.getMonitoredResource(),
+ configuration.getMetricNamePrefix());
}
/**
@@ -194,11 +204,13 @@ public final class StackdriverStatsExporter {
*
* <p>This method uses the default resource created from the environment variables.
*
+ * <p>This method uses the default display name prefix "OpenCensus".
+ *
* @throws IllegalStateException if a Stackdriver exporter is already created.
* @since 0.11.0
*/
public static void createAndRegister() throws IOException {
- createInternal(null, null, null, null);
+ createInternal(null, null, null, null, null);
}
/**
@@ -225,7 +237,7 @@ public final class StackdriverStatsExporter {
@Deprecated
public static void createAndRegister(Duration exportInterval) throws IOException {
checkNotNull(exportInterval, "exportInterval");
- createInternal(null, null, exportInterval, null);
+ createInternal(null, null, exportInterval, null, null);
}
/**
@@ -254,7 +266,7 @@ public final class StackdriverStatsExporter {
checkNotNull(projectId, "projectId");
checkNotNull(exportInterval, "exportInterval");
checkNotNull(monitoredResource, "monitoredResource");
- createInternal(null, projectId, exportInterval, monitoredResource);
+ createInternal(null, projectId, exportInterval, monitoredResource, null);
}
/**
@@ -281,7 +293,7 @@ public final class StackdriverStatsExporter {
Duration exportInterval, MonitoredResource monitoredResource) throws IOException {
checkNotNull(exportInterval, "exportInterval");
checkNotNull(monitoredResource, "monitoredResource");
- createInternal(null, null, exportInterval, monitoredResource);
+ createInternal(null, null, exportInterval, monitoredResource, null);
}
// Use createInternal() (instead of constructor) to enforce singleton.
@@ -289,7 +301,8 @@ public final class StackdriverStatsExporter {
@Nullable Credentials credentials,
@Nullable String projectId,
@Nullable Duration exportInterval,
- @Nullable MonitoredResource monitoredResource)
+ @Nullable MonitoredResource monitoredResource,
+ @Nullable String metricNamePrefix)
throws IOException {
projectId = projectId == null ? ServiceOptions.getDefaultProjectId() : projectId;
exportInterval = exportInterval == null ? DEFAULT_INTERVAL : exportInterval;
@@ -313,7 +326,8 @@ public final class StackdriverStatsExporter {
metricServiceClient,
exportInterval,
Stats.getViewManager(),
- monitoredResource);
+ monitoredResource,
+ metricNamePrefix);
exporter.workerThread.start();
}
}
diff --git a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java
index 1adf652b..cd536e8f 100644
--- a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java
+++ b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExportUtilsTest.java
@@ -17,6 +17,8 @@
package io.opencensus.exporter.stats.stackdriver;
import static com.google.common.truth.Truth.assertThat;
+import static io.opencensus.exporter.stats.stackdriver.StackdriverExporterWorker.CUSTOM_OPENCENSUS_DOMAIN;
+import static io.opencensus.exporter.stats.stackdriver.StackdriverExporterWorker.DEFAULT_DISPLAY_NAME_PREFIX;
import com.google.api.Distribution.BucketOptions;
import com.google.api.Distribution.BucketOptions.Explicit;
@@ -175,7 +177,9 @@ public class StackdriverExportUtilsTest {
DISTRIBUTION,
Arrays.asList(KEY),
CUMULATIVE);
- assertThat(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_1)))
+ assertThat(
+ StackdriverExportUtils.createMetric(
+ view, Arrays.asList(VALUE_1), CUSTOM_OPENCENSUS_DOMAIN))
.isEqualTo(
Metric.newBuilder()
.setType("custom.googleapis.com/opencensus/" + VIEW_NAME)
@@ -185,6 +189,26 @@ public class StackdriverExportUtilsTest {
}
@Test
+ public void createMetric_WithExternalMetricDomain() {
+ View view =
+ View.create(
+ Name.create(VIEW_NAME),
+ VIEW_DESCRIPTION,
+ MEASURE_DOUBLE,
+ DISTRIBUTION,
+ Arrays.asList(KEY),
+ CUMULATIVE);
+ String prometheusDomain = "external.googleapis.com/prometheus/";
+ assertThat(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_1), prometheusDomain))
+ .isEqualTo(
+ Metric.newBuilder()
+ .setType(prometheusDomain + VIEW_NAME)
+ .putLabels("KEY", "VALUE1")
+ .putLabels(StackdriverExportUtils.OPENCENSUS_TASK, DEFAULT_TASK_VALUE)
+ .build());
+ }
+
+ @Test
public void createMetric_skipNullTagValue() {
View view =
View.create(
@@ -194,7 +218,9 @@ public class StackdriverExportUtilsTest {
DISTRIBUTION,
Arrays.asList(KEY, KEY_2, KEY_3),
CUMULATIVE);
- assertThat(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_1, null, VALUE_2)))
+ assertThat(
+ StackdriverExportUtils.createMetric(
+ view, Arrays.asList(VALUE_1, null, VALUE_2), CUSTOM_OPENCENSUS_DOMAIN))
.isEqualTo(
Metric.newBuilder()
.setType("custom.googleapis.com/opencensus/" + VIEW_NAME)
@@ -217,7 +243,7 @@ public class StackdriverExportUtilsTest {
List<TagValue> tagValues = Arrays.asList(VALUE_1, null);
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("TagKeys and TagValues don't have same size.");
- StackdriverExportUtils.createMetric(view, tagValues);
+ StackdriverExportUtils.createMetric(view, tagValues, CUSTOM_OPENCENSUS_DOMAIN);
}
@Test
@@ -350,17 +376,17 @@ public class StackdriverExportUtilsTest {
Arrays.asList(KEY),
CUMULATIVE);
MetricDescriptor metricDescriptor =
- StackdriverExportUtils.createMetricDescriptor(view, PROJECT_ID);
+ StackdriverExportUtils.createMetricDescriptor(
+ view, PROJECT_ID, "custom.googleapis.com/myorg/", "myorg/");
assertThat(metricDescriptor.getName())
.isEqualTo(
"projects/"
+ PROJECT_ID
- + "/metricDescriptors/custom.googleapis.com/opencensus/"
+ + "/metricDescriptors/custom.googleapis.com/myorg/"
+ VIEW_NAME);
assertThat(metricDescriptor.getDescription()).isEqualTo(VIEW_DESCRIPTION);
- assertThat(metricDescriptor.getDisplayName()).isEqualTo("OpenCensus/" + VIEW_NAME);
- assertThat(metricDescriptor.getType())
- .isEqualTo("custom.googleapis.com/opencensus/" + VIEW_NAME);
+ assertThat(metricDescriptor.getDisplayName()).isEqualTo("myorg/" + VIEW_NAME);
+ assertThat(metricDescriptor.getType()).isEqualTo("custom.googleapis.com/myorg/" + VIEW_NAME);
assertThat(metricDescriptor.getUnit()).isEqualTo(MEASURE_UNIT);
assertThat(metricDescriptor.getMetricKind()).isEqualTo(MetricKind.CUMULATIVE);
assertThat(metricDescriptor.getValueType()).isEqualTo(MetricDescriptor.ValueType.DISTRIBUTION);
@@ -389,7 +415,8 @@ public class StackdriverExportUtilsTest {
Arrays.asList(KEY),
CUMULATIVE);
MetricDescriptor metricDescriptor =
- StackdriverExportUtils.createMetricDescriptor(view, PROJECT_ID);
+ StackdriverExportUtils.createMetricDescriptor(
+ view, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX);
assertThat(metricDescriptor.getName())
.isEqualTo(
"projects/"
@@ -427,7 +454,10 @@ public class StackdriverExportUtilsTest {
DISTRIBUTION,
Arrays.asList(KEY),
INTERVAL);
- assertThat(StackdriverExportUtils.createMetricDescriptor(view, PROJECT_ID)).isNull();
+ assertThat(
+ StackdriverExportUtils.createMetricDescriptor(
+ view, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX))
+ .isNull();
}
@Test
@@ -451,13 +481,16 @@ public class StackdriverExportUtilsTest {
CumulativeData.create(Timestamp.fromMillis(1000), Timestamp.fromMillis(2000));
ViewData viewData = ViewData.create(view, aggregationMap, cumulativeData);
List<TimeSeries> timeSeriesList =
- StackdriverExportUtils.createTimeSeriesList(viewData, DEFAULT_RESOURCE);
+ StackdriverExportUtils.createTimeSeriesList(
+ viewData, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
assertThat(timeSeriesList).hasSize(2);
TimeSeries expected1 =
TimeSeries.newBuilder()
.setMetricKind(MetricKind.CUMULATIVE)
.setValueType(MetricDescriptor.ValueType.DISTRIBUTION)
- .setMetric(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_1)))
+ .setMetric(
+ StackdriverExportUtils.createMetric(
+ view, Arrays.asList(VALUE_1), CUSTOM_OPENCENSUS_DOMAIN))
.setResource(MonitoredResource.newBuilder().setType("global"))
.addPoints(
StackdriverExportUtils.createPoint(distributionData1, cumulativeData, DISTRIBUTION))
@@ -466,7 +499,9 @@ public class StackdriverExportUtilsTest {
TimeSeries.newBuilder()
.setMetricKind(MetricKind.CUMULATIVE)
.setValueType(MetricDescriptor.ValueType.DISTRIBUTION)
- .setMetric(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_2)))
+ .setMetric(
+ StackdriverExportUtils.createMetric(
+ view, Arrays.asList(VALUE_2), CUSTOM_OPENCENSUS_DOMAIN))
.setResource(MonitoredResource.newBuilder().setType("global"))
.addPoints(
StackdriverExportUtils.createPoint(distributionData2, cumulativeData, DISTRIBUTION))
@@ -492,7 +527,10 @@ public class StackdriverExportUtilsTest {
DistributionData.create(-1, 1, -1, -1, 0, Arrays.asList(1L, 0L, 0L, 0L, 0L)));
ViewData viewData =
ViewData.create(view, aggregationMap, IntervalData.create(Timestamp.fromMillis(2000)));
- assertThat(StackdriverExportUtils.createTimeSeriesList(viewData, DEFAULT_RESOURCE)).isEmpty();
+ assertThat(
+ StackdriverExportUtils.createTimeSeriesList(
+ viewData, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN))
+ .isEmpty();
}
@Test
@@ -514,13 +552,15 @@ public class StackdriverExportUtilsTest {
CumulativeData.create(Timestamp.fromMillis(1000), Timestamp.fromMillis(2000));
ViewData viewData = ViewData.create(view, aggregationMap, cumulativeData);
List<TimeSeries> timeSeriesList =
- StackdriverExportUtils.createTimeSeriesList(viewData, resource);
+ StackdriverExportUtils.createTimeSeriesList(viewData, resource, CUSTOM_OPENCENSUS_DOMAIN);
assertThat(timeSeriesList)
.containsExactly(
TimeSeries.newBuilder()
.setMetricKind(MetricKind.CUMULATIVE)
.setValueType(MetricDescriptor.ValueType.DOUBLE)
- .setMetric(StackdriverExportUtils.createMetric(view, Arrays.asList(VALUE_1)))
+ .setMetric(
+ StackdriverExportUtils.createMetric(
+ view, Arrays.asList(VALUE_1), CUSTOM_OPENCENSUS_DOMAIN))
.setResource(resource)
.addPoints(StackdriverExportUtils.createPoint(sumData, cumulativeData, SUM))
.build());
diff --git a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java
index 9aa91a80..17ef0a5d 100644
--- a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java
+++ b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverExporterWorkerTest.java
@@ -17,6 +17,8 @@
package io.opencensus.exporter.stats.stackdriver;
import static com.google.common.truth.Truth.assertThat;
+import static io.opencensus.exporter.stats.stackdriver.StackdriverExporterWorker.CUSTOM_OPENCENSUS_DOMAIN;
+import static io.opencensus.exporter.stats.stackdriver.StackdriverExporterWorker.DEFAULT_DISPLAY_NAME_PREFIX;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
@@ -107,6 +109,12 @@ public class StackdriverExporterWorkerTest {
@Test
public void testConstants() {
assertThat(StackdriverExporterWorker.MAX_BATCH_EXPORT_SIZE).isEqualTo(200);
+ assertThat(StackdriverExporterWorker.CUSTOM_METRIC_DOMAIN).isEqualTo("custom.googleapis.com/");
+ assertThat(StackdriverExporterWorker.EXTERNAL_METRIC_DOMAIN)
+ .isEqualTo("external.googleapis.com/");
+ assertThat(StackdriverExporterWorker.CUSTOM_OPENCENSUS_DOMAIN)
+ .isEqualTo("custom.googleapis.com/opencensus/");
+ assertThat(StackdriverExporterWorker.DEFAULT_DISPLAY_NAME_PREFIX).isEqualTo("OpenCensus/");
}
@Test
@@ -127,15 +135,19 @@ public class StackdriverExporterWorkerTest {
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
mockViewManager,
- DEFAULT_RESOURCE);
+ DEFAULT_RESOURCE,
+ null);
worker.export();
verify(mockStub, times(1)).createMetricDescriptorCallable();
verify(mockStub, times(1)).createTimeSeriesCallable();
- MetricDescriptor descriptor = StackdriverExportUtils.createMetricDescriptor(view, PROJECT_ID);
+ MetricDescriptor descriptor =
+ StackdriverExportUtils.createMetricDescriptor(
+ view, PROJECT_ID, CUSTOM_OPENCENSUS_DOMAIN, DEFAULT_DISPLAY_NAME_PREFIX);
List<TimeSeries> timeSeries =
- StackdriverExportUtils.createTimeSeriesList(viewData, DEFAULT_RESOURCE);
+ StackdriverExportUtils.createTimeSeriesList(
+ viewData, DEFAULT_RESOURCE, CUSTOM_OPENCENSUS_DOMAIN);
verify(mockCreateMetricDescriptorCallable, times(1))
.call(
eq(
@@ -170,7 +182,8 @@ public class StackdriverExporterWorkerTest {
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
mockViewManager,
- DEFAULT_RESOURCE);
+ DEFAULT_RESOURCE,
+ null);
worker.export();
verify(mockStub, times(1)).createMetricDescriptorCallable();
@@ -189,7 +202,8 @@ public class StackdriverExporterWorkerTest {
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
mockViewManager,
- DEFAULT_RESOURCE);
+ DEFAULT_RESOURCE,
+ null);
assertThat(worker.registerView(view)).isFalse();
worker.export();
@@ -205,7 +219,8 @@ public class StackdriverExporterWorkerTest {
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
mockViewManager,
- DEFAULT_RESOURCE);
+ DEFAULT_RESOURCE,
+ null);
View view1 =
View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
assertThat(worker.registerView(view1)).isTrue();
@@ -231,7 +246,8 @@ public class StackdriverExporterWorkerTest {
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
mockViewManager,
- DEFAULT_RESOURCE);
+ DEFAULT_RESOURCE,
+ null);
View view =
View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), CUMULATIVE);
assertThat(worker.registerView(view)).isTrue();
@@ -249,13 +265,40 @@ public class StackdriverExporterWorkerTest {
new FakeMetricServiceClient(mockStub),
ONE_SECOND,
mockViewManager,
- DEFAULT_RESOURCE);
+ DEFAULT_RESOURCE,
+ null);
View view =
View.create(VIEW_NAME, VIEW_DESCRIPTION, MEASURE, SUM, Arrays.asList(KEY), INTERVAL);
assertThat(worker.registerView(view)).isFalse();
verify(mockStub, times(0)).createMetricDescriptorCallable();
}
+ @Test
+ public void getDomain() {
+ assertThat(StackdriverExporterWorker.getDomain(null))
+ .isEqualTo("custom.googleapis.com/opencensus/");
+ assertThat(StackdriverExporterWorker.getDomain(""))
+ .isEqualTo("custom.googleapis.com/opencensus/");
+ assertThat(StackdriverExporterWorker.getDomain("custom.googleapis.com/myorg/"))
+ .isEqualTo("custom.googleapis.com/myorg/");
+ assertThat(StackdriverExporterWorker.getDomain("external.googleapis.com/prometheus/"))
+ .isEqualTo("external.googleapis.com/prometheus/");
+ assertThat(StackdriverExporterWorker.getDomain("myorg"))
+ .isEqualTo("custom.googleapis.com/myorg/");
+ }
+
+ @Test
+ public void getDisplayNamePrefix() {
+ assertThat(StackdriverExporterWorker.getDisplayNamePrefix(null)).isEqualTo("OpenCensus/");
+ assertThat(StackdriverExporterWorker.getDisplayNamePrefix("")).isEqualTo("");
+ assertThat(StackdriverExporterWorker.getDisplayNamePrefix("custom.googleapis.com/myorg/"))
+ .isEqualTo("custom.googleapis.com/myorg/");
+ assertThat(
+ StackdriverExporterWorker.getDisplayNamePrefix("external.googleapis.com/prometheus/"))
+ .isEqualTo("external.googleapis.com/prometheus/");
+ assertThat(StackdriverExporterWorker.getDisplayNamePrefix("myorg")).isEqualTo("myorg/");
+ }
+
/*
* MetricServiceClient.createMetricDescriptor() and MetricServiceClient.createTimeSeries() are
* final methods and cannot be mocked. We have to use a mock MetricServiceStub in order to verify
diff --git a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfigurationTest.java b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfigurationTest.java
index cff8ce3b..2d5eba1b 100644
--- a/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfigurationTest.java
+++ b/exporters/stats/stackdriver/src/test/java/io/opencensus/exporter/stats/stackdriver/StackdriverStatsConfigurationTest.java
@@ -41,6 +41,7 @@ public class StackdriverStatsConfigurationTest {
.setType("gce-instance")
.putLabels("instance-id", "instance")
.build();
+ private static final String CUSTOM_PREFIX = "myorg";
@Test
public void testBuild() {
@@ -50,11 +51,13 @@ public class StackdriverStatsConfigurationTest {
.setProjectId(PROJECT_ID)
.setExportInterval(DURATION)
.setMonitoredResource(RESOURCE)
+ .setMetricNamePrefix(CUSTOM_PREFIX)
.build();
assertThat(configuration.getCredentials()).isEqualTo(FAKE_CREDENTIALS);
assertThat(configuration.getProjectId()).isEqualTo(PROJECT_ID);
assertThat(configuration.getExportInterval()).isEqualTo(DURATION);
assertThat(configuration.getMonitoredResource()).isEqualTo(RESOURCE);
+ assertThat(configuration.getMetricNamePrefix()).isEqualTo(CUSTOM_PREFIX);
}
@Test
@@ -64,5 +67,6 @@ public class StackdriverStatsConfigurationTest {
assertThat(configuration.getProjectId()).isNull();
assertThat(configuration.getExportInterval()).isNull();
assertThat(configuration.getMonitoredResource()).isNull();
+ assertThat(configuration.getMetricNamePrefix()).isNull();
}
}