diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-07-16 09:56:14 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-07-16 11:12:10 +0200 |
commit | f3efc9b88eba737b5036a60a381ced8960a26560 (patch) | |
tree | 03885dbf38ad5bbe636dd87c3528727779ff8de1 /vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java | |
parent | c608c8384315cebdc8adacb012a8c49a09cc0340 (diff) |
Emit QoS metric for all maintainers
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java b/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java new file mode 100644 index 00000000000..4c05d46d782 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/concurrent/maintenance/JobMetrics.java @@ -0,0 +1,41 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.concurrent.maintenance; + +import java.time.Clock; +import java.time.Instant; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiConsumer; + +/** + * Tracks and forwards maintenance job metrics. + * + * @author mpolden + */ +public class JobMetrics { + + private final Clock clock; + private final BiConsumer<String, Instant> metricConsumer; + + private final Map<String, Instant> successfulRuns = new ConcurrentHashMap<>(); + + public JobMetrics(Clock clock, BiConsumer<String, Instant> metricConsumer) { + this.clock = Objects.requireNonNull(clock); + this.metricConsumer = metricConsumer; + } + + /** Record successful run of given job */ + public void recordSuccessOf(String job) { + successfulRuns.put(job, clock.instant()); + } + + /** Forward metrics for given job to metric consumer */ + public void forward(String job) { + Instant lastSuccess = successfulRuns.get(job); + if (lastSuccess != null) { + metricConsumer.accept(job, lastSuccess); + } + } + +} |