Live monitoring fix

This commit is contained in:
2025-07-17 11:09:14 -05:00
parent d99281f3a7
commit 35a6f8b4aa
4 changed files with 25 additions and 17 deletions
+1
View File
@@ -6,6 +6,7 @@ export const useServer = (server: ServerAPI, index: number) => {
ws.onmessage = (msg) => { ws.onmessage = (msg) => {
try { try {
if (deletes.has(index) || !currentServers[index]) { if (deletes.has(index) || !currentServers[index]) {
deletes.delete(index);
ws.close(); ws.close();
return; return;
} }
+1 -3
View File
@@ -76,11 +76,9 @@ export default function Dashboard() {
useEffect(() => { useEffect(() => {
getServers(); getServers();
const interval = setInterval(() => { const interval = setInterval(() => {
console.log("Refreshing servers data...");
getServers(); getServers();
}, 3000); }, 3000);
// Cleanup on unmount
return () => clearInterval(interval); return () => clearInterval(interval);
}, [session]); }, [session]);
+13 -13
View File
@@ -24,7 +24,7 @@ export default function Map({ servers }: { servers: Server[] }) {
const mapContainer = useRef<HTMLDivElement | null>(null); const mapContainer = useRef<HTMLDivElement | null>(null);
const map = useRef<maplibregl.Map | null>(null); const map = useRef<maplibregl.Map | null>(null);
const markers = useRef<maplibregl.Marker[]>([]); const markers = useRef<maplibregl.Marker[]>([]);
const [sheet, setSheet] = useState<Server | undefined>(); const [sheet, setSheet] = useState<number | undefined>();
// Initialize map only once // Initialize map only once
useEffect(() => { useEffect(() => {
@@ -57,14 +57,14 @@ export default function Map({ servers }: { servers: Server[] }) {
markers.current = []; markers.current = [];
// Add new markers // Add new markers
servers.forEach((server) => { servers.forEach((server, i) => {
if (server.coordinates) { if (server.coordinates) {
const marker = new maplibregl.Marker({ color: "#ff3e00" }) const marker = new maplibregl.Marker({ color: "#ff3e00" })
.setLngLat(server.coordinates) .setLngLat(server.coordinates)
.addTo(map.current!); .addTo(map.current!);
marker.getElement().addEventListener("click", () => { marker.getElement().addEventListener("click", () => {
setSheet(server); setSheet(i);
}); });
markers.current.push(marker); markers.current.push(marker);
@@ -75,7 +75,7 @@ export default function Map({ servers }: { servers: Server[] }) {
return ( return (
<div ref={mapContainer} className="w-full h-full"> <div ref={mapContainer} className="w-full h-full">
<Sheet open={sheet != undefined} onOpenChange={() => setSheet(undefined)}> <Sheet open={sheet != undefined} onOpenChange={() => setSheet(undefined)}>
{sheet && ( {sheet != undefined && (
<SheetContent> <SheetContent>
<SheetHeader> <SheetHeader>
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
@@ -83,15 +83,15 @@ export default function Map({ servers }: { servers: Server[] }) {
<ServerIcon className="w-4.5 h-4.5 text-current my-auto" /> <ServerIcon className="w-4.5 h-4.5 text-current my-auto" />
</div> </div>
<div> <div>
<SheetTitle>{sheet.name}</SheetTitle> <SheetTitle>{servers[sheet].name}</SheetTitle>
<SheetDescription className="flex gap-2"> <SheetDescription className="flex gap-2">
{sheet.status[0].toUpperCase() + sheet.status.slice(1)}{" "} {servers[sheet].status[0].toUpperCase() + servers[sheet].status.slice(1)}{" "}
{" · "} {" · "}
{sheet.ip} {servers[sheet].ip}
{sheet.location && ( {servers[sheet].location && (
<span className="flex items-center gap-0.5"> <span className="flex items-center gap-0.5">
<MapPin size={14} /> <MapPin size={14} />
{sheet.location} {servers[sheet].location}
</span> </span>
)} )}
</SheetDescription> </SheetDescription>
@@ -100,25 +100,25 @@ export default function Map({ servers }: { servers: Server[] }) {
</SheetHeader> </SheetHeader>
<div className="px-4 gap-4 flex flex-col"> <div className="px-4 gap-4 flex flex-col">
<UsageBar <UsageBar
value={sheet.cpu} value={servers[sheet].cpu}
Icon={Cpu} Icon={Cpu}
text="CPU" text="CPU"
color="var(--chart-2)" color="var(--chart-2)"
/> />
<UsageBar <UsageBar
value={sheet.memory} value={servers[sheet].memory}
Icon={MemoryStick} Icon={MemoryStick}
text="Memory" text="Memory"
color="var(--chart-1)" color="var(--chart-1)"
/> />
<UsageBar <UsageBar
value={sheet.storage} value={servers[sheet].storage}
Icon={HardDrive} Icon={HardDrive}
text="Storage" text="Storage"
color="var(--chart-5)" color="var(--chart-5)"
/> />
<ByteUnit <ByteUnit
value={sheet.network} value={servers[sheet].network}
Icon={Network} Icon={Network}
text="Network" text="Network"
color="var(--chart-3)" color="var(--chart-3)"
+10 -1
View File
@@ -16,12 +16,21 @@ export default function Servers() {
const [searchedServers, setSearchedServers] = useState<Server[]>([]); const [searchedServers, setSearchedServers] = useState<Server[]>([]);
const [serversQuery, setServersQuery] = useState(""); const [serversQuery, setServersQuery] = useState("");
useEffect(() => { const getServers = () => {
if (!session) return; if (!session) return;
session.getServers().then((servers) => { session.getServers().then((servers) => {
setServers(servers); setServers(servers);
}); });
};
useEffect(() => {
getServers();
const interval = setInterval(() => {
getServers();
}, 3000);
return () => clearInterval(interval);
}, [session]); }, [session]);
useEffect(() => { useEffect(() => {