diff options
author | jonmv <venstad@gmail.com> | 2022-10-14 09:07:28 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-10-14 09:07:28 +0200 |
commit | 97ad974f4dfe66821eb24d15b7951c931156d014 (patch) | |
tree | 305f36ada33ae09f26ea486cfc2c088317c20f89 /container-core/src/main/java/com | |
parent | 6e7459c9eff635d9c8227cd8d1add320f298c0e2 (diff) |
Keep last 1000 lines sorted in log reader
Diffstat (limited to 'container-core/src/main/java/com')
-rw-r--r-- | container-core/src/main/java/com/yahoo/container/handler/LogReader.java | 15 |
1 files changed, 12 insertions, 3 deletions
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 fe841bac68e..9f270acce5f 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 @@ -29,6 +29,7 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Optional; +import java.util.PriorityQueue; import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -73,10 +74,18 @@ class LogReader { Iterator<LineWithTimestamp> lines = Iterators.mergeSorted(logLineIterators, Comparator.comparingDouble(LineWithTimestamp::timestamp)); + PriorityQueue<LineWithTimestamp> heap = new PriorityQueue<>(Comparator.comparingDouble(LineWithTimestamp::timestamp)); while (lines.hasNext()) { + heap.offer(lines.next()); + if (heap.size() > 1000) { + if (linesWritten++ >= maxLines) return; + writer.write(heap.poll().line); + writer.newLine(); + } + } + while ( ! heap.isEmpty()) { if (linesWritten++ >= maxLines) return; - String line = lines.next().line(); - writer.write(line); + writer.write(heap.poll().line); writer.newLine(); } } @@ -170,7 +179,7 @@ class LogReader { if (parts.length != 7) continue; - if (hostname.map(host -> !host.equals(parts[1])).orElse(false)) + if (hostname.map(host -> ! host.equals(parts[1])).orElse(false)) continue; double timestamp = Double.parseDouble(parts[0]); |