From dd4f6af83ca7374d6458b4e31d2706a8684c43c8 Mon Sep 17 00:00:00 2001 From: Ola Aunrønning Date: Mon, 10 Sep 2018 15:58:51 +0200 Subject: Check if container is running on logserver --- .../vespa/config/server/ApplicationRepository.java | 24 ++++++++++++++++++++-- .../vespa/config/server/http/LogRetriever.java | 2 +- .../vespa/config/server/http/LogRetrieverTest.java | 12 +++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) (limited to 'configserver/src') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 585a1a67f4d..c0055ff1085 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -10,6 +10,8 @@ import com.yahoo.config.FileReference; import com.yahoo.config.application.api.ApplicationFile; import com.yahoo.config.application.api.ApplicationMetaData; import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.config.model.api.HostInfo; +import com.yahoo.config.model.api.ServiceInfo; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.HostFilter; @@ -63,6 +65,7 @@ import java.time.Clock; import java.time.Duration; import java.time.Instant; import java.util.Arrays; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -483,7 +486,8 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye public HttpResponse getLogs(ApplicationId applicationId) { String logServerHostName = getLogServerHostname(applicationId); - return LogRetriever.getLogs(logServerHostName); + LogRetriever logRetriever = new LogRetriever(); + return logRetriever.getLogs(logServerHostName); } // ---------------- Session operations ---------------------------------------------------------------- @@ -703,7 +707,23 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye Application application = getApplication(applicationId); VespaModel model = (VespaModel) application.getModel(); String logServerHostname = model.getAdmin().getLogserver().getHostName(); - return logServerHostname; + Collection hostInfos = application.getModel().getHosts(); + + HostInfo logServerHostInfo = hostInfos.stream() + .filter(host -> host.getHostname().equals(logServerHostname)) + .findFirst().orElseThrow(() -> new IllegalArgumentException("Could not find HostInfo")); + + ServiceInfo serviceInfo = logServerHostInfo.getServices().stream() + .filter(service -> service.getServiceType().equals("container")) + .findFirst().orElseThrow(() -> new IllegalArgumentException("No container running on logserver host")); + + int port = serviceInfo.getPorts().stream() + .filter(portInfo -> portInfo.getTags().stream() + .filter(tag -> tag.equalsIgnoreCase("http")).count() > 0) + .findFirst().orElseThrow(() -> new IllegalArgumentException("Could not find HTTP port")) + .getPort(); + + return logServerHostname + ":" + port + "/logs"; } /** Returns version to use when deploying application in given environment */ diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java b/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java index f4952b5b9fc..dd60d158313 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java @@ -16,7 +16,7 @@ public class LogRetriever { private final static Logger log = Logger.getLogger(LogRetriever.class.getName()); - public static HttpResponse getLogs(String logServerHostname) { + public HttpResponse getLogs(String logServerHostname) { HttpGet get = new HttpGet(logServerHostname); try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { org.apache.http.HttpResponse response = httpClient.execute(get); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java index 2c3622e3dac..eb819053c05 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.config.server.http; import com.github.tomakehurst.wiremock.junit.WireMockRule; import com.yahoo.container.jdisc.HttpResponse; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -20,14 +21,21 @@ import static org.junit.Assert.assertEquals; public class LogRetrieverTest { private String logServerHostName = "http://localhost:8080/"; + private LogRetriever logRetriever; + @Rule public final WireMockRule wireMock = new WireMockRule(options().port(8080), true); + @Before + public void setup() { + logRetriever = new LogRetriever(); + } + @Test public void testThatLogHandlerPropagatesResponseBody() throws IOException { String expectedBody = "{logs-json}"; stubFor(get(urlEqualTo("/")).willReturn(okJson(expectedBody))); - HttpResponse response = LogRetriever.getLogs(logServerHostName); + HttpResponse response = logRetriever.getLogs(logServerHostName); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); response.render(byteArrayOutputStream); assertEquals(expectedBody, byteArrayOutputStream.toString()); @@ -37,7 +45,7 @@ public class LogRetrieverTest { @Test public void testThatNotFoundLogServerReturns404() throws IOException { stubFor(get(urlEqualTo("/")).willReturn(aResponse().withStatus(200))); - HttpResponse response = LogRetriever.getLogs("http://wrong-host:8080/"); + HttpResponse response = logRetriever.getLogs("http://wrong-host:8080/"); assertEquals(404, response.getStatus()); } -- cgit v1.2.3