mirror of
https://github.com/Sithranduil/srcds_exporter.git
synced 2025-07-23 08:28:00 +02:00
feat: add support for source 2
This commit is contained in:
@@ -6,6 +6,8 @@ export default {
|
||||
const stats = await utils.rconCommand(client, 'status');
|
||||
let statusLine = null;
|
||||
let res = null;
|
||||
let tv = null;
|
||||
let regexStatus = null;
|
||||
if (stats) {
|
||||
statusLine = stats.split(/\r?\n/);
|
||||
} else {
|
||||
@@ -17,32 +19,70 @@ export default {
|
||||
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 {
|
||||
if (statusLine[0].search('sourcetv') !== -1) {
|
||||
statusLine.shift();
|
||||
}
|
||||
res = statusLine[0].split(/players : (\d+) humans, (\d+) bots \((\d+) max\)/);
|
||||
}
|
||||
res.pop();
|
||||
res.shift();
|
||||
|
||||
if (game === "csgo") {
|
||||
tv = "gotv";
|
||||
regexStatus = /players : (\d+) humans, (\d+) bots \((\d+)\/0 max\)/;
|
||||
} else {
|
||||
tv = "sourcetv";
|
||||
regexStatus = /players : (\d+) humans, (\d+) bots \((\d+) max\)/;
|
||||
}
|
||||
|
||||
|
||||
if (statusLine[0].search(tv) !== -1) {
|
||||
statusLine.shift();
|
||||
}
|
||||
res = statusLine[0].split(regexStatus);
|
||||
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 requestStatusCs2(client, game) {
|
||||
let stats = await utils.rconCommand(client, 'status_json');
|
||||
stats = JSON.parse(stats)
|
||||
return stats;
|
||||
},
|
||||
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)));
|
||||
},
|
||||
setCs2StatusMetrics(response) {
|
||||
let clients_human = 0;
|
||||
let clients_bot = 0;
|
||||
let cpu = 0;
|
||||
let status = 0;
|
||||
let uptime = 0;
|
||||
let maps = '';
|
||||
if (response) {
|
||||
let { server } = response;
|
||||
uptime = response.process_uptime
|
||||
clients_human = server.clients_human;
|
||||
clients_bot = server.clients_bot;
|
||||
cpu = server.cpu_usage;
|
||||
maps = server.maps;
|
||||
status = 1;
|
||||
}
|
||||
metrics.players.set((Number(clients_human)));
|
||||
metrics.bots.set((Number(clients_bot)));
|
||||
//metrics.maxPlayers.set((Number(maxPlayers)));
|
||||
metrics.status.set((Number(status)));
|
||||
metrics.cpu.set((Number(cpu)));
|
||||
//metrics.netin.set((Number(netin)));
|
||||
//metrics.netout.set((Number(netout)));
|
||||
metrics.uptime.set((Number(uptime)));
|
||||
//metrics.maps.set((Number(maps)));
|
||||
// metrics.fps.set((Number(fps)));
|
||||
// metrics.svms.set((Number(svms)));
|
||||
// metrics.varms.set((Number(varms)));
|
||||
//metrics.svMaxUpdateRate.set((Number(maxUpdateRate)));
|
||||
},
|
||||
async requestStats(client, game) {
|
||||
const stats = await utils.rconCommand(client, 'stats');
|
||||
let statusLine = null;
|
||||
|
@@ -35,10 +35,17 @@ export default {
|
||||
let metamodResponse;
|
||||
let sourcemodResponse;
|
||||
let sourcepythonResponse;
|
||||
let infoResponse;
|
||||
let statsResponse;
|
||||
let statusResponse;
|
||||
|
||||
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.game === 'cs2') {
|
||||
statusResponse = await game.requestStatusCs2(client, config.game);
|
||||
} else {
|
||||
infoResponse = await game.requeseInfo(client, config.game);
|
||||
statsResponse = await game.requestStats(client, config.game);
|
||||
statusResponse = await game.requestStatus(client, config.game);
|
||||
}
|
||||
if (config.metamod) {
|
||||
metamodResponse = await metamod.request(client);
|
||||
}
|
||||
@@ -64,10 +71,12 @@ export default {
|
||||
sourcemod.setMetrics(response ? response.sourcemod : null);
|
||||
sourcepython.setMetrics(response ? response.sourcepython : null);
|
||||
gametracker.setMetrics(response ? response.gametracker : null);
|
||||
game.setStatsMetrics(response ? response.stats : null, config.game);
|
||||
game.setInfoMetrics(response ? response.info : null);
|
||||
game.setStatusMetrics(response ? response.status : null);
|
||||
|
||||
if (config.game !== 'cs2') {
|
||||
game.setStatsMetrics(response ? response.stats : null, config.game);
|
||||
game.setInfoMetrics(response ? response.info : null);
|
||||
} else {
|
||||
game.setCs2StatusMetrics(response ? response.status : null);
|
||||
}
|
||||
registry.setDefaultLabels(
|
||||
config.ip,
|
||||
config.port,
|
||||
@@ -77,7 +86,6 @@ export default {
|
||||
response ? response.sourcemod : null,
|
||||
response ? response.sourcepython : null,
|
||||
);
|
||||
|
||||
registry.sendMetrics(config.game, res);
|
||||
},
|
||||
};
|
||||
|
@@ -4,16 +4,19 @@ import utils from '../utils/utils.js';
|
||||
const csgoRegistry = new prometheus.Registry();
|
||||
const gmodRegistry = new prometheus.Registry();
|
||||
const cstrikeRegistry = new prometheus.Registry();
|
||||
const cs2Registry = new prometheus.Registry();
|
||||
const allGameMetrics = [
|
||||
csgoRegistry,
|
||||
gmodRegistry,
|
||||
cstrikeRegistry,
|
||||
cs2Registry,
|
||||
];
|
||||
|
||||
export default {
|
||||
csgoRegistry,
|
||||
gmodRegistry,
|
||||
cstrikeRegistry,
|
||||
cs2Registry,
|
||||
allGameMetrics,
|
||||
|
||||
setDefaultLabels(ip, port, game, tags, metamodResponse, sourcemodResponse, sourcepythonResponse) {
|
||||
@@ -36,9 +39,11 @@ export default {
|
||||
const version = line.replace('SP version : ', '').trim();
|
||||
defaultLabels.sourcepython = version;
|
||||
}
|
||||
if (game === 'csgo') {
|
||||
csgoRegistry.setDefaultLabels(defaultLabels);
|
||||
} else if (game === 'cstrike') {
|
||||
if (game === 'cs2') {
|
||||
cs2Registry.setDefaultLabels(defaultLabels);
|
||||
} else if (game === 'csgo') {
|
||||
csgoRegistry.setDefaultLabels(defaultLabels);
|
||||
} else if (game === 'cstrike') {
|
||||
cstrikeRegistry.setDefaultLabels(defaultLabels);
|
||||
} else if (game === 'gmod') {
|
||||
gmodRegistry.setDefaultLabels(defaultLabels);
|
||||
@@ -46,9 +51,11 @@ export default {
|
||||
},
|
||||
|
||||
sendMetrics(game, res) {
|
||||
if (game === 'csgo') {
|
||||
res.end(csgoRegistry.metrics());
|
||||
} else if (game === 'cstrike') {
|
||||
if (game === 'cs2') {
|
||||
res.end(cs2Registry.metrics());
|
||||
} else if (game === 'csgo') {
|
||||
res.end(csgoRegistry.metrics());
|
||||
} else if (game === 'cstrike') {
|
||||
res.end(cstrikeRegistry.metrics());
|
||||
} else if (game === 'gmod') {
|
||||
res.end(gmodRegistry.metrics());
|
||||
|
Reference in New Issue
Block a user