summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@sonymobile.com>2015-11-13 23:08:02 -0800
committerDavid Pursehouse <david.pursehouse@sonymobile.com>2016-02-23 15:01:52 +0900
commit6ab3403ff50ac5be6a44a6ccbaad5925bae5ff8e (patch)
treee796dceb18dd26adf6c7b77340277c8792b36840
parente1af113b750f8c73a44ff3e544513eb75854b77b (diff)
Add metrics for replication delay and retries
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java3
-rw-r--r--src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationMetrics.java32
2 files changed, 33 insertions, 2 deletions
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
index 002361a..316c8df 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
@@ -289,10 +289,11 @@ class PushOne implements ProjectRunnable {
Timer1.Context context = metrics.start(config.getName());
try {
long startedAt = context.getStartTime();
+ long delay = NANOSECONDS.toMillis(startedAt - createdAt);
+ metrics.record(config.getName(), delay, retryCount);
git = gitManager.openRepository(projectName);
runImpl();
long elapsed = NANOSECONDS.toMillis(context.stop());
- long delay = NANOSECONDS.toMillis(startedAt - createdAt);
repLog.info("Replication to " + uri + " completed in "
+ (elapsed) + "ms, "
+ (delay) + "ms delay, " + retryCount + " retries");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationMetrics.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationMetrics.java
index ebfda33..e02084d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationMetrics.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationMetrics.java
@@ -16,6 +16,7 @@ package com.googlesource.gerrit.plugins.replication;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.Field;
+import com.google.gerrit.metrics.Histogram1;
import com.google.gerrit.metrics.MetricMaker;
import com.google.gerrit.metrics.Timer1;
import com.google.inject.Inject;
@@ -24,15 +25,33 @@ import com.google.inject.Singleton;
@Singleton
public class ReplicationMetrics {
Timer1<String> executionTime;
+ Histogram1<String> executionDelay;
+ Histogram1<String> executionRetries;
@Inject
ReplicationMetrics(MetricMaker metricMaker) {
+ Field<String> DEST_FIELD = Field.ofString("destination");
+
executionTime = metricMaker.newTimer(
"replication_latency",
new Description("Time spent pushing to remote destination.")
.setCumulative()
.setUnit(Description.Units.MILLISECONDS),
- Field.ofString("destination"));
+ DEST_FIELD);
+
+ executionDelay = metricMaker.newHistogram(
+ "replication_delay",
+ new Description("Time spent waiting before pushing to remote destination")
+ .setCumulative()
+ .setUnit(Description.Units.MILLISECONDS),
+ DEST_FIELD);
+
+ executionRetries = metricMaker.newHistogram(
+ "replication_retries",
+ new Description("Number of retries when pushing to remote destination")
+ .setCumulative()
+ .setUnit("retries"),
+ DEST_FIELD);
}
/**
@@ -44,4 +63,15 @@ public class ReplicationMetrics {
return executionTime.start(name);
}
+ /**
+ * Record the replication delay and retry metrics for a destination.
+ * @param name the destination name.
+ * @param delay replication delay in milliseconds.
+ * @param retries number of retries.
+ */
+ void record(String name, long delay, long retries) {
+ executionDelay.record(name, delay);
+ executionRetries.record(name, retries);
+ }
+
}