diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-08-10 16:20:53 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-08-10 16:20:53 +0200 |
commit | dbcc7581e6af3d71434100479c1b1f9fca0ba3c5 (patch) | |
tree | 68a465692bc03de1fea8deee321b86c7ae48096a /node-repository | |
parent | 2d2d3ab3c093098882f2509a12aa6604dd8422ab (diff) |
Emit metric for pending redeployments
Diffstat (limited to 'node-repository')
3 files changed, 23 insertions, 3 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 aeb30320bda..e387fb2d0ed 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 @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Supplier; import java.util.stream.Collectors; /** @@ -36,17 +37,20 @@ public class MetricsReporter extends Maintainer { private final Orchestrator orchestrator; private final ServiceMonitor serviceMonitor; private final Map<Map<String, String>, Metric.Context> contextMap = new HashMap<>(); + private final Supplier<Integer> pendingRedeploymentsSupplier; public MetricsReporter(NodeRepository nodeRepository, Metric metric, Orchestrator orchestrator, ServiceMonitor serviceMonitor, + Supplier<Integer> pendingRedeploymentsSupplier, Duration interval, JobControl jobControl) { super(nodeRepository, interval, jobControl); this.metric = metric; this.orchestrator = orchestrator; this.serviceMonitor = serviceMonitor; + this.pendingRedeploymentsSupplier = pendingRedeploymentsSupplier; } @Override @@ -58,9 +62,14 @@ public class MetricsReporter extends Maintainer { nodes.forEach(node -> updateNodeMetrics(node, servicesByHost)); updateStateMetrics(nodes); + updateMaintenanceMetrics(); updateDockerMetrics(nodes); } + private void updateMaintenanceMetrics() { + metric.set("hostedVespa.pendingRedeployments", pendingRedeploymentsSupplier.get(), null); + } + private void updateNodeMetrics(Node node, Map<HostName, List<ServiceInstance>> servicesByHost) { Metric.Context context; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java index 6985206b78e..454ede61243 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRepositoryMaintenance.java @@ -80,7 +80,7 @@ public class NodeRepositoryMaintenance extends AbstractComponent { dirtyExpirer = new DirtyExpirer(nodeRepository, clock, durationFromEnv("dirty_expiry").orElse(defaults.dirtyExpiry), jobControl); provisionedExpirer = new ProvisionedExpirer(nodeRepository, clock, durationFromEnv("provisioned_expiry").orElse(defaults.provisionedExpiry), jobControl); nodeRebooter = new NodeRebooter(nodeRepository, clock, durationFromEnv("reboot_interval").orElse(defaults.rebootInterval), jobControl); - metricsReporter = new MetricsReporter(nodeRepository, metric, orchestrator, serviceMonitor, durationFromEnv("metrics_interval").orElse(defaults.metricsInterval), jobControl); + metricsReporter = new MetricsReporter(nodeRepository, metric, orchestrator, serviceMonitor, periodicApplicationMaintainer::pendingDeployments, durationFromEnv("metrics_interval").orElse(defaults.metricsInterval), jobControl); infrastructureProvisioner = new InfrastructureProvisioner(provisioner, nodeRepository, infrastructureVersions, durationFromEnv("infrastructure_provision_interval").orElse(defaults.infrastructureProvisionInterval), jobControl); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/monitoring/MetricsReporterTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/monitoring/MetricsReporterTest.java index 5e7c6787973..7157f893970 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/monitoring/MetricsReporterTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/monitoring/MetricsReporterTest.java @@ -70,6 +70,7 @@ public class MetricsReporterTest { expectedMetrics.put("hostedVespa.inactiveHosts", 0L); expectedMetrics.put("hostedVespa.dirtyHosts", 0L); expectedMetrics.put("hostedVespa.failedHosts", 0L); + expectedMetrics.put("hostedVespa.pendingRedeployments", 42); expectedMetrics.put("hostedVespa.docker.totalCapacityDisk", 0.0); expectedMetrics.put("hostedVespa.docker.totalCapacityMem", 0.0); expectedMetrics.put("hostedVespa.docker.totalCapacityCpu", 0.0); @@ -100,8 +101,10 @@ public class MetricsReporterTest { metric, orchestrator, serviceMonitor, + () -> 42, Duration.ofMinutes(1), - new JobControl(nodeRepository.database())); + new JobControl(nodeRepository.database()) + ); metricsReporter.maintain(); assertEquals(expectedMetrics, metric.values); @@ -144,7 +147,15 @@ public class MetricsReporterTest { when(serviceModel.getServiceInstancesByHostName()).thenReturn(Collections.emptyMap()); TestMetric metric = new TestMetric(); - MetricsReporter metricsReporter = new MetricsReporter(nodeRepository, metric, orchestrator, serviceMonitor, Duration.ofMinutes(1), new JobControl(nodeRepository.database())); + MetricsReporter metricsReporter = new MetricsReporter( + nodeRepository, + metric, + orchestrator, + serviceMonitor, + () -> 42, + Duration.ofMinutes(1), + new JobControl(nodeRepository.database()) + ); metricsReporter.maintain(); assertEquals(0L, metric.values.get("hostedVespa.readyHosts")); /** Only tenants counts **/ |