From c13e7ee467df0a483aa1b991bc9a4ba00cce1e2a Mon Sep 17 00:00:00 2001 From: Sithranduil Date: Fri, 6 Nov 2020 22:50:16 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20m=C3=A9tric=20src?= =?UTF-8?q?ds=5Fplayers=20et=20ajout=20des=20metrics=20srcds=5Fbots=20et?= =?UTF-8?q?=20srcds=5Fmax=5Fplayers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/game.js | 43 +++++++++++++++++++++++++++++++++++++++---- modules/index.js | 3 +++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/modules/game.js b/modules/game.js index 09897e5..94ae1fa 100644 --- a/modules/game.js +++ b/modules/game.js @@ -2,6 +2,44 @@ import utils from '../utils/utils.js'; import metrics from './metrics.js'; export default { + async requestStatus(client, game) { + const stats = await utils.rconCommand(client, 'status'); + let statusLine = null; + let res = null; + if (stats) { + statusLine = stats.split(/\r?\n/); + } else { + return null; + } + statusLine.shift(); + statusLine.shift(); + statusLine.shift(); + statusLine.shift(); + statusLine.shift(); + statusLine.shift(); + if (game === 'csgo') { + if (statusLine[0].search('gotv') !== -1) { + statusLine.shift(); + } + res = statusLine[0].split(/players : (\d+) humans, (\d+) bots \((\d+)\/0 max\)/); + } else { + res = statusLine[0].split(/players : (\d+) humans, (\d+) bots \((\d+) max\)/); + } + res.pop(); + res.shift(); + return res; + }, + setStatusMetrics(response) { + let players = 0; + let bots = 0; + let maxPlayers = 0; + if (response) { + [players, bots, maxPlayers] = response; + } + metrics.players.set((Number(players))); + metrics.bots.set((Number(bots))); + metrics.maxPlayers.set((Number(maxPlayers))); + }, async requestStats(client, game) { const stats = await utils.rconCommand(client, 'stats'); let statusLine = null; @@ -29,12 +67,11 @@ export default { let uptime = 0; let maps = 0; let fps = 0; - let players = 0; let svms = 0; let varms = 0; if (response) { status = 1; - [cpu, netin, netout, uptime, maps, fps, players, svms, varms] = response; + [cpu, netin, netout, uptime, maps, fps, , svms, varms] = response; } if (game === 'csgo') { metrics.status.set((Number(status))); @@ -44,7 +81,6 @@ export default { metrics.uptime.set((Number(uptime))); metrics.maps.set((Number(maps))); metrics.fps.set((Number(fps))); - metrics.players.set((Number(players))); metrics.svms.set((Number(svms))); metrics.varms.set((Number(varms))); } else { @@ -55,7 +91,6 @@ export default { metrics.uptime.set((Number(uptime))); metrics.maps.set((Number(maps))); metrics.fps.set((Number(fps))); - metrics.players.set((Number(players))); } }, async requeseInfo(client) { diff --git a/modules/index.js b/modules/index.js index 476051a..5452555 100644 --- a/modules/index.js +++ b/modules/index.js @@ -12,6 +12,7 @@ export default { const infoResponse = await game.requeseInfo(client, config.game); const statsResponse = await game.requestStats(client, config.game); + const statusResponse = await game.requestStatus(client, config.game); if (config.metamod) { metamodResponse = await metamod.request(client); } @@ -24,6 +25,7 @@ export default { return { info: infoResponse, stats: statsResponse, + status: statusResponse, metamod: metamodResponse, sourcemod: sourcemodResponse, sourcepython: sourcepythonResponse, @@ -36,6 +38,7 @@ export default { sourcepython.setMetrics(response ? response.sourcepython : null); game.setStatsMetrics(response ? response.stats : null, config.game); game.setInfoMetrics(response ? response.info : null); + game.setStatusMetrics(response ? response.status : null); registry.setDefaultLabels( config.ip,