diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2019-06-04 23:47:27 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-06-14 09:18:46 +0200 |
commit | f33769f868c62b9febef28ad338330cdfc893271 (patch) | |
tree | 1154f0382d79d5c314e90e99d63679a257715c95 /node-repository | |
parent | f7137cf256adcebf6a54d6e3f49a18c2b9c4e436 (diff) |
Simplify MetricsReporter
Diffstat (limited to 'node-repository')
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")); |