diff options
author | olaaun <olaa@oath.com> | 2018-10-26 08:55:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-26 08:55:17 +0200 |
commit | 57ba28e794416ae7cc6e14660249459dac7df937 (patch) | |
tree | 263799b7a75fd7c68f01c44c3d7f7d0615ab8e8a /controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java | |
parent | 5c771a79843d6ed595c8d419f7ad4ffc42c0fbf7 (diff) |
Olaaun/metric maintaier use api (#7402)
* Metric maintainers now feed to API instead of writing directly to DB
* Only feed once per maintain run
Diffstat (limited to 'controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java')
-rw-r--r-- | controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java | 112 |
1 files changed, 26 insertions, 86 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java index e11440a372c..b0d28e05744 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java @@ -1,27 +1,30 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.maintenance; -import com.yahoo.config.provision.ApplicationId; +import com.github.tomakehurst.wiremock.junit.WireMockRule; +import com.github.tomakehurst.wiremock.stubbing.ServeEvent; +import com.github.tomakehurst.wiremock.verification.LoggedRequest; import com.yahoo.config.provision.Environment; import com.yahoo.vespa.hosted.controller.Application; -import com.yahoo.vespa.hosted.controller.Controller; -import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; -import com.yahoo.vespa.hosted.controller.application.Deployment; -import com.yahoo.vespa.hosted.controller.application.RotationStatus; +import com.yahoo.vespa.hosted.controller.authority.config.ApiAuthorityConfig; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; import com.yahoo.vespa.hosted.controller.integration.MetricsServiceMock; +import org.junit.Rule; import org.junit.Test; import java.time.Duration; -import java.time.Instant; -import java.util.function.Supplier; - -import static java.time.temporal.ChronoUnit.MILLIS; +import java.util.List; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.findAll; +import static com.github.tomakehurst.wiremock.client.WireMock.getAllServeEvents; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; /** * @author smorgrav @@ -29,69 +32,16 @@ import static org.junit.Assert.assertFalse; */ public class DeploymentMetricsMaintainerTest { - @Test - public void updates_metrics() { - ControllerTester tester = new ControllerTester(); - ApplicationId appId = tester.createAndDeploy("tenant1", "domain1", "app1", - Environment.dev, 123).id(); - DeploymentMetricsMaintainer maintainer = maintainer(tester.controller()); - Supplier<Application> app = tester.application(appId); - Supplier<Deployment> deployment = () -> app.get().deployments().values().stream().findFirst().get(); - - // No metrics gathered yet - assertEquals(0, app.get().metrics().queryServiceQuality(), 0); - assertEquals(0, deployment.get().metrics().documentCount(), 0); - assertFalse("Never received any queries", deployment.get().activity().lastQueried().isPresent()); - assertFalse("Never received any writes", deployment.get().activity().lastWritten().isPresent()); - - // Metrics are gathered and saved to application - maintainer.maintain(); - assertEquals(0.5, app.get().metrics().queryServiceQuality(), Double.MIN_VALUE); - assertEquals(0.7, app.get().metrics().writeServiceQuality(), Double.MIN_VALUE); - assertEquals(1, deployment.get().metrics().queriesPerSecond(), Double.MIN_VALUE); - assertEquals(2, deployment.get().metrics().writesPerSecond(), Double.MIN_VALUE); - assertEquals(3, deployment.get().metrics().documentCount(), Double.MIN_VALUE); - assertEquals(4, deployment.get().metrics().queryLatencyMillis(), Double.MIN_VALUE); - assertEquals(5, deployment.get().metrics().writeLatencyMillis(), Double.MIN_VALUE); - Instant t1 = tester.clock().instant().truncatedTo(MILLIS); - assertEquals(t1, deployment.get().activity().lastQueried().get()); - assertEquals(t1, deployment.get().activity().lastWritten().get()); - - // Time passes. Activity is updated as app is still receiving traffic - tester.clock().advance(Duration.ofHours(1)); - Instant t2 = tester.clock().instant().truncatedTo(MILLIS); - maintainer.maintain(); - assertEquals(t2, deployment.get().activity().lastQueried().get()); - assertEquals(t2, deployment.get().activity().lastWritten().get()); - assertEquals(1, deployment.get().activity().lastQueriesPerSecond().getAsDouble(), Double.MIN_VALUE); - assertEquals(2, deployment.get().activity().lastWritesPerSecond().getAsDouble(), Double.MIN_VALUE); - - // Query traffic disappears. Query activity stops updating - tester.clock().advance(Duration.ofHours(1)); - Instant t3 = tester.clock().instant().truncatedTo(MILLIS); - tester.metricsService().setMetric("queriesPerSecond", 0D); - tester.metricsService().setMetric("writesPerSecond", 5D); - maintainer.maintain(); - assertEquals(t2, deployment.get().activity().lastQueried().get()); - assertEquals(t3, deployment.get().activity().lastWritten().get()); - assertEquals(1, deployment.get().activity().lastQueriesPerSecond().getAsDouble(), Double.MIN_VALUE); - assertEquals(5, deployment.get().activity().lastWritesPerSecond().getAsDouble(), Double.MIN_VALUE); - - // Feed traffic disappears. Feed activity stops updating - tester.clock().advance(Duration.ofHours(1)); - tester.metricsService().setMetric("writesPerSecond", 0D); - maintainer.maintain(); - assertEquals(t2, deployment.get().activity().lastQueried().get()); - assertEquals(t3, deployment.get().activity().lastWritten().get()); - assertEquals(1, deployment.get().activity().lastQueriesPerSecond().getAsDouble(), Double.MIN_VALUE); - assertEquals(5, deployment.get().activity().lastWritesPerSecond().getAsDouble(), Double.MIN_VALUE); - } + @Rule + public WireMockRule wireMockRule = new WireMockRule(4443); @Test - public void updates_rotation_status() { + public void maintain() { DeploymentTester tester = new DeploymentTester(); MetricsServiceMock metricsService = tester.controllerTester().metricsService(); - DeploymentMetricsMaintainer maintainer = maintainer(tester.controller()); + ApiAuthorityConfig.Builder apiAuthorityConfigBuilder = new ApiAuthorityConfig.Builder().authorities("http://localhost:4443/"); + ApiAuthorityConfig apiAuthorityConfig = new ApiAuthorityConfig(apiAuthorityConfigBuilder); + DeploymentMetricsMaintainer maintainer = new DeploymentMetricsMaintainer(tester.controller(), Duration.ofDays(1), new JobControl(tester.controller().curator()), apiAuthorityConfig); Application application = tester.createApplication("app1", "tenant1", 1, 1L); ZoneId zone1 = ZoneId.from("prod", "us-west-1"); ZoneId zone2 = ZoneId.from("prod", "us-east-3"); @@ -105,32 +55,22 @@ public class DeploymentMetricsMaintainerTest { .build(); tester.deployCompletely(application, applicationPackage); - Supplier<Application> app = () -> tester.application(application.id()); - Supplier<Deployment> deployment1 = () -> app.get().deployments().get(zone1); - Supplier<Deployment> deployment2 = () -> app.get().deployments().get(zone2); String assignedRotation = "rotation-fqdn-01"; tester.controllerTester().metricsService().addRotation(assignedRotation); - // No status gathered yet - assertEquals(RotationStatus.unknown, app.get().rotationStatus(deployment1.get())); - assertEquals(RotationStatus.unknown, app.get().rotationStatus(deployment2.get())); - // One rotation out, one in metricsService.setZoneIn(assignedRotation, "proxy.prod.us-west-1.vip.test"); metricsService.setZoneOut(assignedRotation,"proxy.prod.us-east-3.vip.test"); - maintainer.maintain(); - assertEquals(RotationStatus.in, app.get().rotationStatus(deployment1.get())); - assertEquals(RotationStatus.out, app.get().rotationStatus(deployment2.get())); - // All rotations in - metricsService.setZoneIn(assignedRotation,"proxy.prod.us-east-3.vip.test"); + wireMockRule.stubFor(post(urlEqualTo("/metricforwarding/v1/deploymentmetrics/")) + .willReturn(aResponse().withStatus(200))); maintainer.maintain(); - assertEquals(RotationStatus.in, app.get().rotationStatus(deployment1.get())); - assertEquals(RotationStatus.in, app.get().rotationStatus(deployment2.get())); - } - private static DeploymentMetricsMaintainer maintainer(Controller controller) { - return new DeploymentMetricsMaintainer(controller, Duration.ofDays(1), new JobControl(controller.curator())); + List<ServeEvent> allServeEvents = getAllServeEvents(); + assertEquals(1, allServeEvents.size()); + LoggedRequest request = findAll(postRequestedFor(urlEqualTo("/metricforwarding/v1/deploymentmetrics/"))).get(0); + String expectedBody = "[{\"applicationId\":\"tenant1:app1:default\",\"applicationMetrics\":{\"queryServiceQuality\":0.5,\"writeServiceQuality\":0.7},\"rotationStatus\":[{\"hostname\":\"proxy.prod.us-east-3.vip.test\",\"rotationStatus\":\"out\"},{\"hostname\":\"proxy.prod.us-west-1.vip.test\",\"rotationStatus\":\"in\"}],\"deploymentMetrics\":[{\"zoneId\":\"prod.us-west-1\",\"queriesPerSecond\":1.0,\"writesPerSecond\":2.0,\"documentCount\":3.0,\"queryLatencyMillis\":4.0,\"writeLatencyMillis\":5.0},{\"zoneId\":\"prod.us-east-3\",\"queriesPerSecond\":1.0,\"writesPerSecond\":2.0,\"documentCount\":3.0,\"queryLatencyMillis\":4.0,\"writeLatencyMillis\":5.0}]}]"; + assertEquals(expectedBody, new String(request.getBody())); } } |