summaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-10-14 09:07:28 +0200
committerjonmv <venstad@gmail.com>2022-10-14 09:07:28 +0200
commit97ad974f4dfe66821eb24d15b7951c931156d014 (patch)
tree305f36ada33ae09f26ea486cfc2c088317c20f89 /container-core/src/main/java/com/yahoo
parent6e7459c9eff635d9c8227cd8d1add320f298c0e2 (diff)
Keep last 1000 lines sorted in log reader
Diffstat (limited to 'container-core/src/main/java/com/yahoo')
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogReader.java15
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]);