Add system alerts log with nav badge and Admin Alerts tab.
Deploy / lint (push) Successful in 8s
Deploy / test (push) Failing after 1m4s
Deploy / deploy (push) Has been skipped

Persist job and ingestion warnings/errors for 7 days, surface a dismissible top-nav badge, treat stale OHLCV as a warning (e.g. ticker renames), and show market bar age on the ticker freshness chip.
This commit is contained in:
2026-07-14 13:38:04 +02:00
parent ed82d0a665
commit f59c0c3484
16 changed files with 825 additions and 7 deletions
+35
View File
@@ -337,6 +337,41 @@ export function useToggleJob() {
});
}
// ── System events ──
export function useSystemEvents(days = 7) {
return useQuery({
queryKey: ['admin', 'system-events', days],
queryFn: () => adminApi.listSystemEvents({ days }),
refetchInterval: 30_000,
});
}
export function useSystemEventSummary(days = 7) {
return useQuery({
queryKey: ['admin', 'system-events-summary', days],
queryFn: () => adminApi.getSystemEventSummary(days),
refetchInterval: 30_000,
});
}
export function useAcknowledgeSystemEvents() {
const qc = useQueryClient();
const { addToast } = useToast();
return useMutation({
mutationFn: (days = 7) => adminApi.acknowledgeSystemEvents(days),
onSuccess: (data) => {
qc.invalidateQueries({ queryKey: ['admin', 'system-events'] });
qc.invalidateQueries({ queryKey: ['admin', 'system-events-summary'] });
addToast('success', `Dismissed ${data.acknowledged} alert${data.acknowledged === 1 ? '' : 's'}`);
},
onError: (error: Error) => {
addToast('error', error.message || 'Failed to dismiss alerts');
},
});
}
export function useTriggerJob() {
const qc = useQueryClient();
const { addToast } = useToast();