Gal Podlipnik dac64ac41a
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 3s
containers update + docker file build
2025-06-09 02:29:55 +02:00

69 lines
1.7 KiB
TypeScript

import type { WSContext } from "hono/ws";
import type { ContainerInfo, ContainerStats } from "./types.js";
export function sendContainerInfo(
containerClients: Set<WSContext<WebSocket>>,
containerInfo: ContainerInfo | ContainerInfo[]
) {
const containers = Array.isArray(containerInfo)
? containerInfo
: [containerInfo];
const payload = JSON.stringify({ containers });
sendToClientSet(containerClients, payload);
}
export function sendStats(
statsClients: Set<WSContext<WebSocket>>,
stats: ContainerStats
) {
const payload = JSON.stringify({ stats: [stats] });
sendToClientSet(statsClients, payload);
}
export function sendCombined(
combinedClients: Set<WSContext<WebSocket>>,
containerInfo: ContainerInfo,
stats: ContainerStats
) {
const payload = JSON.stringify({
containers: [containerInfo],
stats: [stats],
});
sendToClientSet(combinedClients, payload);
}
export function sendToSingleContainer(
singleContainerClients: Map<string, Set<WSContext<WebSocket>>>,
containerId: string,
containerInfo: ContainerInfo,
stats: ContainerStats
) {
const combinedData = {
...containerInfo,
...stats,
};
const payload = JSON.stringify({ container: combinedData });
const clients = singleContainerClients.get(containerId);
if (clients) {
sendToClientSet(clients, payload);
}
}
export function sendToClientSet(
clients: Set<WSContext<WebSocket>>,
payload: string
) {
for (const ws of clients) {
if (ws.readyState === 1) {
try {
ws.send(payload);
} catch (err) {
console.error("Error sending to client:", err);
clients.delete(ws);
}
} else {
clients.delete(ws);
}
}
}