|
@@ -20,6 +20,8 @@ export default function ApiHealth() {
|
|
|
return result;
|
|
return result;
|
|
|
},
|
|
},
|
|
|
refetchInterval: 30000, // Check every 30 seconds
|
|
refetchInterval: 30000, // Check every 30 seconds
|
|
|
|
|
+ retry: 3, // Retry failed requests 3 times
|
|
|
|
|
+ retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000), // Exponential backoff
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
const restartMutation = useMutation({
|
|
const restartMutation = useMutation({
|
|
@@ -27,13 +29,35 @@ export default function ApiHealth() {
|
|
|
onSuccess: () => {
|
|
onSuccess: () => {
|
|
|
toast.success("API service restarting...");
|
|
toast.success("API service restarting...");
|
|
|
setShowRestartConfirm(false);
|
|
setShowRestartConfirm(false);
|
|
|
- // Retry health check after a delay to see if service is back
|
|
|
|
|
|
|
+ // Invalidate all queries to prevent stale data
|
|
|
|
|
+ queryClient.invalidateQueries();
|
|
|
|
|
+ // Retry health check after delays to see if service is back
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
- queryClient.invalidateQueries({ queryKey: ["api", "health"] });
|
|
|
|
|
|
|
+ queryClient.refetchQueries({ queryKey: ["api", "health"] });
|
|
|
}, 3000);
|
|
}, 3000);
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ queryClient.refetchQueries({ queryKey: ["api", "health"] });
|
|
|
|
|
+ }, 5000);
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ queryClient.refetchQueries({ queryKey: ["api", "health"] });
|
|
|
|
|
+ }, 8000);
|
|
|
},
|
|
},
|
|
|
onError: (error: any) => {
|
|
onError: (error: any) => {
|
|
|
- toast.error("Failed to restart API service");
|
|
|
|
|
|
|
+ // Expected to fail since server is restarting
|
|
|
|
|
+ toast.success("API service restart initiated...");
|
|
|
|
|
+ setShowRestartConfirm(false);
|
|
|
|
|
+ // Invalidate all queries to prevent stale data
|
|
|
|
|
+ queryClient.invalidateQueries();
|
|
|
|
|
+ // Still try to reconnect
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ queryClient.refetchQueries({ queryKey: ["api", "health"] });
|
|
|
|
|
+ }, 3000);
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ queryClient.refetchQueries({ queryKey: ["api", "health"] });
|
|
|
|
|
+ }, 5000);
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ queryClient.refetchQueries({ queryKey: ["api", "health"] });
|
|
|
|
|
+ }, 8000);
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
|
|
|