summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2019-03-07 16:04:15 +0100
committerGitHub <noreply@github.com>2019-03-07 16:04:15 +0100
commit9e581cc8ba98023a959068f211615c62caa949cc (patch)
treee9fa651d5aada332fe9f5789b17081f71c2de19d
parent521a9739cbf8f1d9e9d531e540ed89676a35cc94 (diff)
parent38ac2f93e366488f07d642f8635ad8e0c22950e9 (diff)
Merge pull request #8696 from vespa-engine/freva/logs-through-zone-v2
Set Content-Type and Content-Encoding
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/http/LogRetriever.java45
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java55
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogHandler.java9
4 files changed, 27 insertions, 83 deletions
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 61bbc145740..62103b51eaa 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
@@ -12,7 +12,6 @@ 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.model.api.container.ContainerServiceType;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostFilter;
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 c04a2bc35c6..800ebb13095 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
@@ -2,54 +2,45 @@
package com.yahoo.vespa.config.server.http;
import com.yahoo.container.jdisc.HttpResponse;
+import org.apache.http.Header;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.OutputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
+import java.io.UncheckedIOException;
+import java.util.Optional;
public class LogRetriever {
- private final static Logger log = Logger.getLogger(LogRetriever.class.getName());
-
public HttpResponse getLogs(String logServerHostname) {
HttpGet get = new HttpGet(logServerHostname);
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
- org.apache.http.HttpResponse response = httpClient.execute(get);
- String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
- return new LogsResponse(response.getStatusLine().getStatusCode()) {
- @Override
- public void render(OutputStream outputStream) throws IOException {
- if (response.getEntity() != null ) outputStream.write(responseBody.getBytes());
- }
- };
+ return new ProxyResponse(httpClient.execute(get));
} catch (IOException e) {
- log.log(Level.WARNING, "Failed to retrieve logs from log server", e);
- return new LogsResponse(404) {
- @Override
- public void render(OutputStream outputStream) throws IOException {
- outputStream.write(e.toString().getBytes());
- }
-
- };
+ throw new UncheckedIOException(e);
}
-
}
- private abstract static class LogsResponse extends HttpResponse {
+ private static class ProxyResponse extends HttpResponse {
+ private final org.apache.http.HttpResponse clientResponse;
- LogsResponse(int status) {
- super(status);
+ private ProxyResponse(org.apache.http.HttpResponse clientResponse) {
+ super(clientResponse.getStatusLine().getStatusCode());
+ this.clientResponse = clientResponse;
}
@Override
public String getContentType() {
- return "application/json";
+ return Optional.ofNullable(clientResponse.getFirstHeader("Content-Type"))
+ .map(Header::getValue)
+ .orElseGet(super::getContentType);
+ }
+
+ @Override
+ public void render(OutputStream outputStream) throws IOException {
+ clientResponse.getEntity().writeTo(outputStream);
}
}
}
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
deleted file mode 100644
index a2c63047878..00000000000
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/LogRetrieverTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-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;
-
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
-import static com.github.tomakehurst.wiremock.client.WireMock.get;
-import static com.github.tomakehurst.wiremock.client.WireMock.okJson;
-import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
-import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
-import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
-import static org.junit.Assert.assertEquals;
-
-public class LogRetrieverTest {
-
- private LogRetriever logRetriever;
-
- @Rule
- public final WireMockRule wireMock = new WireMockRule(options().dynamicPort(), true);
-
- @Before
- public void setup() {
- logRetriever = new LogRetriever();
- }
-
- @Test
- public void testThatLogHandlerPropagatesResponseBody() throws IOException {
- String expectedBody = "{logs-json}";
- stubFor(get(urlEqualTo("/")).willReturn(okJson(expectedBody)));
- String logServerUri = "http://localhost:" + wireMock.port() +"/";
- HttpResponse response = logRetriever.getLogs(logServerUri);
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- response.render(byteArrayOutputStream);
- assertEquals(expectedBody, byteArrayOutputStream.toString());
- assertEquals(200, response.getStatus());
- }
-
- @Test
- public void testThatNotFoundLogServerReturns404() {
- stubFor(get(urlEqualTo("/")).willReturn(aResponse().withStatus(200)));
- HttpResponse response = logRetriever.getLogs("http://wrong-host:" + wireMock.port() + "/");
- assertEquals(404, response.getStatus());
- }
-
-
-
-}
diff --git a/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
index e4c6c9a0918..f6bdeb02b9c 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java
@@ -42,6 +42,10 @@ public class LogHandler extends ThreadedHttpRequestHandler {
try {
if (request.hasProperty("streaming")) {
return new HttpResponse(200) {
+ {
+ headers().add("Content-Encoding", "gzip");
+ }
+
@Override
public void render(OutputStream outputStream) {
logReader.writeLogs(outputStream, earliestLogThreshold, latestLogThreshold);
@@ -65,6 +69,11 @@ public class LogHandler extends ThreadedHttpRequestHandler {
outputStreamWriter.write(responseJSON.toString());
outputStreamWriter.close();
}
+
+ @Override
+ public String getContentType() {
+ return "application/json";
+ }
};
}
}