aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2019-06-04 23:47:27 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-06-14 09:18:46 +0200
commitf33769f868c62b9febef28ad338330cdfc893271 (patch)
tree1154f0382d79d5c314e90e99d63679a257715c95 /node-repository
parentf7137cf256adcebf6a54d6e3f49a18c2b9c4e436 (diff)
Simplify MetricsReporter
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java28
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java37
2 files changed, 25 insertions, 40 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
index 5de621634ea..b463ee0ab19 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
@@ -21,7 +21,6 @@ import com.yahoo.vespa.orchestrator.status.HostStatus;
import com.yahoo.vespa.service.monitor.ServiceMonitor;
import java.time.Duration;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -122,12 +121,8 @@ public class MetricsReporter extends Maintainer {
metric.set("wantToRetire", node.status().wantToRetire() ? 1 : 0, context);
metric.set("wantToDeprovision", node.status().wantToDeprovision() ? 1 : 0, context);
- metric.set("hardwareFailure",
- node.status().hardwareFailureDescription().isPresent() ? 1 : 0,
- context);
- metric.set("hardwareDivergence",
- node.status().hardwareDivergence().isPresent() ? 1 : 0,
- context);
+ metric.set("hardwareFailure", node.status().hardwareFailureDescription().isPresent() ? 1 : 0, context);
+ metric.set("hardwareDivergence", node.status().hardwareDivergence().isPresent() ? 1 : 0, context);
orchestrator.apply(new HostName(node.hostname()))
.map(status -> status == HostStatus.ALLOWED_TO_BE_DOWN ? 1 : 0)
@@ -183,34 +178,25 @@ public class MetricsReporter extends Maintainer {
}
private Metric.Context getContextAt(String... point) {
- if (point.length % 2 != 0) {
+ if (point.length % 2 != 0)
throw new IllegalArgumentException("Dimension specification comes in pairs");
- }
Map<String, String> dimensions = new HashMap<>();
for (int i = 0; i < point.length; i += 2) {
dimensions.put(point[i], point[i + 1]);
}
- Metric.Context context = contextMap.get(dimensions);
- if (context != null) {
- return context;
- }
-
- context = metric.createContext(dimensions);
- contextMap.put(dimensions, context);
- return context;
+ return contextMap.computeIfAbsent(dimensions, metric::createContext);
}
private void updateStateMetrics(LockedNodeList nodes) {
- Map<Node.State, List<Node>> nodesByState = nodes.asList().stream()
+ Map<Node.State, List<Node>> nodesByState = nodes.nodeType(NodeType.tenant).asList().stream()
.collect(Collectors.groupingBy(Node::state));
// Metrics pr state
for (Node.State state : Node.State.values()) {
- List<Node> nodesInState = nodesByState.getOrDefault(state, new ArrayList<>());
- long size = nodesInState.stream().filter(node -> node.type() == NodeType.tenant).count();
- metric.set("hostedVespa." + state.name() + "Hosts", size, null);
+ List<Node> nodesInState = nodesByState.getOrDefault(state, List.of());
+ metric.set("hostedVespa." + state.name() + "Hosts", nodesInState.size(), null);
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
index e1a0f478b86..1f9a833b555 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporterTest.java
@@ -30,7 +30,6 @@ import org.junit.Test;
import java.time.Clock;
import java.time.Duration;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -56,19 +55,19 @@ public class MetricsReporterTest {
DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"),
true);
Node node = nodeRepository.createNode("openStackId", "hostname", Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.tenant);
- nodeRepository.addNodes(Collections.singletonList(node));
+ nodeRepository.addNodes(List.of(node));
Node hostNode = nodeRepository.createNode("openStackId2", "parent", Optional.empty(), nodeFlavors.getFlavorOrThrow("default"), NodeType.proxy);
- nodeRepository.addNodes(Collections.singletonList(hostNode));
+ nodeRepository.addNodes(List.of(hostNode));
Map<String, Number> expectedMetrics = new HashMap<>();
- expectedMetrics.put("hostedVespa.provisionedHosts", 1L);
- expectedMetrics.put("hostedVespa.parkedHosts", 0L);
- expectedMetrics.put("hostedVespa.readyHosts", 0L);
- expectedMetrics.put("hostedVespa.reservedHosts", 0L);
- expectedMetrics.put("hostedVespa.activeHosts", 0L);
- expectedMetrics.put("hostedVespa.inactiveHosts", 0L);
- expectedMetrics.put("hostedVespa.dirtyHosts", 0L);
- expectedMetrics.put("hostedVespa.failedHosts", 0L);
+ expectedMetrics.put("hostedVespa.provisionedHosts", 1);
+ expectedMetrics.put("hostedVespa.parkedHosts", 0);
+ expectedMetrics.put("hostedVespa.readyHosts", 0);
+ expectedMetrics.put("hostedVespa.reservedHosts", 0);
+ expectedMetrics.put("hostedVespa.activeHosts", 0);
+ expectedMetrics.put("hostedVespa.inactiveHosts", 0);
+ expectedMetrics.put("hostedVespa.dirtyHosts", 0);
+ expectedMetrics.put("hostedVespa.failedHosts", 0);
expectedMetrics.put("hostedVespa.pendingRedeployments", 42);
expectedMetrics.put("hostedVespa.docker.totalCapacityDisk", 0.0);
expectedMetrics.put("hostedVespa.docker.totalCapacityMem", 0.0);
@@ -92,7 +91,7 @@ public class MetricsReporterTest {
when(orchestrator.getNodeStatuses()).thenReturn(hostName -> Optional.of(HostStatus.NO_REMARKS));
ServiceModel serviceModel = mock(ServiceModel.class);
when(serviceMonitor.getServiceModelSnapshot()).thenReturn(serviceModel);
- when(serviceModel.getServiceInstancesByHostName()).thenReturn(Collections.emptyMap());
+ when(serviceModel.getServiceInstancesByHostName()).thenReturn(Map.of());
TestMetric metric = new TestMetric();
MetricsReporter metricsReporter = new MetricsReporter(
@@ -120,18 +119,18 @@ public class MetricsReporterTest {
// Allow 4 containers
Set<String> ipAddressPool = ImmutableSet.of("::2", "::3", "::4", "::5");
- Node dockerHost = Node.create("openStackId1", Collections.singleton("::1"), ipAddressPool, "dockerHost",
+ Node dockerHost = Node.create("openStackId1", Set.of("::1"), ipAddressPool, "dockerHost",
Optional.empty(), Optional.empty(), nodeFlavors.getFlavorOrThrow("host"), NodeType.host);
- nodeRepository.addNodes(Collections.singletonList(dockerHost));
+ nodeRepository.addNodes(List.of(dockerHost));
nodeRepository.dirtyRecursively("dockerHost", Agent.system, getClass().getSimpleName());
nodeRepository.setReady("dockerHost", Agent.system, getClass().getSimpleName());
- Node container1 = Node.createDockerNode(Collections.singleton("::2"), Collections.emptySet(), "container1",
+ Node container1 = Node.createDockerNode(Set.of("::2"), Set.of(), "container1",
Optional.of("dockerHost"), new NodeResources(1, 3, 2), NodeType.tenant);
container1 = container1.with(allocation(Optional.of("app1")).get());
nodeRepository.addDockerNodes(new LockedNodeList(List.of(container1), nodeRepository.lockAllocation()));
- Node container2 = Node.createDockerNode(Collections.singleton("::3"), Collections.emptySet(), "container2",
+ Node container2 = Node.createDockerNode(Set.of("::3"), Set.of(), "container2",
Optional.of("dockerHost"), new NodeResources(2, 4, 4), NodeType.tenant);
container2 = container2.with(allocation(Optional.of("app2")).get());
nodeRepository.addDockerNodes(new LockedNodeList(List.of(container2), nodeRepository.lockAllocation()));
@@ -141,7 +140,7 @@ public class MetricsReporterTest {
when(orchestrator.getNodeStatuses()).thenReturn(hostName -> Optional.of(HostStatus.NO_REMARKS));
ServiceModel serviceModel = mock(ServiceModel.class);
when(serviceMonitor.getServiceModelSnapshot()).thenReturn(serviceModel);
- when(serviceModel.getServiceInstancesByHostName()).thenReturn(Collections.emptyMap());
+ when(serviceModel.getServiceInstancesByHostName()).thenReturn(Map.of());
TestMetric metric = new TestMetric();
MetricsReporter metricsReporter = new MetricsReporter(
@@ -154,8 +153,8 @@ public class MetricsReporterTest {
);
metricsReporter.maintain();
- assertEquals(0L, metric.values.get("hostedVespa.readyHosts")); /** Only tenants counts **/
- assertEquals(2L, metric.values.get("hostedVespa.reservedHosts"));
+ assertEquals(0, metric.values.get("hostedVespa.readyHosts")); // Only tenants counts
+ assertEquals(2, metric.values.get("hostedVespa.reservedHosts"));
assertEquals(12.0, metric.values.get("hostedVespa.docker.totalCapacityDisk"));
assertEquals(10.0, metric.values.get("hostedVespa.docker.totalCapacityMem"));