From c353a037d6cef608d7b761fbaca723ae65e3b0bd Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 21 Jul 2025 12:54:04 -0500 Subject: [PATCH] small stuff to /server/id --- src/app/api/server/route.ts | 7 ++++--- src/app/api/servers/route.ts | 5 +++-- src/app/api/servers/servers.ts | 1 - src/app/dashboard/server.tsx | 14 +++++++++----- src/app/globals.css | 8 ++++++++ src/app/servers/[server]/page.tsx | 21 +++++++++++++++------ src/app/servers/[server]/service.tsx | 3 ++- src/hooks/useSession.ts | 2 +- src/types/server.ts | 3 +++ src/types/service.ts | 3 ++- 10 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/app/api/server/route.ts b/src/app/api/server/route.ts index 207247e..2cab025 100644 --- a/src/app/api/server/route.ts +++ b/src/app/api/server/route.ts @@ -1,6 +1,6 @@ import axios, { HttpStatusCode } from "axios"; import { NextResponse } from "next/server"; -import { PORT, servers } from "../servers/servers"; +import { currentServers, PORT, servers } from "../servers/servers"; import validate from "../auth/auth"; import Service from "@/types/service"; @@ -27,14 +27,15 @@ export async function GET(request: Request) { } ); - const server = servers.data[parseInt(index)]; + const server = currentServers[parseInt(index)]; axios.get(`http://${server.ip}:${PORT}/apps`, {params: {auth: 'my-key'}}).then((apps) => { allServices[parseInt(index)] = apps.data; }); return NextResponse.json({ + ...server, message: "ok", - apps: allServices[parseInt(index)] || [], + services: allServices[parseInt(index)] || [], }); } diff --git a/src/app/api/servers/route.ts b/src/app/api/servers/route.ts index 68ebc28..68bddfe 100644 --- a/src/app/api/servers/route.ts +++ b/src/app/api/servers/route.ts @@ -20,8 +20,6 @@ export async function GET(request: Request) { if (query) { let tokens = (query || "").toLocaleLowerCase().split(" "); - console.log(tokens); - return NextResponse.json({ message: "ok", servers: currentServers.filter((s) => @@ -62,6 +60,7 @@ export async function POST(request: Request) { ip: body.ip, coordinates: body.coordinates, location: body.location, + apps: body.apps, }); currentServers.push({ @@ -69,6 +68,7 @@ export async function POST(request: Request) { ip: body.ip, coordinates: body.coordinates, location: body.location, + apps: body.apps, status: "offline", cpu: 0, memory: 0, @@ -81,6 +81,7 @@ export async function POST(request: Request) { ip: body.ip, coordinates: body.coordinates, location: body.location, + apps: body.apps, }, servers.data.length - 1); servers.write(); diff --git a/src/app/api/servers/servers.ts b/src/app/api/servers/servers.ts index c9bc31e..bb7bbab 100644 --- a/src/app/api/servers/servers.ts +++ b/src/app/api/servers/servers.ts @@ -30,7 +30,6 @@ export const useServer = (server: ServerAPI, index: number) => { 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 7cd8ff0..8d2c8d5 100644 --- a/src/app/dashboard/server.tsx +++ b/src/app/dashboard/server.tsx @@ -106,20 +106,23 @@ export default function ServerComponent({ server, index, session, + nonInteractive, }: { server: Server; index: number; session: Session | null; + nonInteractive?: boolean; }) { const [deleteAlert, setDeleteAlert] = useState(false); return ( <> - + { + if (nonInteractive) return; redirect(`/servers/${index}`); }} > @@ -183,7 +186,7 @@ export default function ServerComponent({ setDeleteAlert(true)} + onClick={() => {if (nonInteractive) return;setDeleteAlert(true)}} > Delete @@ -204,7 +207,8 @@ export default function ServerComponent({ Cancel + onClick={() => { + if (nonInteractive) return; session ?.removeServer(index) .then(() => { @@ -215,7 +219,7 @@ export default function ServerComponent({ `Error deleting server: ` + e.response.data.message ); }) - } + }} > Delete diff --git a/src/app/globals.css b/src/app/globals.css index 08a858b..57b48f8 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -310,4 +310,12 @@ body { .offline { color: var(--chart-4) !important; +} + +.running { + color: var(--chart-3) !important; +} + +.exited { + 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 abbaa90..a56d75b 100644 --- a/src/app/servers/[server]/page.tsx +++ b/src/app/servers/[server]/page.tsx @@ -3,12 +3,16 @@ import useSession from "@/hooks/useSession"; import Server from "@/types/server"; import { useEffect, useState } from "react"; import ServiceComponent from "./service"; +import ServerComponent from "@/app/dashboard/server"; +import Service, { AppService } from "@/types/service"; interface Server2 extends Server { - apps: { name?: string }[] + services: Service[], + apps: AppService[], } -export default function ServerPage() { +export default function ServerPage(params: { server: string }) { + const index = parseInt(params.server) || 0; const session = useSession(); const [server, setServer] = useState(); @@ -24,10 +28,15 @@ export default function ServerPage() { }, [session]); return server && ( -
- {server.apps.map((a, i) => ( - - ))} +
+
+ +
+
+ {server.services.map((a, i) => ( + + ))} +
); } diff --git a/src/app/servers/[server]/service.tsx b/src/app/servers/[server]/service.tsx index 94cee3b..a7d23fe 100644 --- a/src/app/servers/[server]/service.tsx +++ b/src/app/servers/[server]/service.tsx @@ -101,7 +101,8 @@ export default function ServiceComponent({ {service.name} {(service.description && - {service.description} {(service as any).cpu} +

{service.active_state[0].toUpperCase() + service.active_state.slice(1)}

{service.description}
+ {(service as any).cpu}
)}
diff --git a/src/hooks/useSession.ts b/src/hooks/useSession.ts index bbc387f..4da92d1 100644 --- a/src/hooks/useSession.ts +++ b/src/hooks/useSession.ts @@ -19,7 +19,7 @@ export default function useSession() { setSession(new Session(sessionId)); }) .catch((e) => { - toast.error(e.response.data.message); + toast.error(e.response?.data.message || "Unknown error occurred: "+e); router.replace("/login"); }); else { diff --git a/src/types/server.ts b/src/types/server.ts index 790c3fc..812c941 100644 --- a/src/types/server.ts +++ b/src/types/server.ts @@ -1,8 +1,11 @@ +import { AppService } from "./service"; + export interface ServerAPI { name: string; ip: string; location?: string; coordinates?: [number, number]; + apps: AppService[]; } export default interface Server extends ServerAPI { diff --git a/src/types/service.ts b/src/types/service.ts index 96383be..4249303 100644 --- a/src/types/service.ts +++ b/src/types/service.ts @@ -1 +1,2 @@ -export default interface Service { name?: string, description?: string }; \ No newline at end of file +export interface AppService { name?: string, description?: string }; +export default interface Service { name?: string, description?: string, active_state: string }; \ No newline at end of file