mirror of
https://github.com/Sithranduil/srcds_exporter.git
synced 2025-07-22 14:28:27 +02:00
60 lines
1.9 KiB
JavaScript
60 lines
1.9 KiB
JavaScript
import express from 'express';
|
|
import module from './modules/index.js';
|
|
import SourceRcon from '@hellz.fr/sourcecon';
|
|
|
|
const app = express();
|
|
|
|
app.get('/', (req, res) => {
|
|
res.send('use /metrics?ip=<srcds ip>&port=<srcds port>&rconPassword=<rcon password>&game=<game>&sm=<boolean>&meta=<boolean>sp=<boolean> to get data');
|
|
});
|
|
|
|
app.get('/metrics', async (req, res) => {
|
|
const config = {
|
|
ip: req.query.ip,
|
|
port: req.query.port,
|
|
game: req.query.game,
|
|
rconPassword: req.query.rconPassword,
|
|
};
|
|
config.metamod = req.query.metamod === 'true' || false;
|
|
config.sourcemod = req.query.sourcemod === 'true' || false;
|
|
config.sourcepython = req.query.sourcepython === 'true' || false;
|
|
config.tags = req.query.tags || [];
|
|
|
|
if (
|
|
config.ip == null
|
|
|| config.port == null
|
|
|| config.rconPassword == null
|
|
|| config.game == null
|
|
) {
|
|
res.send('Missing parameter');
|
|
return;
|
|
}
|
|
|
|
if (!['csgo', 'cstrike', 'gmod', 'cs2'].includes(config.game)) {
|
|
res.send('Incorrect game value, currently supported games are : csgo, gmod, cstrike');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const client = new SourceRcon.default(config.ip, Number.parseInt(config.port));
|
|
console.log(`[${config.game} ${config.ip}:${config.port}] connecting`);
|
|
await client.connect();
|
|
console.log(`[${config.game} ${config.ip}:${config.port}] connected`);
|
|
await client.auth(config.rconPassword);
|
|
console.log(`[${config.game} ${config.ip}:${config.port}] auth`);
|
|
const response = await module.request(config, client);
|
|
console.log(`[${config.game} ${config.ip}:${config.port}] request`);
|
|
await module.send(config, response, res);
|
|
console.log(`[${config.game} ${config.ip}:${config.port}] send`);
|
|
} catch (e) {
|
|
if (e.code === 'EHOSTUNREACH') {
|
|
console.error(`Unreachable host : ${e.address}:${e.port}`);
|
|
} else {
|
|
console.error(e);
|
|
}
|
|
await module.send(config, null, res, true);
|
|
}
|
|
});
|
|
|
|
app.listen(9591);
|