Skip to content

Commit 7b99b9d

Browse files
authored
[Logs UI] Fix log stream data fetching (#93201) (#93682)
* Use ReplaySubject and amend date comparisons * Assess date range expressions separately * Only add dataset filter to view in stream links if one exists
1 parent 7088fa9 commit 7b99b9d

File tree

4 files changed

+30
-14
lines changed

4 files changed

+30
-14
lines changed

x-pack/plugins/infra/public/containers/logs/log_position/log_position_state.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ interface DateRange {
2121
startTimestamp: number;
2222
endTimestamp: number;
2323
timestampsLastUpdate: number;
24+
lastCompleteDateRangeExpressionUpdate: number;
2425
}
2526

2627
interface VisiblePositions {
@@ -46,6 +47,7 @@ export interface LogPositionStateParams {
4647
startTimestamp: number | null;
4748
endTimestamp: number | null;
4849
timestampsLastUpdate: number;
50+
lastCompleteDateRangeExpressionUpdate: number;
4951
}
5052

5153
export interface LogPositionCallbacks {
@@ -121,6 +123,7 @@ export const useLogPositionState: () => LogPositionStateParams & LogPositionCall
121123
startTimestamp: datemathToEpochMillis(DEFAULT_DATE_RANGE.startDateExpression)!,
122124
endTimestamp: datemathToEpochMillis(DEFAULT_DATE_RANGE.endDateExpression, 'up')!,
123125
timestampsLastUpdate: Date.now(),
126+
lastCompleteDateRangeExpressionUpdate: Date.now(),
124127
});
125128

126129
useEffect(() => {
@@ -171,12 +174,18 @@ export const useLogPositionState: () => LogPositionStateParams & LogPositionCall
171174
jumpToTargetPosition(null);
172175
}
173176

174-
setDateRange({
177+
setDateRange((prevState) => ({
175178
...newDateRange,
176179
startTimestamp: nextStartTimestamp,
177180
endTimestamp: nextEndTimestamp,
178181
timestampsLastUpdate: Date.now(),
179-
});
182+
// NOTE: Complete refers to the last time an update was requested with both expressions. These require a full refresh (unless streaming). Timerange expansion
183+
// and pagination however do not.
184+
lastCompleteDateRangeExpressionUpdate:
185+
'startDateExpression' in newDateRange && 'endDateExpression' in newDateRange
186+
? Date.now()
187+
: prevState.lastCompleteDateRangeExpressionUpdate,
188+
}));
180189
},
181190
[setDateRange, dateRange, targetPosition]
182191
);

x-pack/plugins/infra/public/containers/logs/log_stream/use_fetch_log_entries_around.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import { useCallback } from 'react';
9-
import { combineLatest, Observable, Subject } from 'rxjs';
9+
import { combineLatest, Observable, ReplaySubject } from 'rxjs';
1010
import { last, map, startWith, switchMap } from 'rxjs/operators';
1111
import { LogSourceColumnConfiguration } from '../../../../common/http_api/log_sources';
1212
import { LogEntryCursor } from '../../../../common/log_entry';
@@ -53,7 +53,7 @@ export const useFetchLogEntriesAround = ({
5353
type LogEntriesAfterRequest = NonNullable<ReturnType<typeof fetchLogEntriesAfter>>;
5454

5555
const logEntriesAroundSearchRequests$ = useObservable(
56-
() => new Subject<[LogEntriesBeforeRequest, Observable<LogEntriesAfterRequest>]>(),
56+
() => new ReplaySubject<[LogEntriesBeforeRequest, Observable<LogEntriesAfterRequest>]>(),
5757
[]
5858
);
5959

x-pack/plugins/infra/public/pages/logs/log_entry_rate/sections/anomalies/log_entry_example.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,14 @@ export const LogEntryExampleMessage: React.FunctionComponent<Props> = ({
111111
flyoutOptions: encode({
112112
surroundingLogsId: id,
113113
}),
114-
logFilter: encode({
115-
expression: `${partitionField}: ${dataset}`,
116-
kind: 'kuery',
117-
}),
114+
...(dataset
115+
? {
116+
logFilter: encode({
117+
expression: `${partitionField}: ${dataset}`,
118+
kind: 'kuery',
119+
}),
120+
}
121+
: {}),
118122
},
119123
});
120124

x-pack/plugins/infra/public/pages/logs/stream/page_logs_content.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export const LogsPageLogsContent: React.FunctionComponent = () => {
6060
startDateExpression,
6161
endDateExpression,
6262
updateDateRange,
63+
lastCompleteDateRangeExpressionUpdate,
6364
} = useContext(LogPositionState.Context);
6465
const { filterQuery, applyLogFilterQuery } = useContext(LogFilterState.Context);
6566

@@ -81,16 +82,16 @@ export const LogsPageLogsContent: React.FunctionComponent = () => {
8182
const prevStartTimestamp = usePrevious(startTimestamp);
8283
const prevEndTimestamp = usePrevious(endTimestamp);
8384
const prevFilterQuery = usePrevious(filterQuery);
85+
const prevLastCompleteDateRangeExpressionUpdate = usePrevious(
86+
lastCompleteDateRangeExpressionUpdate
87+
);
8488

8589
// Refetch entries if...
8690
useEffect(() => {
8791
const isFirstLoad = !prevStartTimestamp || !prevEndTimestamp;
8892

89-
const newDateRangeDoesNotOverlap =
90-
(prevStartTimestamp != null &&
91-
startTimestamp != null &&
92-
prevStartTimestamp < startTimestamp) ||
93-
(prevEndTimestamp != null && endTimestamp != null && prevEndTimestamp > endTimestamp);
93+
const completeDateRangeExpressionHasChanged =
94+
lastCompleteDateRangeExpressionUpdate !== prevLastCompleteDateRangeExpressionUpdate;
9495

9596
const isCenterPointOutsideLoadedRange =
9697
targetPosition != null &&
@@ -101,7 +102,7 @@ export const LogsPageLogsContent: React.FunctionComponent = () => {
101102

102103
if (
103104
isFirstLoad ||
104-
newDateRangeDoesNotOverlap ||
105+
completeDateRangeExpressionHasChanged ||
105106
isCenterPointOutsideLoadedRange ||
106107
hasQueryChanged
107108
) {
@@ -124,6 +125,8 @@ export const LogsPageLogsContent: React.FunctionComponent = () => {
124125
bottomCursor,
125126
filterQuery,
126127
prevFilterQuery,
128+
lastCompleteDateRangeExpressionUpdate,
129+
prevLastCompleteDateRangeExpressionUpdate,
127130
]);
128131

129132
const { logSummaryHighlights, currentHighlightKey, logEntryHighlightsById } = useContext(

0 commit comments

Comments
 (0)