Browse Source

Live monitoring fix

Leo dev 1 week ago
parent
commit
35a6f8b4aa
4 changed files with 25 additions and 17 deletions
  1. 1 0
      src/app/api/servers/servers.ts
  2. 1 3
      src/app/dashboard/page.tsx
  3. 13 13
      src/app/servers/Map.tsx
  4. 10 1
      src/app/servers/page.tsx

+ 1 - 0
src/app/api/servers/servers.ts

@@ -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
src/app/dashboard/page.tsx

@@ -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
src/app/servers/Map.tsx

@@ -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}
-                    {sheet.location && (
+                    {servers[sheet].ip}
+                    {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
src/app/servers/page.tsx

@@ -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(() => {