diff --git a/.env b/.env index a303baa..3b1bb1a 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ SERVER_LOCATION=a1 -SERVER_NAME=s6 +SERVER_NAME=s7 SERVER_TYPE=prod PORT=3000 MONGO_URI=mongodb://root:p62Z!ZatgY25@194.26.138.94:27017 \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 02ba372..5f8f6e4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -79,6 +79,8 @@ async function updateSessionServerData(data: Record) { } const execAsync = util.promisify(exec); +const NETWORK_LOG_INTERVAL = 10; // log network devices every N polls +let networkPollCount = 0; async function getSystemStats() { try { @@ -119,6 +121,37 @@ async function getSystemStats() { // GPU unavailable, CPU/RAM still updated } + // Network (systeminformation) + try { + const networkStats = await si.networkStats("*"); + const totalRxSec = networkStats.reduce( + (sum, iface) => sum + (iface.rx_sec ?? 0), + 0 + ); + const totalTxSec = networkStats.reduce( + (sum, iface) => sum + (iface.tx_sec ?? 0), + 0 + ); + + data.networkDownloadSpeed = + Math.round(((totalRxSec * 8) / 1_000_000) * 100) / 100; + data.networkUploadSpeed = + Math.round(((totalTxSec * 8) / 1_000_000) * 100) / 100; + + networkPollCount++; + if (networkPollCount % NETWORK_LOG_INTERVAL === 0) { + const ifaceInfo = networkStats + .map( + (n) => + `${n.iface} (${(((n.rx_sec ?? 0) * 8) / 1_000_000).toFixed(2)} ↓ / ${(((n.tx_sec ?? 0) * 8) / 1_000_000).toFixed(2)} ↑ Mbps)` + ) + .join("; "); + console.log("Network stats from:", ifaceInfo || "no interfaces"); + } + } catch { + // networkStats unavailable + } + await updateSessionServerData(data); } catch (error) { if (error instanceof Error) { diff --git a/src/models/SessionServer.ts b/src/models/SessionServer.ts index f207b7c..18698ad 100644 --- a/src/models/SessionServer.ts +++ b/src/models/SessionServer.ts @@ -36,6 +36,12 @@ const sessionServerSchema = new Schema( localIP: { type: String, }, + networkDownloadSpeed: { + type: Number, + }, + networkUploadSpeed: { + type: Number, + }, }, { timestamps: true,