Make sending counter metrics as a raw value configurable
CloudWatch dashboard doesn't have built in delta function. To allow
presenting counters as a graph add configuration parameter to send
delta counters instead of actual value
Feature: Issue 13218
Change-Id: I61026be71ee82d1bed6614f4517f48c547cbd7c2
diff --git a/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporter.java b/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporter.java
index 4803e14..fb9c1d1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporter.java
@@ -43,7 +43,6 @@
.convertDurationsTo(TimeUnit.MILLISECONDS)
.filter(config.getExclusionFilter())
.withZeroValuesSubmission()
- .withReportRawCountValue()
.withHighResolution();
config
@@ -61,6 +60,10 @@
cloudWatchReporterBuilder.withJvmMetrics();
}
+ if (config.getReportRawCountValue()) {
+ cloudWatchReporterBuilder.withReportRawCountValue();
+ }
+
cloudWatchReporter = cloudWatchReporterBuilder.build();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfig.java b/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfig.java
index 62535dd..fed875e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfig.java
@@ -37,6 +37,7 @@
protected static final String KEY_INITIAL_DELAY = "initialDelay";
protected static final String KEY_EXCLUDE_METRICS = "excludeMetrics";
protected static final String KEY_JVM_METRICS = "jvmMetrics";
+ protected static final String KEY_REPORT_RAW_COUNT_VALUE = "reportRawCountValue";
protected static final String DEFAULT_NAMESPACE = "gerrit";
protected static final String DEFAULT_EMPTY_STRING = "";
@@ -44,6 +45,7 @@
protected static final Boolean DEFAULT_JVM_METRICS = false;
protected static final Long DEFAULT_RATE_SECS = 60L;
protected static final Integer DEFAULT_INITIAL_DELAY_SECS = 0;
+ protected static final Boolean DEFAULT_REPORT_RAW_COUNT_VALUE = false;
private final int rate;
private final String namespace;
@@ -51,6 +53,7 @@
private final Boolean dryRun;
private final MetricFilter exclusionFilter;
private final Boolean jvmMetrics;
+ private final Boolean reportRawCountValue;
private final Optional<String> maybeInstanceId;
@Inject
@@ -83,6 +86,8 @@
TimeUnit.SECONDS);
this.exclusionFilter = buildExclusionFilter(pluginConfig.getStringList(KEY_EXCLUDE_METRICS));
+ this.reportRawCountValue =
+ pluginConfig.getBoolean(KEY_REPORT_RAW_COUNT_VALUE, DEFAULT_REPORT_RAW_COUNT_VALUE);
}
public int getRate() {
@@ -121,4 +126,8 @@
public Optional<String> getMaybeInstanceId() {
return maybeInstanceId;
}
+
+ public boolean getReportRawCountValue() {
+ return reportRawCountValue;
+ }
}
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index b29d4d2..493a758 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -87,4 +87,11 @@
* Example: "plugins.*"
In case of invalid pattern, the plugin will fail to load and the relevant error will
-be logged in the _error_log_ file.
\ No newline at end of file
+be logged in the _error_log_ file.
+
+* `plugin.@PLUGIN@.reportRawCountValue` (Optional): Will report the raw value of count
+metrics instead of reporting only the count difference since the last report.
+
+ * Type: Boolean
+ * Default: false
+ * Example: true
\ No newline at end of file
diff --git a/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfigTest.java b/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfigTest.java
index f00ee2d..3866861 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfigTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/GerritCloudwatchReporterConfigTest.java
@@ -56,6 +56,8 @@
assertThat(reporterConfig.getJvmMetrics())
.isEqualTo(GerritCloudwatchReporterConfig.DEFAULT_JVM_METRICS);
assertThat(reporterConfig.getMaybeInstanceId()).isEqualTo(Optional.empty());
+ assertThat(reporterConfig.getReportRawCountValue())
+ .isEqualTo(GerritCloudwatchReporterConfig.DEFAULT_REPORT_RAW_COUNT_VALUE);
}
@Test
@@ -66,6 +68,7 @@
globalPluginConfig.setString(GerritCloudwatchReporterConfig.KEY_INITIAL_DELAY, "20s");
globalPluginConfig.setBoolean(GerritCloudwatchReporterConfig.KEY_DRYRUN, true);
globalPluginConfig.setBoolean(GerritCloudwatchReporterConfig.KEY_JVM_METRICS, true);
+ globalPluginConfig.setBoolean(GerritCloudwatchReporterConfig.KEY_REPORT_RAW_COUNT_VALUE, true);
when(configFactory.getFromGerritConfig(PLUGIN_NAME)).thenReturn(globalPluginConfig);
reporterConfig =
@@ -77,6 +80,7 @@
assertThat(reporterConfig.getDryRun()).isTrue();
assertThat(reporterConfig.getJvmMetrics()).isTrue();
assertThat(reporterConfig.getMaybeInstanceId()).isEqualTo(Optional.of(gerritInstanceId));
+ assertThat(reporterConfig.getReportRawCountValue()).isTrue();
}
@Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/MetricsReporterCloudwatchIT.java b/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/MetricsReporterCloudwatchIT.java
index 94aaf21..ed377fa 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/MetricsReporterCloudwatchIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/metricsreportercloudwatch/MetricsReporterCloudwatchIT.java
@@ -75,6 +75,57 @@
@Test
@GerritConfig(name = "plugin.metrics-reporter-cloudwatch.dryrun", value = "true")
@GerritConfig(name = "plugin.metrics-reporter-cloudwatch.rate", value = TEST_TIMEOUT)
+ public void shouldReportMetricValueAsDeltaToCloudwatch() throws Exception {
+ InMemoryLoggerAppender dryRunMetricsOutput = newInMemoryLogger();
+
+ testCounterMetric.incrementBy(5);
+
+ waitUntil(
+ () ->
+ dryRunMetricsOutput
+ .metricsStream()
+ .filter(l -> l.contains("MetricName=" + TEST_METRIC_NAME))
+ .anyMatch(l -> l.contains("Value=5.0")));
+
+ testCounterMetric.incrementBy(3);
+
+ waitUntil(
+ () ->
+ dryRunMetricsOutput
+ .metricsStream()
+ .filter(l -> l.contains("MetricName=" + TEST_METRIC_NAME))
+ .anyMatch(l -> l.contains("Value=3.0")));
+ }
+
+ @Test
+ @GerritConfig(name = "plugin.metrics-reporter-cloudwatch.dryrun", value = "true")
+ @GerritConfig(name = "plugin.metrics-reporter-cloudwatch.rate", value = TEST_TIMEOUT)
+ @GerritConfig(name = "plugin.metrics-reporter-cloudwatch.reportRawCountValue", value = "true")
+ public void shouldReportMetricValueAsRawToCloudwatch() throws Exception {
+ InMemoryLoggerAppender dryRunMetricsOutput = newInMemoryLogger();
+
+ testCounterMetric.incrementBy(5);
+
+ waitUntil(
+ () ->
+ dryRunMetricsOutput
+ .metricsStream()
+ .filter(l -> l.contains("MetricName=" + TEST_METRIC_NAME))
+ .anyMatch(l -> l.contains("Value=5.0")));
+
+ testCounterMetric.incrementBy(3);
+
+ waitUntil(
+ () ->
+ dryRunMetricsOutput
+ .metricsStream()
+ .filter(l -> l.contains("MetricName=" + TEST_METRIC_NAME))
+ .anyMatch(l -> l.contains("Value=8.0")));
+ }
+
+ @Test
+ @GerritConfig(name = "plugin.metrics-reporter-cloudwatch.dryrun", value = "true")
+ @GerritConfig(name = "plugin.metrics-reporter-cloudwatch.rate", value = TEST_TIMEOUT)
public void shouldReportMetricValueToCloudwatch() throws Exception {
InMemoryLoggerAppender dryRunMetricsOutput = newInMemoryLogger();