Skip to content

Commit af5fda1

Browse files
authored
fix(ourlogs): Limit manual refresh to one hour or less (#97527)
### Summary Manual refresh otherwise hits our backend caching which effectively doesn't refresh the data for a small period of time no matter how quickly you click the button.
1 parent 2a6e603 commit af5fda1

File tree

1 file changed

+41
-6
lines changed

1 file changed

+41
-6
lines changed

static/app/views/explore/logs/logsTab.tsx

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {openModal} from 'sentry/actionCreators/modal';
44
import Feature from 'sentry/components/acl/feature';
55
import {Button} from 'sentry/components/core/button';
66
import {TabList, Tabs} from 'sentry/components/core/tabs';
7+
import {Tooltip} from 'sentry/components/core/tooltip';
78
import {DropdownMenu} from 'sentry/components/dropdownMenu';
89
import * as Layout from 'sentry/components/layouts/thirds';
910
import {DatePageFilter} from 'sentry/components/organizations/datePageFilter';
@@ -14,8 +15,11 @@ import {IconChevron, IconRefresh, IconTable} from 'sentry/icons';
1415
import {t} from 'sentry/locale';
1516
import {LogsAnalyticsPageSource} from 'sentry/utils/analytics/logsAnalyticsEvent';
1617
import {DiscoverDatasets} from 'sentry/utils/discover/types';
18+
import {parsePeriodToHours} from 'sentry/utils/duration/parsePeriodToHours';
19+
import {HOUR} from 'sentry/utils/formatters';
1720
import {type InfiniteData, useQueryClient} from 'sentry/utils/queryClient';
1821
import useOrganization from 'sentry/utils/useOrganization';
22+
import usePageFilters from 'sentry/utils/usePageFilters';
1923
import SchemaHintsList, {
2024
SchemaHintsSection,
2125
} from 'sentry/views/explore/components/schemaHints/schemaHintsList';
@@ -93,6 +97,7 @@ export function LogsTabContent({
9397
relativeOptions,
9498
}: LogsTabProps) {
9599
const organization = useOrganization();
100+
const pageFilters = usePageFilters();
96101
const logsSearch = useLogsSearch();
97102
const fields = useLogsFields();
98103
const groupBy = useLogsGroupBy();
@@ -251,6 +256,28 @@ export function LogsTabContent({
251256
sortBys,
252257
});
253258

259+
/**
260+
* Manual refresh doesn't work for longer relative periods as it hits cacheing. Only allow manual refresh if the relative period or absolute time range is less than 1 day.
261+
*/
262+
const canManuallyRefresh = useMemo(() => {
263+
if (pageFilters.selection.datetime.period) {
264+
const parsedPeriod = parsePeriodToHours(pageFilters.selection.datetime.period);
265+
if (parsedPeriod <= 1) {
266+
return true;
267+
}
268+
}
269+
270+
if (pageFilters.selection.datetime.start && pageFilters.selection.datetime.end) {
271+
const start = new Date(pageFilters.selection.datetime.start).getTime();
272+
const end = new Date(pageFilters.selection.datetime.end).getTime();
273+
const difference = end - start;
274+
const oneDayInMs = HOUR;
275+
return difference <= oneDayInMs;
276+
}
277+
278+
return false;
279+
}, [pageFilters.selection.datetime]);
280+
254281
return (
255282
<SearchQueryBuilderProvider {...searchQueryBuilderProviderProps}>
256283
<TopSectionBody noRowGap>
@@ -341,12 +368,20 @@ export function LogsTabContent({
341368
<Feature features="organizations:ourlogs-live-refresh">
342369
<AutorefreshToggle averageLogsPerSecond={averageLogsPerSecond} />
343370
</Feature>
344-
<Button
345-
onClick={refreshTable}
346-
icon={<IconRefresh />}
347-
size="sm"
348-
aria-label={t('Refresh')}
349-
/>
371+
<Tooltip
372+
title={t(
373+
'Narrow your time range to 1hr or less for manually refreshing your logs.'
374+
)}
375+
disabled={canManuallyRefresh}
376+
>
377+
<Button
378+
onClick={refreshTable}
379+
icon={<IconRefresh />}
380+
size="sm"
381+
aria-label={t('Refresh')}
382+
disabled={!canManuallyRefresh}
383+
/>
384+
</Tooltip>
350385
<Button onClick={openColumnEditor} icon={<IconTable />} size="sm">
351386
{t('Edit Table')}
352387
</Button>

0 commit comments

Comments
 (0)