diff --git a/bot/lib/clientStats.ts b/bot/lib/clientStats.ts index 88ed681..92cf657 100644 --- a/bot/lib/clientStats.ts +++ b/bot/lib/clientStats.ts @@ -28,6 +28,7 @@ export function getClientStats(): ClientStats { ping: AuroraClient.ws.ping, cachedUsers: AuroraClient.users.cache.size, commandsRegistered: AuroraClient.commands.size, + commandsKnown: AuroraClient.knownCommands.size, uptime: process.uptime(), lastCommandTimestamp: AuroraClient.lastCommandTimestamp, }; diff --git a/shared/modules/dashboard/dashboard.types.ts b/shared/modules/dashboard/dashboard.types.ts index dc2d9c2..5549d4f 100644 --- a/shared/modules/dashboard/dashboard.types.ts +++ b/shared/modules/dashboard/dashboard.types.ts @@ -25,6 +25,8 @@ export const DashboardStatsSchema = z.object({ }), commands: z.object({ total: z.number(), + active: z.number(), + disabled: z.number(), changePercentFromLastMonth: z.number().optional(), }), ping: z.object({ @@ -53,6 +55,7 @@ export const ClientStatsSchema = z.object({ ping: z.number(), cachedUsers: z.number(), commandsRegistered: z.number(), + commandsKnown: z.number(), uptime: z.number(), lastCommandTimestamp: z.number().nullable(), }); diff --git a/web/src/pages/Dashboard.tsx b/web/src/pages/Dashboard.tsx index 7f6612f..e330cac 100644 --- a/web/src/pages/Dashboard.tsx +++ b/web/src/pages/Dashboard.tsx @@ -2,6 +2,10 @@ import React from "react"; import { Link } from "react-router-dom"; import { useSocket } from "../hooks/use-socket"; import { Badge } from "../components/ui/badge"; +import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card"; +import { Skeleton } from "../components/ui/skeleton"; +import { Server, Users, Terminal, Activity } from "lucide-react"; +import { cn } from "../lib/utils"; export function Dashboard() { const { isConnected, stats } = useSocket(); @@ -26,8 +30,8 @@ export function Dashboard() { {/* Live Status Badge */}
{isConnected && ( @@ -51,15 +55,107 @@ export function Dashboard() {
- {/* Content Placeholder */} -
-
-

Dashboard Overview

-

- Real-time connection status: - {isConnected ? "Connected" : "Disconnected"} - -

+ {/* Dashboard Content */} +
+ + {/* Stats Grid */} +
+ + + Total Servers + + + + {stats ? ( + <> +
{stats.guilds.count.toLocaleString()}
+

+ {stats.guilds.changeFromLastMonth + ? `${stats.guilds.changeFromLastMonth > 0 ? '+' : ''}${stats.guilds.changeFromLastMonth} from last month` + : "Active Guilds" + } +

+ + ) : ( +
+ + +
+ )} +
+
+ + + + Total Users + + + + {stats ? ( + <> +
{stats.users.total.toLocaleString()}
+

+ {stats.users.active.toLocaleString()} active now +

+ + ) : ( +
+ + +
+ )} +
+
+ + + + Commands + + + + {stats ? ( + <> +
{stats.commands.total.toLocaleString()}
+

+ {stats.commands.active} active ยท {stats.commands.disabled} disabled +

+ + ) : ( +
+ + +
+ )} +
+
+ + + + System Ping + + + + {stats ? ( + <> +
+ {Math.round(stats.ping.avg)}ms +
+

+ Average latency +

+ + ) : ( +
+ + +
+ )} +
+
diff --git a/web/src/server.ts b/web/src/server.ts index 0e89989..7d726ae 100644 --- a/web/src/server.ts +++ b/web/src/server.ts @@ -388,6 +388,7 @@ export async function createWebServer(config: WebServerConfig = {}): Promise