summaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
authorvalerijf <valerijf@yahoo-inc.com>2017-06-16 13:53:39 +0200
committervalerijf <valerijf@yahoo-inc.com>2017-06-16 13:53:39 +0200
commit79882edc300ac9e8ebab8cf32316ff468c60f7ff (patch)
treedf16af6b05a04c8ffb26324c68d823dbe4983ac5 /docker-api
parent1c96b5e99fc297c6e34aa75fd694c43197da71ae (diff)
Move DimensionMetrics to own class, add Builder
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/DimensionMetrics.java67
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/metrics/MetricReceiverWrapper.java65
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();