mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-02-11 03:54:23 +01:00
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
|
|
import { useCallback, useRef } from 'react';
|
||
|
|
import { useQuery, useQueryClient } from '@tanstack/react-query';
|
||
|
|
import { QueryKeys, Time, dataService } from 'librechat-data-provider';
|
||
|
|
import { logger } from '~/utils';
|
||
|
|
|
||
|
|
export const useHealthCheck = () => {
|
||
|
|
useQuery([QueryKeys.health], () => dataService.healthCheck(), {
|
||
|
|
refetchInterval: Time.TEN_MINUTES,
|
||
|
|
retry: false,
|
||
|
|
onError: (error) => {
|
||
|
|
console.error('Health check failed:', error);
|
||
|
|
},
|
||
|
|
cacheTime: 0,
|
||
|
|
staleTime: 0,
|
||
|
|
refetchOnWindowFocus: (query) => {
|
||
|
|
if (!query.state.dataUpdatedAt) {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
const lastUpdated = new Date(query.state.dataUpdatedAt);
|
||
|
|
const tenMinutesAgo = new Date(Date.now() - Time.TEN_MINUTES);
|
||
|
|
|
||
|
|
logger.log(`Last health check: ${lastUpdated.toISOString()}`);
|
||
|
|
logger.log(`Ten minutes ago: ${tenMinutesAgo.toISOString()}`);
|
||
|
|
|
||
|
|
return lastUpdated < tenMinutesAgo;
|
||
|
|
},
|
||
|
|
});
|
||
|
|
};
|
||
|
|
|
||
|
|
export const useInteractionHealthCheck = () => {
|
||
|
|
const queryClient = useQueryClient();
|
||
|
|
const lastInteractionTimeRef = useRef(Date.now());
|
||
|
|
|
||
|
|
const checkHealthOnInteraction = useCallback(() => {
|
||
|
|
const currentTime = Date.now();
|
||
|
|
if (currentTime - lastInteractionTimeRef.current > Time.FIVE_MINUTES) {
|
||
|
|
logger.log(
|
||
|
|
'Checking health on interaction. Time elapsed:',
|
||
|
|
currentTime - lastInteractionTimeRef.current,
|
||
|
|
);
|
||
|
|
queryClient.invalidateQueries([QueryKeys.health]);
|
||
|
|
lastInteractionTimeRef.current = currentTime;
|
||
|
|
}
|
||
|
|
}, [queryClient]);
|
||
|
|
|
||
|
|
return checkHealthOnInteraction;
|
||
|
|
};
|