summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorOla Aunrønning <ola.aunroe@gmail.com>2018-08-24 14:54:27 +0200
committerOla Aunrønning <ola.aunroe@gmail.com>2018-09-10 13:07:15 +0200
commit44053e445e8f893514667325be40613830056e6e (patch)
treebd1f6be2b7ec2f419d2a9363de96fecb32988152 /container-core
parent79fbe75a324084d7e871e4aa7b82500e7ccd35b3 (diff)
Add functionality for retrieving logs
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogHandler.java31
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogReader.java44
-rw-r--r--container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java36
-rw-r--r--container-core/src/test/resources/logfolder/log1.log1
-rw-r--r--container-core/src/test/resources/logfolder/subfolder/log2.log1
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