diff options
author | Ola Aunrønning <ola.aunroe@gmail.com> | 2018-09-18 10:27:16 +0200 |
---|---|---|
committer | Ola Aunrønning <ola.aunroe@gmail.com> | 2018-09-18 10:27:34 +0200 |
commit | 4a46f72283fe35cba7308b17b64de348346c4218 (patch) | |
tree | b345539783f767850b3ea4db28dec72ff714b0d8 /container-core | |
parent | 96427331aa1d61eed9a2a0ef5999100b43e30282 (diff) |
Filter on time. Flatten logs json
Diffstat (limited to 'container-core')
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 |