feat: add job event list

This commit is contained in:
2025-12-31 01:27:33 +01:00
parent a1269928d1
commit 3592740e42
4 changed files with 101 additions and 3 deletions

View File

@@ -4,6 +4,7 @@ import {
IconDashboard,
IconFileAi,
IconFileDescription,
IconList,
IconServer,
} from "@tabler/icons-react";
@@ -34,6 +35,11 @@ const data = {
url: "/server_list",
icon: IconServer,
},
{
title: "Job List",
url: "/job_event_list",
icon: IconList,
},
],
navClouds: [
{

View File

@@ -0,0 +1,7 @@
export interface JobEvent {
id: number;
job_name: string;
event_type: string;
event_data?: string | null;
created_at?: string | null;
}

View File

@@ -10,6 +10,7 @@
import { Route as rootRouteImport } from './routes/__root'
import { Route as Server_listRouteImport } from './routes/server_list'
import { Route as Job_event_listRouteImport } from './routes/job_event_list'
import { Route as IndexRouteImport } from './routes/index'
import { Route as ServerServerIdRouteImport } from './routes/server.$serverId'
@@ -18,6 +19,11 @@ const Server_listRoute = Server_listRouteImport.update({
path: '/server_list',
getParentRoute: () => rootRouteImport,
} as any)
const Job_event_listRoute = Job_event_listRouteImport.update({
id: '/job_event_list',
path: '/job_event_list',
getParentRoute: () => rootRouteImport,
} as any)
const IndexRoute = IndexRouteImport.update({
id: '/',
path: '/',
@@ -31,30 +37,39 @@ const ServerServerIdRoute = ServerServerIdRouteImport.update({
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/job_event_list': typeof Job_event_listRoute
'/server_list': typeof Server_listRoute
'/server/$serverId': typeof ServerServerIdRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
'/job_event_list': typeof Job_event_listRoute
'/server_list': typeof Server_listRoute
'/server/$serverId': typeof ServerServerIdRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
'/job_event_list': typeof Job_event_listRoute
'/server_list': typeof Server_listRoute
'/server/$serverId': typeof ServerServerIdRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
fullPaths: '/' | '/server_list' | '/server/$serverId'
fullPaths: '/' | '/job_event_list' | '/server_list' | '/server/$serverId'
fileRoutesByTo: FileRoutesByTo
to: '/' | '/server_list' | '/server/$serverId'
id: '__root__' | '/' | '/server_list' | '/server/$serverId'
to: '/' | '/job_event_list' | '/server_list' | '/server/$serverId'
id:
| '__root__'
| '/'
| '/job_event_list'
| '/server_list'
| '/server/$serverId'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
Job_event_listRoute: typeof Job_event_listRoute
Server_listRoute: typeof Server_listRoute
ServerServerIdRoute: typeof ServerServerIdRoute
}
@@ -68,6 +83,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof Server_listRouteImport
parentRoute: typeof rootRouteImport
}
'/job_event_list': {
id: '/job_event_list'
path: '/job_event_list'
fullPath: '/job_event_list'
preLoaderRoute: typeof Job_event_listRouteImport
parentRoute: typeof rootRouteImport
}
'/': {
id: '/'
path: '/'
@@ -87,6 +109,7 @@ declare module '@tanstack/react-router' {
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
Job_event_listRoute: Job_event_listRoute,
Server_listRoute: Server_listRoute,
ServerServerIdRoute: ServerServerIdRoute,
}

View File

@@ -0,0 +1,62 @@
import { Card } from "@/components/ui/card";
import {
Table,
TableBody,
TableCell,
TableFooter,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import type { JobEvent } from "@/models/job_event";
import { useQuery } from "@tanstack/react-query";
import { createFileRoute } from "@tanstack/react-router";
export const Route = createFileRoute("/job_event_list")({
component: RouteComponent,
});
function RouteComponent() {
const { data: jobEvents } = useQuery({
queryKey: ["job_events"],
queryFn: async () => {
const response = await fetch("/api/job_events");
return (await response.json()) as JobEvent[];
},
});
return (
<div className="p-2 flex justify-center items-center w-full">
<Card className="w-full max-w-225 p-2">
<Table>
<TableHeader>
<TableRow>
<TableHead className="w-[100px]">Job Name</TableHead>
<TableHead>Event Type</TableHead>
<TableHead>Event Data</TableHead>
<TableHead className="text-right">Date</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{jobEvents?.map((job) => (
<TableRow key={job.id} className="cursor-pointer">
<TableCell className="font-medium">{job.job_name}</TableCell>
<TableCell>{job.event_type}</TableCell>
<TableCell>{job.event_data}</TableCell>
<TableCell className="text-right">
{new Date(job.created_at ?? "0").toLocaleString()}
</TableCell>
</TableRow>
))}
</TableBody>
<TableFooter>
<TableRow>
<TableCell colSpan={3}>Total Jobs</TableCell>
<TableCell className="text-right">{jobEvents?.length}</TableCell>
</TableRow>
</TableFooter>
</Table>
</Card>
</div>
);
}