diff options
author | valerijf <valerijf@yahoo-inc.com> | 2017-06-16 13:53:39 +0200 |
---|---|---|
committer | valerijf <valerijf@yahoo-inc.com> | 2017-06-16 13:53:39 +0200 |
commit | 79882edc300ac9e8ebab8cf32316ff468c60f7ff (patch) | |
tree | df16af6b05a04c8ffb26324c68d823dbe4983ac5 /docker-api | |
parent | 1c96b5e99fc297c6e34aa75fd694c43197da71ae (diff) |
Move DimensionMetrics to own class, add Builder
Diffstat (limited to 'docker-api')
2 files changed, 76 insertions, 56 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/DimensionMetrics.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/DimensionMetrics.java new file mode 100644 index 00000000000..2cccee1e066 --- /dev/null +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/DimensionMetrics.java @@ -0,0 +1,67 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.dockerapi.metrics; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * @author freva + */ +public class DimensionMetrics { + private final static ObjectMapper objectMapper = new ObjectMapper(); + + private final String application; + private final Dimensions dimensions; + private final Map<String, Number> metrics; + + DimensionMetrics(String application, Dimensions dimensions, Map<String, Number> metrics) { + this.application = application; + this.dimensions = dimensions; + this.metrics = metrics; + } + + Map<String, Object> getMetrics() { + final Map<String, Object> routing = new HashMap<>(); + final Map<String, Object> routingYamas = new HashMap<>(); + routing.put("yamas", routingYamas); + routingYamas.put("namespaces", Collections.singletonList("Vespa")); + + Map<String, Object> report = new HashMap<>(); + report.put("application", application); + report.put("dimensions", dimensions.dimensionsMap); + report.put("metrics", metrics); + report.put("routing", routing); + return report; + } + + public String toSecretAgentReport() throws JsonProcessingException { + Map<String, Object> report = getMetrics(); + report.put("timestamp", System.currentTimeMillis() / 1000); + + return objectMapper.writeValueAsString(report); + } + + public static class Builder { + private final String application; + private final Dimensions dimensions; + private final Map<String, Number> metrics = new HashMap<>(); + + public Builder(String application, Dimensions dimensions) { + this.application = application; + this.dimensions = dimensions; + } + + public Builder withMetric(String metricName, Number metricValue) { + metrics.put(metricName, metricValue); + return this; + } + + public DimensionMetrics build() { + return new DimensionMetrics(application, dimensions, metrics); + } + } +} diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java index d9a516312ff..31edf49e80e 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java @@ -1,14 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.dockerapi.metrics; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Inject; import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.metrics.simple.Point; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -28,7 +25,6 @@ public class MetricReceiverWrapper { public static final String APPLICATION_DOCKER = "docker"; public static final String APPLICATION_NODE = "vespa.node"; - private final static ObjectMapper objectMapper = new ObjectMapper(); private final Object monitor = new Object(); private final Map<String, ApplicationMetrics> applicationMetrics = new HashMap<>(); // key is application name private final MetricReceiver metricReceiver; @@ -71,22 +67,13 @@ public class MetricReceiverWrapper { } } - public void unsetMetricsForContainer(String hostname) { - synchronized (monitor) { - applicationMetrics.values() - .forEach(m -> m.metricsByDimensions.keySet() - .removeIf(d -> d.dimensionsMap.containsKey("host") && - d.dimensionsMap.get("host").equals(hostname))); - } - } - public List<DimensionMetrics> getAllMetrics() { synchronized (monitor) { List<DimensionMetrics> dimensionMetrics = new ArrayList<>(); - applicationMetrics.entrySet() - .forEach(e -> e.getValue().metricsByDimensions().entrySet().stream() - .map(entry -> new DimensionMetrics(e.getKey(), entry.getKey(), entry.getValue())) - .forEach(dimensionMetrics::add)); + applicationMetrics.forEach((application, applicationMetrics) -> applicationMetrics.metricsByDimensions().entrySet().stream() + .map(entry -> new DimensionMetrics(application, entry.getKey(), + entry.getValue().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, value -> value.getValue().getValue())))) + .forEach(dimensionMetrics::add)); return dimensionMetrics; } } @@ -95,11 +82,11 @@ public class MetricReceiverWrapper { public Set<Map<String, Object>> getAllMetricsRaw() { synchronized (monitor) { Set<Map<String, Object>> dimensionMetrics = new HashSet<>(); - applicationMetrics.entrySet() - .forEach(e -> e.getValue().metricsByDimensions().entrySet().stream() - .map(entry -> new DimensionMetrics(e.getKey(), entry.getKey(), entry.getValue())) - .map(DimensionMetrics::getMetrics) - .forEach(dimensionMetrics::add)); + applicationMetrics.forEach((application, applicationMetrics) -> applicationMetrics.metricsByDimensions().entrySet().stream() + .map(entry -> new DimensionMetrics(application, entry.getKey(), + entry.getValue().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, value -> value.getValue().getValue())))) + .map(DimensionMetrics::getMetrics) + .forEach(dimensionMetrics::add)); return dimensionMetrics; } } @@ -113,40 +100,6 @@ public class MetricReceiverWrapper { } } - public class DimensionMetrics { - private final String application; - private final Dimensions dimensions; - private final Map<String, Object> metrics; - - DimensionMetrics(String application, Dimensions dimensions, Map<String, MetricValue> metricValues) { - this.application = application; - this.dimensions = dimensions; - this.metrics = metricValues.entrySet().stream().collect( - Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getValue())); - } - - private Map<String, Object> getMetrics() { - final Map<String, Object> routing = new HashMap<>(); - final Map<String, Object> routingYamas = new HashMap<>(); - routing.put("yamas", routingYamas); - routingYamas.put("namespaces", Arrays.asList("Vespa")); - - Map<String, Object> report = new HashMap<>(); - report.put("application", application); - report.put("dimensions", dimensions.dimensionsMap); - report.put("metrics", metrics); - report.put("routing", routing); - return report; - } - - public String toSecretAgentReport() throws JsonProcessingException { - Map<String, Object> report = getMetrics(); - report.put("timestamp", System.currentTimeMillis() / 1000); - - return objectMapper.writeValueAsString(report); - } - } - private Map<Dimensions, Map<String, MetricValue>> getOrCreateApplicationMetrics(String application) { if (! applicationMetrics.containsKey(application)) { ApplicationMetrics metrics = new ApplicationMetrics(); |