Live monitoring fix
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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)"
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user