diff --git a/src/app/monitoring/monitoring-nodes.tsx b/src/app/monitoring/monitoring-nodes.tsx index 0196a62..6b7ae6c 100644 --- a/src/app/monitoring/monitoring-nodes.tsx +++ b/src/app/monitoring/monitoring-nodes.tsx @@ -1,57 +1,340 @@ -'use client' +'use client'; -import { NodeResourceModel } from "@/shared/model/node-resource.model"; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; -import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; -import { Code } from "@/components/custom/code"; -import { Toast } from "@/frontend/utils/toast.utils"; -import { setNodeStatus } from "./actions"; -import { Button } from "@/components/ui/button"; -import { useBreadcrumbs, useConfirmDialog } from "@/frontend/states/zustand.states"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; -import { useEffect } from "react"; +import { TrendingUp } from 'lucide-react'; +import { + Label, + PolarGrid, + PolarRadiusAxis, + RadialBar, + RadialBarChart, +} from 'recharts'; -export default async function ResourcesNodes({ resourcesNodes }: { resourcesNodes: NodeResourceModel[] }) { +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from '@/components/ui/card'; +import { ChartConfig, ChartContainer } from '@/components/ui/chart'; - const { setBreadcrumbs } = useBreadcrumbs(); - useEffect(() => setBreadcrumbs([ - { name: "Monitoring", url: "/monitoring" }, - ]), []); +import { NodeResourceModel } from '@/shared/model/node-resource.model'; +import { + Table, + TableBody, + TableCaption, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; +import { Code } from '@/components/custom/code'; +import { Toast } from '@/frontend/utils/toast.utils'; +import { setNodeStatus } from './actions'; +import { Button } from '@/components/ui/button'; +import { + useBreadcrumbs, + useConfirmDialog, +} from '@/frontend/states/zustand.states'; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip'; +import { useEffect } from 'react'; - return ( - - - Nodes Resources - Overview of all Nodes in your Cluster - - - - - - Name - CPU Absolut - CPU Capacity - RAM Absolut - RAM Capacity - Disk Absolut - Disk Capacity - - - - {resourcesNodes.map((node) => ( - - {node.name} - {node.cpuUsageAbsolut} - {node.cpuUsageCapacity} - {node.ramUsageAbsolut} - {node.ramUsageCapacity} - {node.diskUsageAbsolut} - {node.diskUsageCapacity} - - ))} - -
-
-
- ) +export default async function ResourcesNodes({ + resourcesNodes, +}: { + resourcesNodes: NodeResourceModel[]; +}) { + const chartData = [ + { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' }, + ]; + + const chartConfig = { + visitors: { + label: 'Visitors', + }, + safari: { + label: 'Safari', + color: 'hsl(var(--chart-2))', + }, + } satisfies ChartConfig; + + const { setBreadcrumbs } = useBreadcrumbs(); + useEffect( + () => setBreadcrumbs([{ name: 'Monitoring', url: '/monitoring' }]), + [] + ); + + return ( + + + Nodes + Overview of all Nodes in your Cluster + + +
+ {resourcesNodes.map((Node, index) => ( +
+

+ Node {index + 1} +

+
+ + + CPU + Usage in % + + + + + + + + + + + + +
+ CPU Absolute: {Node.cpuUsageAbsolut.toFixed(2)} cores +
+
+ CPU Capacity: {Node.cpuUsageCapacity.toFixed(2)} cores +
+
+
+
+
+ + + RAM + Usage in % + + + + + + + + + + + + +
+ RAM Absolute: {(Node.ramUsageAbsolut / (1024 * 1024 * 1024)).toFixed(2)} GB +
+
+ RAM Capacity: {(Node.ramUsageCapacity / (1024 * 1024 * 1024)).toFixed(2)} GB +
+
+
+
+
+ + + Disk + Usage in % + + + + + + + + + + + + +
+ Disk Absolute: {(Node.diskUsageAbsolut / (1024 * 1024 * 1024)).toFixed(2)} GB +
+
+ Disk Capacity: {(Node.diskUsageCapacity / (1024 * 1024 * 1024)).toFixed(2)} GB +
+
+
+
+
+ ))} +
+
+
+ ); }