From a6f67dd652d8e88d21174922d1c34eacc422822a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=20Jurmanovi=C4=87?= Date: Sun, 22 Mar 2026 13:39:31 +0100 Subject: [PATCH] fix: use ring buffer for log reading --- local/service/file_log_streamer.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/local/service/file_log_streamer.go b/local/service/file_log_streamer.go index 2474565..7b0fa7e 100644 --- a/local/service/file_log_streamer.go +++ b/local/service/file_log_streamer.go @@ -53,16 +53,25 @@ func (s *FileLogStreamer) GetLastLines(_ context.Context, server *model.Server, } defer f.Close() - var lines []string + ring := make([]string, n) + head := 0 + count := 0 scanner := bufio.NewScanner(f) for scanner.Scan() { - lines = append(lines, scanner.Text()) + ring[head] = scanner.Text() + head = (head + 1) % n + if count < n { + count++ + } } if err := scanner.Err(); err != nil { return nil, err } - if len(lines) <= n { - return lines, nil + if count < n { + return ring[:count], nil } - return lines[len(lines)-n:], nil + out := make([]string, n) + copy(out, ring[head:]) + copy(out[n-head:], ring[:head]) + return out, nil }