improve audit
This commit is contained in:
@@ -4,7 +4,7 @@ import {
|
|||||||
addConnection,
|
addConnection,
|
||||||
connectServers,
|
connectServers,
|
||||||
forgetConnection,
|
forgetConnection,
|
||||||
getStats,
|
getWebSocketStats,
|
||||||
processMessage,
|
processMessage,
|
||||||
} from "./websocket-handler";
|
} from "./websocket-handler";
|
||||||
import { writeInfo, writeStat, writeSuccess } from "./utility";
|
import { writeInfo, writeStat, writeSuccess } from "./utility";
|
||||||
@@ -41,15 +41,15 @@ async function main() {
|
|||||||
case "/":
|
case "/":
|
||||||
return createFileResponse(defaultPage);
|
return createFileResponse(defaultPage);
|
||||||
case "/stats":
|
case "/stats":
|
||||||
return new Response(JSON.stringify(getStats()));
|
return new Response(JSON.stringify(getAllStats()));
|
||||||
default:
|
default:
|
||||||
return createFileResponse(requestPath);
|
return createFileResponse(requestPath);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
websocket: {
|
websocket: {
|
||||||
open() {
|
open(ws) {
|
||||||
addConnection();
|
addConnection(ws);
|
||||||
},
|
},
|
||||||
message(ws, message) {
|
message(ws, message) {
|
||||||
processMessage(ws, message.toString(), config);
|
processMessage(ws, message.toString(), config);
|
||||||
@@ -68,6 +68,18 @@ async function main() {
|
|||||||
// OTHER SERVERS
|
// OTHER SERVERS
|
||||||
connectServers(config);
|
connectServers(config);
|
||||||
|
|
||||||
|
// AUDIT
|
||||||
|
function getServerStats(): [string, string][] {
|
||||||
|
return [
|
||||||
|
["server url", server.url.toString()],
|
||||||
|
["server ip address", IP.address()],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAllStats(): [string, string | number][] {
|
||||||
|
return [...getServerStats(), ...getWebSocketStats()];
|
||||||
|
}
|
||||||
|
|
||||||
// CLI
|
// CLI
|
||||||
writeSuccess(`###\nstarted up ${new Date().toLocaleString()}`);
|
writeSuccess(`###\nstarted up ${new Date().toLocaleString()}`);
|
||||||
console.log("relevant output available in the 'logs' file");
|
console.log("relevant output available in the 'logs' file");
|
||||||
@@ -80,11 +92,9 @@ async function main() {
|
|||||||
console.log(new Date().toLocaleString());
|
console.log(new Date().toLocaleString());
|
||||||
console.log();
|
console.log();
|
||||||
|
|
||||||
writeInfo("server url", Colors.bold.green(server.url.toString()));
|
getServerStats().forEach((entry) => writeInfo(...entry));
|
||||||
writeInfo("server ip address", Colors.bold.green(IP.address()));
|
|
||||||
console.log();
|
console.log();
|
||||||
|
getWebSocketStats().forEach((entry) => writeStat(...entry));
|
||||||
getStats().forEach((entry) => writeStat(...entry));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setInterval(updateCLI, 5000);
|
setInterval(updateCLI, 5000);
|
||||||
|
|||||||
+18
-16
@@ -30,13 +30,17 @@ export interface WebSocketMessage {
|
|||||||
// TRACKING
|
// TRACKING
|
||||||
const knownMessageIds = new Set<string>();
|
const knownMessageIds = new Set<string>();
|
||||||
|
|
||||||
export let connectedClientCount = 0;
|
|
||||||
export let disconnectedServerCount = 0;
|
|
||||||
export const subscriptions = new SubscriptionMap();
|
export const subscriptions = new SubscriptionMap();
|
||||||
export const connectedServers = new Set<WebSocket>();
|
export const clientsConnected = new Set<WS>();
|
||||||
|
export const serversConnectedAsClient = new Set<WS>();
|
||||||
|
export const serversConnected = new Set<WebSocket>();
|
||||||
|
|
||||||
export function addConnection() {
|
export function getServerCount() {
|
||||||
connectedClientCount++;
|
return serversConnected.size + serversConnectedAsClient.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function addConnection(ws: WS) {
|
||||||
|
clientsConnected.add(ws);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function trackSubscription(ws: WS, channel: string): void {
|
export function trackSubscription(ws: WS, channel: string): void {
|
||||||
@@ -50,7 +54,7 @@ export function removeSubscription(ws: WS, channel: string): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function forgetConnection(ws: WS): void {
|
export function forgetConnection(ws: WS): void {
|
||||||
connectedClientCount--;
|
clientsConnected.delete(ws);
|
||||||
const channels = subscriptions.getChannelList(ws);
|
const channels = subscriptions.getChannelList(ws);
|
||||||
channels?.forEach((channel) => {
|
channels?.forEach((channel) => {
|
||||||
subscriptions.delete(ws, channel);
|
subscriptions.delete(ws, channel);
|
||||||
@@ -60,7 +64,7 @@ export function forgetConnection(ws: WS): void {
|
|||||||
// OTHER SERVERS
|
// OTHER SERVERS
|
||||||
export function connectServers(config: typeof defaultConfig): void {
|
export function connectServers(config: typeof defaultConfig): void {
|
||||||
config.connectedServers.forEach((serverAddress) => {
|
config.connectedServers.forEach((serverAddress) => {
|
||||||
const ws = connectServer(serverAddress, config);
|
connectServer(serverAddress, config);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,7 +74,7 @@ export function connectServer(
|
|||||||
): void {
|
): void {
|
||||||
try {
|
try {
|
||||||
const ws = new WebSocket(address);
|
const ws = new WebSocket(address);
|
||||||
connectedServers.add(ws);
|
serversConnected.add(ws);
|
||||||
|
|
||||||
ws.addEventListener("open", () => {
|
ws.addEventListener("open", () => {
|
||||||
writeSuccess(`connected to server at "${address}".`);
|
writeSuccess(`connected to server at "${address}".`);
|
||||||
@@ -84,12 +88,10 @@ export function connectServer(
|
|||||||
});
|
});
|
||||||
|
|
||||||
ws.addEventListener("close", () => {
|
ws.addEventListener("close", () => {
|
||||||
connectedServers.delete(ws);
|
serversConnected.delete(ws);
|
||||||
disconnectedServerCount++;
|
|
||||||
writeError(`server at "${address}" disconnected`);
|
writeError(`server at "${address}" disconnected`);
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
disconnectedServerCount++;
|
|
||||||
writeError(`failed to connect to server at "${address}": ${error}`);
|
writeError(`failed to connect to server at "${address}": ${error}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -109,13 +111,11 @@ export function subscribeChannel(server: WS, channel: string): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AUDIT
|
// AUDIT
|
||||||
export function getStats(): [string, number][] {
|
export function getWebSocketStats(): [string, number][] {
|
||||||
return [
|
return [
|
||||||
["channels", subscriptions.clientsPerChannel.size],
|
["channels", subscriptions.clientsPerChannel.size],
|
||||||
["clients connected", connectedClientCount],
|
["clients connected", clientsConnected.size],
|
||||||
["clients subscribing", subscriptions.channelsPerClient.size],
|
["servers connected", getServerCount()],
|
||||||
["servers connected", connectedServers.size],
|
|
||||||
["servers disconnected", disconnectedServerCount],
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,6 +147,8 @@ export function processMessage(
|
|||||||
sendMessage(messageChannel, messageObject.messageBody, messageObject.uuid!);
|
sendMessage(messageChannel, messageObject.messageBody, messageObject.uuid!);
|
||||||
});
|
});
|
||||||
if (messageObject.requestingServerConnection == true) {
|
if (messageObject.requestingServerConnection == true) {
|
||||||
|
clientsConnected.delete(ws);
|
||||||
|
serversConnectedAsClient.add(ws);
|
||||||
subscribeChannels(ws, config);
|
subscribeChannels(ws, config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user