From 8ec3880ee08ff41844cf1a78a7a3a4e67cd1585a Mon Sep 17 00:00:00 2001 From: Leo dev Date: Wed, 23 Jul 2025 15:14:43 -0500 Subject: [PATCH] aded apps (not functional yet) --- src/app/api/data.ts | 2 +- src/app/servers/[server]/AppComponent.tsx | 114 ++++++++++++++++++++++ src/app/servers/[server]/page.tsx | 23 +++++ src/types/service.ts | 2 +- 4 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 src/app/servers/[server]/AppComponent.tsx diff --git a/src/app/api/data.ts b/src/app/api/data.ts index 5697084..88fa084 100644 --- a/src/app/api/data.ts +++ b/src/app/api/data.ts @@ -38,6 +38,6 @@ export default class Data { mkdirSync(dir, { recursive: true }); } - writeFileSync(this.file_path, JSON.stringify(this.data)); + writeFileSync(this.file_path, JSON.stringify(this.data, undefined, 4)); } } diff --git a/src/app/servers/[server]/AppComponent.tsx b/src/app/servers/[server]/AppComponent.tsx new file mode 100644 index 0000000..0c6d186 --- /dev/null +++ b/src/app/servers/[server]/AppComponent.tsx @@ -0,0 +1,114 @@ +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Label } from "@/components/ui/label"; +import { Progress } from "@/components/ui/progress"; +import Session from "@/lib/session"; +import Service, { AppService } from "@/types/service"; +import { AppWindowMac } from "lucide-react"; +import { redirect } from "next/navigation"; +import { useState } from "react"; + +export function UsageBar({ + value, + Icon, + text, + color, +}: { + value: number; + Icon: React.ElementType; + text: string; + color: string; +}) { + return ( +
+
+ + +
+ +
+ ); +} + +function formatBytes(bytes: number, decimals = 2): string { + if (bytes === 0) return "0 Bytes"; + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + const size = parseFloat((bytes / Math.pow(k, i)).toFixed(dm)); + + return `${size} ${sizes[i]}`; +} + +export function ByteUnit({ + value, + Icon, + text, + color, +}: { + value: number; + Icon: React.ElementType; + text: string; + color: string; +}) { + return ( +
+
+ + +
+
+ ) +} + +export default function AppComponent({ + service, + index, + app +}: { + service: Service; + app: AppService; + index: number; +}) { + const [deleteAlert, setDeleteAlert] = useState(false); + + return ( + { + redirect(`/servers/${index}`); + }} + > + +
+
+ +
+
+ {app.name} + + {(service.description && +

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

{service.description}
+ {(service as any).cpu} +
)} +
+
+
+ + +
+ ); +} diff --git a/src/app/servers/[server]/page.tsx b/src/app/servers/[server]/page.tsx index f69009a..5f76fb6 100644 --- a/src/app/servers/[server]/page.tsx +++ b/src/app/servers/[server]/page.tsx @@ -5,6 +5,10 @@ import { useEffect, useState } from "react"; import ServiceComponent from "./service"; import ServerComponent from "@/app/dashboard/server"; import Service, { AppService } from "@/types/service"; +import AppComponent from "./AppComponent"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { toast } from "sonner"; interface Server2 extends Server { services: Service[], @@ -32,6 +36,25 @@ export default function ServerPage(params: { server: string }) {
+ + +
+ Sentryx Apps + Your Sentryx apps on this server +
+ +
+ +
+ {server.apps.map((a, i) => { + const srv = server.services.find(s => s.name == a.service); + return srv && ; + })} +
+
+
{server.services.map((a, i) => ( diff --git a/src/types/service.ts b/src/types/service.ts index 4249303..76a3d8d 100644 --- a/src/types/service.ts +++ b/src/types/service.ts @@ -1,2 +1,2 @@ -export interface AppService { name?: string, description?: string }; +export interface AppService { name?: string, description?: string, service: string }; export default interface Service { name?: string, description?: string, active_state: string }; \ No newline at end of file