From 96f174dd0e9705088164df25a4e566b76e430cba Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 19 Jul 2025 10:18:03 -0500 Subject: [PATCH] Service caching and a few ui stuff --- src/app/api/server/route.ts | 11 +- src/app/api/servers/servers.ts | 6 +- src/app/dashboard/server.tsx | 7 +- src/app/globals.css | 8 ++ src/app/servers/[server]/page.tsx | 7 +- src/app/servers/[server]/service.tsx | 158 +++++---------------------- src/types/service.ts | 1 + 7 files changed, 58 insertions(+), 140 deletions(-) create mode 100644 src/types/service.ts diff --git a/src/app/api/server/route.ts b/src/app/api/server/route.ts index bbafd6d..207247e 100644 --- a/src/app/api/server/route.ts +++ b/src/app/api/server/route.ts @@ -1,7 +1,10 @@ import axios, { HttpStatusCode } from "axios"; import { NextResponse } from "next/server"; -import { servers } from "../servers/servers"; +import { PORT, servers } from "../servers/servers"; import validate from "../auth/auth"; +import Service from "@/types/service"; + +const allServices: { [key: string]: Service[] } = {}; export async function GET(request: Request) { const { searchParams } = new URL(request.url); @@ -26,10 +29,12 @@ export async function GET(request: Request) { const server = servers.data[parseInt(index)]; - const apps = await axios.get(`http://${server.ip}:8080/apps`, {params: {auth: 'my-key'}}); + axios.get(`http://${server.ip}:${PORT}/apps`, {params: {auth: 'my-key'}}).then((apps) => { + allServices[parseInt(index)] = apps.data; + }); return NextResponse.json({ message: "ok", - apps: apps.data, + apps: allServices[parseInt(index)] || [], }); } diff --git a/src/app/api/servers/servers.ts b/src/app/api/servers/servers.ts index 148593b..c9bc31e 100644 --- a/src/app/api/servers/servers.ts +++ b/src/app/api/servers/servers.ts @@ -2,6 +2,8 @@ import Server, { ServerAPI } from "@/types/server"; import Data from "../data"; import axios from "axios"; +export const PORT = 63774; + export const useServer = (server: ServerAPI, index: number) => { const interval = setInterval(() => { if (deletes.has(index) || !currentServers[index]) { @@ -9,7 +11,7 @@ export const useServer = (server: ServerAPI, index: number) => { interval.close(); return; } - axios.get(`http://${server.ip}:8080/`, {params: {auth: 'my-key'}}).then(({data}) => { + axios.get(`http://${server.ip}:${PORT}/`, {params: {auth: 'my-key'}}).then(({data}) => { if (data.status) { currentServers[index].status = data.status; } @@ -25,7 +27,9 @@ export const useServer = (server: ServerAPI, index: number) => { if (data.network) { currentServers[index].network = data.network; } + currentServers[index].status = 'online'; }).catch((e) => { + currentServers[index].status = 'offline'; console.error(e.data); }) }, 2000); diff --git a/src/app/dashboard/server.tsx b/src/app/dashboard/server.tsx index 0d59c53..7cd8ff0 100644 --- a/src/app/dashboard/server.tsx +++ b/src/app/dashboard/server.tsx @@ -24,6 +24,7 @@ import { import { Label } from "@/components/ui/label"; import { Progress } from "@/components/ui/progress"; import Session from "@/lib/session"; +import { cn } from "@/lib/utils"; import Server from "@/types/server"; import { Cpu, @@ -130,12 +131,12 @@ export default function ServerComponent({
{server.name} -
- {server.status[0].toUpperCase() + server.status.slice(1)} +
+
{server.status[0].toUpperCase() + server.status.slice(1)}
{" ยท "} {server.ip} {server.location && ( -
+
{server.location}
diff --git a/src/app/globals.css b/src/app/globals.css index cc8079c..08a858b 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -303,3 +303,11 @@ body { .sidebar div { border-radius: 14px !important; } + +.online { + color: var(--chart-3) !important; +} + +.offline { + color: var(--chart-4) !important; +} \ No newline at end of file diff --git a/src/app/servers/[server]/page.tsx b/src/app/servers/[server]/page.tsx index d19e914..abbaa90 100644 --- a/src/app/servers/[server]/page.tsx +++ b/src/app/servers/[server]/page.tsx @@ -15,13 +15,18 @@ export default function ServerPage() { useEffect(() => { session?.getServerIndex(0).then((s) => { setServer(s.data); + setTimeout(() => { + session?.getServerIndex(0).then((s) => { + setServer(s.data); + }); + }, 1000); }); }, [session]); return server && (
{server.apps.map((a, i) => ( - + ))}
); diff --git a/src/app/servers/[server]/service.tsx b/src/app/servers/[server]/service.tsx index 526c14e..94cee3b 100644 --- a/src/app/servers/[server]/service.tsx +++ b/src/app/servers/[server]/service.tsx @@ -1,13 +1,3 @@ -import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogTitle, -} from "@/components/ui/alert-dialog"; import { Card, CardContent, @@ -15,32 +5,13 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { - ContextMenu, - ContextMenuContent, - ContextMenuItem, - ContextMenuTrigger, -} from "@/components/ui/context-menu"; import { Label } from "@/components/ui/label"; import { Progress } from "@/components/ui/progress"; import Session from "@/lib/session"; -import Server from "@/types/server"; -import { - AppWindow, - AppWindowMac, - Cpu, - HardDrive, - MapPin, - MemoryStick, - Network, - Pencil, - ServerIcon, - Trash, - Wifi, -} from "lucide-react"; +import Service from "@/types/service"; +import { AppWindowMac } from "lucide-react"; import { redirect } from "next/navigation"; import { useState } from "react"; -import { toast } from "sonner"; export function UsageBar({ value, @@ -104,116 +75,39 @@ export function ByteUnit({ } export default function ServiceComponent({ - server: service, + service, index, session, }: { - server: { name?: string, description?: string }; + service: Service; index: number; session: Session | null; }) { const [deleteAlert, setDeleteAlert] = useState(false); return ( - <> - - - { - redirect(`/servers/${index}`); - }} - > - -
-
- -
-
- {service.name} + { + redirect(`/servers/${index}`); + }} + > + +
+
+ +
+
+ {service.name} - {(service.description && - {service.description} {(service as any).cpu} - )} -
-
-
- - {/* - - */} - {/*
-
- - -
-
*/} -
-
- - - - - Edit - - setDeleteAlert(true)} - > - - Delete - - - - - - - - Are you sure? - - This action will permanently remove your server from the server - list - - - - Cancel - - session - ?.removeServer(index) - .then(() => { - toast.info("Server successfully deleted"); - }) - .catch((e) => { - toast.error( - `Error deleting server: ` + e.response.data.message - ); - }) - } - > - Delete - - - - - + {(service.description && + {service.description} {(service as any).cpu} + )} +
+
+
+ + +
); } diff --git a/src/types/service.ts b/src/types/service.ts new file mode 100644 index 0000000..96383be --- /dev/null +++ b/src/types/service.ts @@ -0,0 +1 @@ +export default interface Service { name?: string, description?: string }; \ No newline at end of file