From 6ab3403ff50ac5be6a44a6ccbaad5925bae5ff8e Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Fri, 13 Nov 2015 23:08:02 -0800 Subject: Add metrics for replication delay and retries Change-Id: I22c55de32636bcf19f5723477c603e6450b3479b --- .../gerrit/plugins/replication/PushOne.java | 3 +- .../plugins/replication/ReplicationMetrics.java | 32 +++++++++++++++++++++- 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 executionTime; + Histogram1 executionDelay; + Histogram1 executionRetries; @Inject ReplicationMetrics(MetricMaker metricMaker) { + Field 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); + } + } -- cgit v1.2.3