summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorOla Aunrønning <ola.aunroe@gmail.com>2018-09-18 10:27:16 +0200
committerOla Aunrønning <ola.aunroe@gmail.com>2018-09-18 10:27:34 +0200
commit4a46f72283fe35cba7308b17b64de348346c4218 (patch)
treeb345539783f767850b3ea4db28dec72ff714b0d8 /container-core
parent96427331aa1d61eed9a2a0ef5999100b43e30282 (diff)
Filter on time. Flatten logs json
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogHandler.java40
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogReader.java41
-rw-r--r--container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java12
3 files changed, 56 insertions, 37 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
index a6918ed0442..16f1b3ac62c 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
@@ -10,11 +10,14 @@ import org.json.JSONObject;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.concurrent.Executor;
public class LogHandler extends ThreadedHttpRequestHandler {
- private static final String LOG_DIRECTORY = "/home/y/logs/vespa/";
+ private static final String LOG_DIRECTORY = "/home/y/logs/vespa/logarchive/";
@Inject
public LogHandler(Executor executor) {
@@ -24,15 +27,12 @@ public class LogHandler extends ThreadedHttpRequestHandler {
@Override
public HttpResponse handle(HttpRequest request) {
JSONObject logJson;
- LogReader logReader;
+ HashMap<String, String> apiParams = getParameters(request);
+ long earliestLogThreshold = getEarliestThreshold(apiParams);
+ long latestLogThreshold = getLatestThreshold(apiParams);
+ LogReader logReader= new LogReader(earliestLogThreshold, latestLogThreshold);
try {
- if (request.hasProperty("numberOfLogs")) {
- int numberOfLogs = (Integer.valueOf(request.getProperty("numberOfLogs")));
- logReader = new LogReader(numberOfLogs);
- } else {
- logReader = new LogReader();
- }
logJson = logReader.readLogs(LOG_DIRECTORY);
} catch (IOException | JSONException e) {
return new HttpResponse(404) {
@@ -49,4 +49,28 @@ public class LogHandler extends ThreadedHttpRequestHandler {
}
};
}
+
+ private HashMap<String, String> getParameters(HttpRequest request) {
+ String query = request.getUri().getQuery();
+ HashMap<String, String> keyValPair = new HashMap<>();
+ Arrays.stream(query.split("&")).forEach(pair -> {
+ String[] splitPair = pair.split("=");
+ keyValPair.put(splitPair[0], splitPair[1]);
+ });
+ return keyValPair;
+ }
+
+ private long getEarliestThreshold(HashMap<String, String> map) {
+ if (map.containsKey("from")) {
+ return Long.valueOf(map.get("from"));
+ }
+ return Long.MIN_VALUE;
+ }
+
+ private long getLatestThreshold(HashMap<String, String> map) {
+ if (map.containsKey("to")) {
+ return Long.valueOf(map.get("to"));
+ }
+ return Long.MAX_VALUE;
+ }
}
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
index 9ac40158e07..2483f2497d0 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/LogReader.java
@@ -7,52 +7,37 @@ import javax.xml.bind.DatatypeConverter;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
-import java.util.Arrays;
-import java.util.Comparator;
public class LogReader {
- int numberOfLogs;
+ long earliestLogThreshold;
+ long latestLogThreshold;
- public LogReader() {
- this.numberOfLogs = -1;
- }
-
- public LogReader(int numberOfLogs) {
- this.numberOfLogs = numberOfLogs;
+ public LogReader(long earliestLogThreshold, long latestLogThreshold) {
+ this.earliestLogThreshold = earliestLogThreshold;
+ this.latestLogThreshold = latestLogThreshold;
}
protected JSONObject readLogs(String logDirectory) throws IOException, JSONException {
JSONObject json = new JSONObject();
File root = new File(logDirectory);
- traverse_folder(root, json);
+ traverse_folder(root, json, "");
return json;
}
- private void traverse_folder(File root, JSONObject json) throws IOException, JSONException {
+ private void traverse_folder(File root, JSONObject json, String filename) throws IOException, JSONException {
File[] files = root.listFiles();
- Arrays.sort(files,new Comparator<File>(){
- public int compare(File f1, File f2)
- {
- return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
- } });
- Arrays.sort(files, Comparator.reverseOrder());
for(File child : files) {
- if (numberOfLogs == 0) return;
+ File temp = child;
JSONObject childJson = new JSONObject();
- if(child.isFile()) {
- json.put(child.getName(), DatatypeConverter.printBase64Binary(Files.readAllBytes(child.toPath())));
- decrementLogNumber();
+ long logTime = child.lastModified();
+ if(child.isFile() && earliestLogThreshold < logTime && logTime < latestLogThreshold) {
+ json.put(filename + child.getName(), DatatypeConverter.printBase64Binary(Files.readAllBytes(child.toPath())));
}
- else {
- json.put(child.getName(), childJson);
- traverse_folder(child, childJson);
+ else if (!child.isFile()){
+ traverse_folder(child, json, filename + child.getName() + "-");
}
}
}
- private void decrementLogNumber() {
- numberOfLogs -= 1;
- }
-
}
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
index aaa58a5004c..1a8d5680882 100644
--- a/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java
+++ b/container-core/src/test/java/com/yahoo/container/handler/LogReaderTest.java
@@ -20,10 +20,20 @@ public class LogReaderTest {
@Test
public void testThatFilesAreWrittenCorrectlyToOutputStream() throws Exception{
String logDirectory = "src/test/resources/logfolder/";
- LogReader logReader = new LogReader(2);
+ LogReader logReader = new LogReader(21, Long.MAX_VALUE);
JSONObject json = logReader.readLogs(logDirectory);
String expected = "{\"subfolder\":{\"log2.log\":\"VGhpcyBpcyBhbm90aGVyIGxvZyBmaWxl\"},\"log1.log\":\"VGhpcyBpcyBvbmUgbG9nIGZpbGU=\"}";
String actual = json.toString();
assertEquals(expected, actual);
}
+
+ @Test
+ public void testThatLogsOutsideRangeAreExcluded() throws Exception {
+ String logDirectory = "src/test/resources/logfolder/";
+ LogReader logReader = new LogReader(Long.MAX_VALUE, Long.MIN_VALUE);
+ JSONObject json = logReader.readLogs(logDirectory);
+ String expected = "{}";
+ String actual = json.toString();
+ assertEquals(expected, actual);
+ }
} \ No newline at end of file