Files
Checkmate/client/src/Pages/Logs/TabQueue.tsx
T

60 lines
1.5 KiB
TypeScript
Raw Normal View History

2026-02-05 21:40:36 +00:00
import Stack from "@mui/material/Stack";
2026-02-06 17:24:16 +00:00
import Typography from "@mui/material/Typography";
2026-02-05 21:40:36 +00:00
import { TableJobs, TableFailedJobs } from "@/Pages/Logs/TableJobs";
import { useTheme } from "@mui/material";
import { useTranslation } from "react-i18next";
import { useGet, usePost } from "@/Hooks/UseApi";
import type { QueueData } from "@/Types/Queue";
import { Metrics } from "@/Pages/Logs/Metrics";
import { Button } from "@/Components/v2/inputs";
2026-02-05 20:23:04 +00:00
export const TabQueue = () => {
2026-02-05 21:40:36 +00:00
const theme = useTheme();
const { t } = useTranslation();
const {
data: queueData,
// isLoading,
// error,
refetch,
} = useGet<QueueData>("/queue/all-metrics", {}, { refreshInterval: 5000 });
const { post, loading: isFlushing } = usePost();
const jobs = queueData?.jobs ?? [];
const metrics = queueData?.metrics ?? null;
const handleFlushQueue = async () => {
await post("/queue/flush", {});
refetch();
};
return (
<Stack gap={theme.spacing(8)}>
<Metrics metrics={metrics} />
2026-02-06 17:24:16 +00:00
<Typography
variant="h6"
sx={{ textTransform: "uppercase" }}
>
{t("pages.logs.jobQueue")}
</Typography>
2026-02-05 21:40:36 +00:00
<TableJobs jobs={jobs} />
2026-02-06 17:24:16 +00:00
<Typography
variant="h6"
sx={{ textTransform: "uppercase" }}
>
{t("pages.logs.failedJobs")}
</Typography>
2026-02-05 21:40:36 +00:00
<TableFailedJobs metrics={metrics} />
<Stack alignItems={"flex-end"}>
<Button
variant="contained"
onClick={handleFlushQueue}
loading={isFlushing}
>
{t("common.buttons.flushQueue")}
</Button>
</Stack>
</Stack>
);
2026-02-05 20:23:04 +00:00
};