import Stack from "@mui/material/Stack"; import Typography from "@mui/material/Typography"; import Box from "@mui/material/Box"; import { TableJobs, TableFailedJobs } from "./components/TableJobs"; import { TableWorkers } from "./components/TableWorkers"; import { useTheme } from "@mui/material"; import { useState } from "react"; import { useTranslation, Trans } from "react-i18next"; import { useGet, usePost } from "@/Hooks/UseApi"; import type { QueueData } from "@/Types/Queue"; import { Metrics } from "@/Pages/Logs/components/Metrics"; import { Button } from "@/Components/inputs"; import { EmptyState } from "@/Components/design-elements"; import { SPACING } from "@/Utils/Theme/constants"; export const TabQueue = () => { const theme = useTheme(); const { t } = useTranslation(); const [page, setPage] = useState(0); const [rowsPerPage, setRowsPerPage] = useState(10); const { data: queueData, isLoading, // error, refetch, } = useGet( `/queue/all-metrics?page=${page}&rowsPerPage=${rowsPerPage}`, {}, { refreshInterval: 1000, keepPreviousData: true } ); const { post, loading: isFlushing } = usePost(); const jobs = queueData?.jobs ?? []; const jobsCount = queueData?.count ?? 0; const workers = (queueData?.metrics?.workers ?? []).map((worker, idx) => ({ ...worker, id: idx, })); const metrics = queueData?.metrics ?? null; const hasNeverRun = !isLoading && metrics !== null && (metrics.totalRuns ?? 0) === 0; const noQueueData = !isLoading && metrics === null && jobs.length === 0; if (hasNeverRun || noQueueData) { return ( ); } const handleFlushQueue = async () => { await post("/queue/flush", {}); refetch(); }; return ( {t("pages.logs.workers")} ), }} /> {t("pages.logs.jobQueue")} ), }} /> setPage(newPage)} onRowsPerPageChange={(event) => { setRowsPerPage(parseInt(event.target.value, 10)); setPage(0); }} /> {t("pages.logs.failedJobs")} {t("pages.logs.failedJobsExplainer")} ); };