aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main/java/com
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2022-09-22 09:50:13 +0200
committerGitHub <noreply@github.com>2022-09-22 09:50:13 +0200
commitefb808cff3a51f8eba15fb6bc43e8b53ae17143c (patch)
tree92047a30199c596a75a489deae80316ac74e2586 /container-core/src/main/java/com
parent1957bf2e63c2ad903bd1f6ccbde48de1141dca11 (diff)
Revert "Revert "Make it possible to limit number of log lines returned" (#24168)"
This reverts commit d058fe597d6ba98f27c146cf725752aab1405772.
Diffstat (limited to 'container-core/src/main/java/com')
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogHandler.java12
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/LogReader.java15
2 files changed, 7 insertions, 20 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 d151eb6862d..72a399744f3 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
@@ -4,21 +4,15 @@ package com.yahoo.container.handler;
import com.yahoo.component.annotation.Inject;
import com.yahoo.container.core.LogHandlerConfig;
import com.yahoo.container.jdisc.AsyncHttpResponse;
-import com.yahoo.container.jdisc.ContentChannelOutputStream;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.container.jdisc.ThreadedHttpRequestHandler;
import com.yahoo.jdisc.handler.CompletionHandler;
import com.yahoo.jdisc.handler.ContentChannel;
-import java.io.IOException;
-import java.io.InterruptedIOException;
import java.io.OutputStream;
-import java.nio.ByteBuffer;
import java.time.Instant;
import java.util.Optional;
import java.util.concurrent.Executor;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
public class LogHandler extends ThreadedHttpRequestHandler {
@@ -42,6 +36,8 @@ public class LogHandler extends ThreadedHttpRequestHandler {
.map(Long::valueOf).map(Instant::ofEpochMilli).orElse(Instant.MIN);
Instant to = Optional.ofNullable(request.getProperty("to"))
.map(Long::valueOf).map(Instant::ofEpochMilli).orElse(Instant.MAX);
+ long maxLines = Optional.ofNullable(request.getProperty("maxLines"))
+ .map(Long::valueOf).orElse(100_000L);
Optional<String> hostname = Optional.ofNullable(request.getProperty("hostname"));
return new AsyncHttpResponse(200) {
@@ -50,7 +46,7 @@ public class LogHandler extends ThreadedHttpRequestHandler {
@Override
public void render(OutputStream output, ContentChannel networkChannel, CompletionHandler handler) {
try (output) {
- logReader.writeLogs(output, from, to, hostname);
+ logReader.writeLogs(output, from, to, maxLines, hostname);
}
catch (Throwable t) {
log.log(Level.WARNING, "Failed reading logs from " + from + " to " + to, t);
@@ -62,6 +58,4 @@ public class LogHandler extends ThreadedHttpRequestHandler {
};
}
-
-
}
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 93881b52eb6..dae4b940307 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
@@ -59,9 +59,10 @@ class LogReader {
this.logFilePattern = logFilePattern;
}
- void writeLogs(OutputStream out, Instant from, Instant to, Optional<String> hostname) {
+ void writeLogs(OutputStream out, Instant from, Instant to, long maxLines, Optional<String> hostname) {
double fromSeconds = from.getEpochSecond() + from.getNano() / 1e9;
double toSeconds = to.getEpochSecond() + to.getNano() / 1e9;
+ long linesWritten = 0;
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
for (List<Path> logs : getMatchingFiles(from, to)) {
List<LogLineIterator> logLineIterators = new ArrayList<>();
@@ -73,6 +74,7 @@ class LogReader {
Iterator<LineWithTimestamp> lines = Iterators.mergeSorted(logLineIterators,
Comparator.comparingDouble(LineWithTimestamp::timestamp));
while (lines.hasNext()) {
+ if (linesWritten++ >= maxLines) return;
String line = lines.next().line();
writer.write(line);
writer.newLine();
@@ -187,16 +189,7 @@ class LogReader {
}
- private static class LineWithTimestamp {
- final String line;
- final double timestamp;
- LineWithTimestamp(String line, double timestamp) {
- this.line = line;
- this.timestamp = timestamp;
- }
- String line() { return line; }
- double timestamp() { return timestamp; }
- }
+ private record LineWithTimestamp(String line, double timestamp) { }
/** Returns log files which may have relevant entries, grouped and sorted by {@link #extractTimestamp(Path)} — the first and last group must be filtered. */
private List<List<Path>> getMatchingFiles(Instant from, Instant to) {