import { useSuspenseQuery } from "@tanstack/react-query"; import { createFileRoute, redirect } from "@tanstack/react-router"; import { createColumnHelper } from "@tanstack/react-table"; import { format } from "date-fns-tz"; import { CircleFadingArrowUp, Trash } from "lucide-react"; import { Suspense, useState } from "react"; import { toast } from "sonner"; import { Button } from "../../components/ui/button"; import { Spinner } from "../../components/ui/spinner"; import { Tooltip, TooltipContent, TooltipTrigger, } from "../../components/ui/tooltip"; import { useSocketRoom } from "../../hooks/socket.io.hook"; import { api } from "../../lib/apiHelper"; import { authClient } from "../../lib/auth-client"; import { servers } from "../../lib/queries/servers"; import LstTable from "../../lib/tableStuff/LstTable"; import SearchableHeader from "../../lib/tableStuff/SearchableHeader"; import SkellyTable from "../../lib/tableStuff/SkellyTable"; export const Route = createFileRoute("/admin/servers")({ beforeLoad: async ({ location }) => { const { data: session } = await authClient.getSession(); const allowedRole = ["systemAdmin", "admin"]; if (!session?.user) { throw redirect({ to: "/", search: { redirect: location.href, }, }); } if (!allowedRole.includes(session.user.role as string)) { throw redirect({ to: "/", }); } return { user: session.user }; }, component: RouteComponent, }); const ServerTable = () => { const { data, refetch } = useSuspenseQuery(servers()); const columnHelper = createColumnHelper(); const okToUpdate = ["localhost", "usmcd1olp082"]; const columns = [ columnHelper.accessor("name", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => ( <> {i.getValue()} ), }), columnHelper.accessor("greatPlainsPlantCode", { header: ({ column }) => ( ), cell: (i) => {i.getValue().toUpperCase()}, }), columnHelper.accessor("server", { header: ({ column }) => ( ), cell: (i) => {i.getValue().toUpperCase()}, }), columnHelper.accessor("idAddress", { header: ({ column }) => ( ), cell: (i) => {i.getValue()}, }), ]; if (okToUpdate.includes(window.location.hostname)) { columns.push( columnHelper.accessor("lastUpdated", { header: ({ column }) => ( ), cell: (i) => {format(i.getValue(), "M/d/yyyy HH:mm")}, }), columnHelper.accessor("buildNumber", { header: ({ column }) => ( ), cell: (i) => {i.getValue()}, }), columnHelper.accessor("update", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => { // biome-ignore lint: just removing the lint for now to get this going will maybe fix later const [activeToggle, setActiveToggle] = useState(false); const onToggle = async () => { toast.success( `${i.row.original.name} just started the upgrade monitor logs for errors.`, ); setActiveToggle(activeToggle); try { const res = await api.post( `/admin/build/updateServer`, { server: i.row.original.server, destination: i.row.original.serverLoc, token: i.row.original.plantToken, }, { withCredentials: true, timeout: 5 * 60 * 1000 }, ); if (res.data.success) { toast.success( `${i.row.original.name} has completed its upgrade.`, ); refetch(); setActiveToggle(false); } } catch (error) { setActiveToggle(false); console.error(error); } }; return (
); }, }), ); } return ; }; function RouteComponent() { const { data: logs = [], clearRoom } = useSocketRoom("admin:build"); const columnHelper = createColumnHelper(); const logColumns = [ columnHelper.accessor("timestamp", { header: ({ column }) => ( ), filterFn: "includesString", cell: (i) => format(i.getValue(), "M/d/yyyy HH:mm"), }), columnHelper.accessor("message", { header: ({ column }) => ( ), cell: (i) => ( {i.getValue()?.length > 250 ? ( {i.getValue().slice(0, 250)}... ) : ( {i.getValue()} )} {i.getValue()} ), }), columnHelper.accessor("clearLog", { header: ({ column }) => ( ), cell: ({ row }) => { const x = row.original; return ( ); }, }), ]; const triggerBuild = async () => { try { const res = await api.post( `/admin/build/release`, { withCredentials: true, }, ); if (res.data.success) { toast.success(res.data.message); } if (!res.data.success) { toast.error(res.data.message); } } catch (err) { console.log(err); //toast.error(err?.message); } }; //console.log(logs); return (
}>
); }