diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2019-12-02 09:20:01 +0100 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2019-12-02 13:06:04 +0100 |
commit | 0dc610dd56b0b655745829fbb0256046039a99e2 (patch) | |
tree | f022b5a243de80a112abcf2e054e7152d1fc924a /metrics-proxy | |
parent | e346de03f3ff1b37e9b7ce94399492fdebcd5ac6 (diff) |
Add TTL to external metrics
Diffstat (limited to 'metrics-proxy')
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsManager.java | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsManager.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsManager.java index fc81bd1a0ee..27d4f06ab40 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsManager.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/core/MetricsManager.java @@ -46,6 +46,8 @@ public class MetricsManager { private final NodeDimensions nodeDimensions; private volatile Map<DimensionId, String> extraDimensions = new HashMap<>(); + private volatile Instant externalMetricsUpdateTime = Instant.now(); + private static final Duration EXTERNAL_DIMENSIONS_TTL = Duration.ofMinutes(10); public MetricsManager(VespaServices vespaServices, VespaMetrics vespaMetrics, @@ -88,6 +90,7 @@ public class MetricsManager { List<MetricsPacket.Builder> result = vespaMetrics.getMetrics(services); log.log(DEBUG, () -> "Got " + result.size() + " metrics packets for vespa services."); + clearStaleMetrics(); List<MetricsPacket.Builder> externalPackets = externalMetrics.getMetrics().stream() .filter(MetricsPacket.Builder::hasMetrics) .collect(toList()); @@ -145,14 +148,23 @@ public class MetricsManager { } public void setExtraMetrics(List<MetricsPacket.Builder> packets) { + externalMetricsUpdateTime = Instant.now(); extraDimensions = extractConfigserverDimensions(packets); externalMetrics.setExtraMetrics(packets); } public Map<DimensionId, String> getExtraDimensions() { + clearStaleMetrics(); return this.extraDimensions; } + private void clearStaleMetrics() { + if (Duration.between(externalMetricsUpdateTime, Instant.now()).getSeconds() > EXTERNAL_DIMENSIONS_TTL.getSeconds()) { + this.extraDimensions = new HashMap<>(); + externalMetrics.setExtraMetrics(Collections.emptyList()); + } + } + /** * Returns a space separated list of all distinct service names. */ |