diff options
author | Ola Aunrønning <ola.aunroe@gmail.com> | 2018-08-24 14:54:27 +0200 |
---|---|---|
committer | Ola Aunrønning <ola.aunroe@gmail.com> | 2018-09-10 13:07:15 +0200 |
commit | 44053e445e8f893514667325be40613830056e6e (patch) | |
tree | bd1f6be2b7ec2f419d2a9363de96fecb32988152 /container-core | |
parent | 79fbe75a324084d7e871e4aa7b82500e7ccd35b3 (diff) |
Add functionality for retrieving logs
Diffstat (limited to 'container-core')
5 files changed, 113 insertions, 0 deletions
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 new file mode 100644 index 00000000000..474d7d7321a --- /dev/null +++ b/container-core/src/main/java/com/yahoo/container/handler/LogHandler.java @@ -0,0 +1,31 @@ +package com.yahoo.container.handler; + +import com.fasterxml.jackson.core.JsonFactory; +import com.google.inject.Inject; +import com.yahoo.container.jdisc.HttpRequest; +import com.yahoo.container.jdisc.HttpResponse; +import com.yahoo.container.jdisc.ThreadedHttpRequestHandler; +import java.io.IOException; +import java.io.OutputStream; +import java.util.concurrent.Executor; + +public class LogHandler extends ThreadedHttpRequestHandler { + + private static final String LOG_DIRECTORY = "/home/y/logs/vespa/"; + + @Inject + public LogHandler(Executor executor) { + super(executor); + } + + @Override + public HttpResponse handle(HttpRequest request) { + + return new HttpResponse(200) { + @Override + public void render(OutputStream outputStream) throws IOException { + LogReader.writeToOutputStream(LOG_DIRECTORY, outputStream); + } + }; + } +} diff --git a/container-core/src/main/java/com/yahoo/container/handler/LogReader.java b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java new file mode 100644 index 00000000000..e35ea748c0e --- /dev/null +++ b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java @@ -0,0 +1,44 @@ +package com.yahoo.container.handler; + +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonGenerator; +import org.apache.commons.codec.binary.Base64; +import org.json.JSONException; +import org.json.JSONObject; + +import javax.xml.bind.DatatypeConverter; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.nio.file.Files; + +public class LogReader { + + protected static void writeToOutputStream(String logDirectory, OutputStream outputStream) throws IOException { + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); + JSONObject json = new JSONObject(); + File root = new File(logDirectory); + try { + traverse_folder(root, json); + } catch (JSONException e) { + outputStreamWriter.write("Failed to create log JSON"); + } + outputStreamWriter.write(json.toString()); + outputStreamWriter.close(); + } + + private static void traverse_folder(File root, JSONObject json) throws IOException, JSONException { + for(File child : root.listFiles()) { + JSONObject childJson = new JSONObject(); + if(child.isFile()) { + json.put(child.getName(), DatatypeConverter.printBase64Binary(Files.readAllBytes(child.toPath()))); + } + else { + json.put(child.getName(), childJson); + traverse_folder(child, childJson); + } + } + } +} diff --git a/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java b/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java new file mode 100644 index 00000000000..ff6ea74a411 --- /dev/null +++ b/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java @@ -0,0 +1,36 @@ +package com.yahoo.container.handler; + +import org.junit.Before; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; + +import static org.junit.Assert.*; + +public class LogReaderTest { + + ByteArrayOutputStream outputStream; + + @Before + public void setup() { + outputStream = new ByteArrayOutputStream(); + } + + @Test + public void testThatFilesAreWrittenCorrectlyToOutputStream() throws Exception{ + String logDirectory = "src/test/resources/logfolder/"; + LogReader.writeToOutputStream(logDirectory, outputStream); + String expected = "{\"subfolder\":{\"log2.log\":\"VGhpcyBpcyBhbm90aGVyIGxvZyBmaWxl\"},\"log1.log\":\"VGhpcyBpcyBvbmUgbG9nIGZpbGU=\"}"; + String actual = new String(outputStream.toByteArray()); + assertEquals(expected, actual); + } + + @Test + public void testNothingISWrittenToOutputStreamWithEmptyLogFolder() throws Exception { + String logDirectory = "src/test/resources/emptylogfolder/"; + LogReader.writeToOutputStream(logDirectory, outputStream); + String expected = "{}"; + String actual = new String(outputStream.toByteArray()); + assertEquals(expected, actual); + } +}
\ No newline at end of file diff --git a/container-core/src/test/resources/logfolder/log1.log b/container-core/src/test/resources/logfolder/log1.log new file mode 100644 index 00000000000..bb85d5a4950 --- /dev/null +++ b/container-core/src/test/resources/logfolder/log1.log @@ -0,0 +1 @@ +This is one log file
\ No newline at end of file diff --git a/container-core/src/test/resources/logfolder/subfolder/log2.log b/container-core/src/test/resources/logfolder/subfolder/log2.log new file mode 100644 index 00000000000..aee6eaca2e8 --- /dev/null +++ b/container-core/src/test/resources/logfolder/subfolder/log2.log @@ -0,0 +1 @@ +This is another log file
\ No newline at end of file |