feat(usage-logs): 添加滚动日志快照检查和日期解析功能
This commit is contained in:
1 parent
2be28923d5
commit
ea6465d079
1 file changed
+46
@@ -56,6 +56,8 @@ const RESULT_OPTIONS: Array<{ value: "all" | "success" | "failure"; label: strin
|
|||||||
|
|
||||||
const PAGINATION_WINDOW_SIZE = 5;
|
const PAGINATION_WINDOW_SIZE = 5;
|
||||||
const USAGE_LOGS_PAGE_CACHE_KEY = "usage-logs:page";
|
const USAGE_LOGS_PAGE_CACHE_KEY = "usage-logs:page";
|
||||||
|
const ROLLING_USAGE_LOG_WINDOW_MS = 24 * 60 * 60 * 1000;
|
||||||
|
const ROLLING_USAGE_LOG_WINDOW_TOLERANCE_MS = 15 * 60 * 1000;
|
||||||
|
|
||||||
const toDateTimeLocalValue = (date: Date): string => {
|
const toDateTimeLocalValue = (date: Date): string => {
|
||||||
const offset = date.getTimezoneOffset() * 60_000;
|
const offset = date.getTimezoneOffset() * 60_000;
|
||||||
@@ -140,6 +142,41 @@ const isSameUsageLogFilterState = (left: UsageLogFilterState, right: UsageLogFil
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isSameUsageLogFilterIntent = (left: UsageLogFilterState, right: UsageLogFilterState): boolean => {
|
||||||
|
return (
|
||||||
|
left.dimension === right.dimension &&
|
||||||
|
left.keyword === right.keyword &&
|
||||||
|
left.result === right.result
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const parseLocalDateTimeValue = (value: string): number | null => {
|
||||||
|
if (!value) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const date = new Date(value);
|
||||||
|
return Number.isNaN(date.getTime()) ? null : date.getTime();
|
||||||
|
};
|
||||||
|
|
||||||
|
const isRollingLatest24hSnapshot = (snapshot: UsageLogPageCacheSnapshot, updatedAt: number | undefined): boolean => {
|
||||||
|
if (!updatedAt) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const startTime = parseLocalDateTimeValue(snapshot.appliedFilters.start);
|
||||||
|
const endTime = parseLocalDateTimeValue(snapshot.appliedFilters.end);
|
||||||
|
if (startTime === null || endTime === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const duration = endTime - startTime;
|
||||||
|
return (
|
||||||
|
Math.abs(duration - ROLLING_USAGE_LOG_WINDOW_MS) <= ROLLING_USAGE_LOG_WINDOW_TOLERANCE_MS &&
|
||||||
|
Math.abs(updatedAt - endTime) <= ROLLING_USAGE_LOG_WINDOW_TOLERANCE_MS
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const ClientSummary = ({ item }: { item: AnalyticsEventItem }) => {
|
const ClientSummary = ({ item }: { item: AnalyticsEventItem }) => {
|
||||||
const locationParts = [item.country, item.region, item.city].filter(Boolean);
|
const locationParts = [item.country, item.region, item.city].filter(Boolean);
|
||||||
|
|
||||||
@@ -192,6 +229,14 @@ export function UsageLogs() {
|
|||||||
isSameUsageLogFilterState(cachedLogsSnapshot.data.appliedFilters, appliedFilters)
|
isSameUsageLogFilterState(cachedLogsSnapshot.data.appliedFilters, appliedFilters)
|
||||||
? cachedLogsSnapshot.data.data
|
? cachedLogsSnapshot.data.data
|
||||||
: undefined;
|
: undefined;
|
||||||
|
const placeholderLogsData =
|
||||||
|
!initialLogsData &&
|
||||||
|
cachedLogsSnapshot?.data &&
|
||||||
|
cachedLogsSnapshot.data.currentPage === currentPage &&
|
||||||
|
isSameUsageLogFilterIntent(cachedLogsSnapshot.data.appliedFilters, appliedFilters) &&
|
||||||
|
isRollingLatest24hSnapshot(cachedLogsSnapshot.data, cachedLogsSnapshot.updatedAt)
|
||||||
|
? cachedLogsSnapshot.data.data
|
||||||
|
: undefined;
|
||||||
|
|
||||||
const logsQuery = useQuery({
|
const logsQuery = useQuery({
|
||||||
queryKey: ["usage-logs", appliedFilters, currentPage],
|
queryKey: ["usage-logs", appliedFilters, currentPage],
|
||||||
@@ -208,6 +253,7 @@ export function UsageLogs() {
|
|||||||
},
|
},
|
||||||
initialData: initialLogsData,
|
initialData: initialLogsData,
|
||||||
initialDataUpdatedAt: initialLogsData ? cachedLogsSnapshot?.updatedAt : undefined,
|
initialDataUpdatedAt: initialLogsData ? cachedLogsSnapshot?.updatedAt : undefined,
|
||||||
|
placeholderData: placeholderLogsData,
|
||||||
});
|
});
|
||||||
|
|
||||||
const activePage = logsQuery.data?.page ?? currentPage;
|
const activePage = logsQuery.data?.page ?? currentPage;
|
||||||
|
|||||||
Reference in new issue
Block a user