Skip to content

Commit d99964b

Browse files
authored
fix: fixes pagination when logs are very long packed together. see #3373 (#3377)
1 parent f3cfe4f commit d99964b

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

assets/composable/eventStreams.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ function useLogStream(url: Ref<string>, loadMoreUrl?: Ref<string>) {
161161
if (isLoadingMore.value) return;
162162

163163
const to = messages.value[0].date;
164+
const lastSeenId = messages.value[0].id;
164165
const last = messages.value[Math.min(messages.value.length - 1, 300)].date;
165166
const delta = to.getTime() - last.getTime();
166167
const from = new Date(to.getTime() + delta);
@@ -174,6 +175,7 @@ function useLogStream(url: Ref<string>, loadMoreUrl?: Ref<string>) {
174175
loadMoreParams.append("from", from.toISOString());
175176
loadMoreParams.append("to", to.toISOString());
176177
loadMoreParams.append("minimum", "100");
178+
loadMoreParams.append("lastSeenId", String(lastSeenId));
177179

178180
return withBase(`${loadMoreUrl.value}?${loadMoreParams.toString()}`);
179181
});

internal/web/logs.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,19 @@ func (h *handler) fetchLogsBetweenDates(w http.ResponseWriter, r *http.Request)
146146
levels[level] = struct{}{}
147147
}
148148

149+
lastSeenId := uint32(0)
150+
if r.URL.Query().Has("lastSeenId") {
151+
to = to.Add(50 * time.Millisecond) // Add a little buffer to ensure we get the last event
152+
num, err := strconv.ParseUint(r.URL.Query().Get("lastSeenId"), 10, 32)
153+
if err != nil {
154+
http.Error(w, err.Error(), http.StatusBadRequest)
155+
return
156+
}
157+
lastSeenId = uint32(num)
158+
}
159+
149160
encoder := json.NewEncoder(w)
161+
outer:
150162
for {
151163
if buffer.Len() > minimum {
152164
break
@@ -185,6 +197,11 @@ func (h *handler) fetchLogsBetweenDates(w http.ResponseWriter, r *http.Request)
185197
continue
186198
}
187199

200+
if lastSeenId != 0 && event.Id == lastSeenId {
201+
log.Debug().Uint32("lastSeenId", lastSeenId).Msg("found last seen id")
202+
break outer
203+
}
204+
188205
buffer.Push(event)
189206
}
190207

0 commit comments

Comments
 (0)