Refactor engine and market status fetching to use callbacks and improve error handling

This commit is contained in:
Thigazhezhilan J 2026-03-28 14:01:51 +05:30
parent 5720cdb63c
commit b0c1ea3651

View File

@ -402,38 +402,38 @@ export default function PortfolioSection() {
return () => window.clearInterval(interval); return () => window.clearInterval(interval);
}, [refreshStatus]); }, [refreshStatus]);
useEffect(() => { const refreshEngineStatus = useCallback(async () => {
const fetchStatus = async () => { try {
try { const res = await apiRequest("GET", "/engine/status");
const res = await apiRequest("GET", "/engine/status"); const data = await res.json();
const data = await res.json(); setEngineStatus(data);
setEngineStatus(data); } catch {
} catch { setEngineStatus(null);
setEngineStatus(null); }
}
};
fetchStatus();
const id = window.setInterval(fetchStatus, 5000);
return () => window.clearInterval(id);
}, []); }, []);
useEffect(() => { useEffect(() => {
const fetchMarketStatus = async () => { void refreshEngineStatus();
try { const id = window.setInterval(refreshEngineStatus, 5000);
const res = await apiRequest("GET", "/market/status");
const data = await res.json();
setMarketStatus(data);
} catch {
setMarketStatus(null);
}
};
fetchMarketStatus();
const id = window.setInterval(fetchMarketStatus, 5000);
return () => window.clearInterval(id); return () => window.clearInterval(id);
}, [refreshEngineStatus]);
const refreshMarketStatus = useCallback(async () => {
try {
const res = await apiRequest("GET", "/market/status");
const data = await res.json();
setMarketStatus(data);
} catch {
setMarketStatus(null);
}
}, []); }, []);
useEffect(() => {
void refreshMarketStatus();
const id = window.setInterval(refreshMarketStatus, 5000);
return () => window.clearInterval(id);
}, [refreshMarketStatus]);
useEffect(() => { useEffect(() => {
if (prefersReducedMotion) { if (prefersReducedMotion) {
setIsVisible(true); setIsVisible(true);
@ -800,10 +800,21 @@ export default function PortfolioSection() {
description: result?.message || result?.status || "Unable to start strategy.", description: result?.message || result?.status || "Unable to start strategy.",
}); });
} }
} catch (error: any) {
const message = error?.message || "Unable to start strategy.";
if (String(message).includes("401:")) {
setLoginPromptOpen(true);
}
toast({
title: "Start failed",
description: message,
});
} finally { } finally {
setIsStarting(false); setIsStarting(false);
await Promise.allSettled([ await Promise.allSettled([
refreshStatus(), refreshStatus(),
refreshEngineStatus(),
refreshMarketStatus(),
refreshBrokerData({ includeEquityCurve: true }), refreshBrokerData({ includeEquityCurve: true }),
]); ]);
} }
@ -859,10 +870,21 @@ export default function PortfolioSection() {
description: result?.message || result?.status || "Unable to resume strategy.", description: result?.message || result?.status || "Unable to resume strategy.",
}); });
} }
} catch (error: any) {
const message = error?.message || "Unable to resume strategy.";
if (String(message).includes("401:")) {
setLoginPromptOpen(true);
}
toast({
title: "Resume failed",
description: message,
});
} finally { } finally {
setIsResuming(false); setIsResuming(false);
await Promise.allSettled([ await Promise.allSettled([
refreshStatus(), refreshStatus(),
refreshEngineStatus(),
refreshMarketStatus(),
refreshBrokerData({ includeEquityCurve: true }), refreshBrokerData({ includeEquityCurve: true }),
]); ]);
} }
@ -873,10 +895,17 @@ export default function PortfolioSection() {
try { try {
await stopStrategy(); await stopStrategy();
setFreshStartRequested(false); setFreshStartRequested(false);
} catch (error: any) {
toast({
title: "Stop failed",
description: error?.message || "Unable to stop strategy.",
});
} finally { } finally {
setIsStopping(false); setIsStopping(false);
await Promise.allSettled([ await Promise.allSettled([
refreshStatus(), refreshStatus(),
refreshEngineStatus(),
refreshMarketStatus(),
refreshBrokerData({ includeEquityCurve: true }), refreshBrokerData({ includeEquityCurve: true }),
]); ]);
} }