Move Prometheus metrics
This commit is contained in:
parent
86d79f3cd3
commit
113f790888
2 changed files with 41 additions and 66 deletions
|
@ -5,9 +5,13 @@ import winston from "winston";
|
||||||
// load config from .env file
|
// load config from .env file
|
||||||
import { resolve, dirname } from "path";
|
import { resolve, dirname } from "path";
|
||||||
import { fileURLToPath } from "url";
|
import { fileURLToPath } from "url";
|
||||||
|
import { readFileSync } from "fs";
|
||||||
|
import { createServer } from "http";
|
||||||
import { config } from "dotenv";
|
import { config } from "dotenv";
|
||||||
config({ path: resolve(dirname(fileURLToPath(import.meta.url)), "../../.env") });
|
config({ path: resolve(dirname(fileURLToPath(import.meta.url)), "../../.env") });
|
||||||
|
|
||||||
|
import database from "../database.js";
|
||||||
|
|
||||||
const dbl = process.env.NODE_ENV === "production" && process.env.DBL ? new Api(process.env.DBL) : null;
|
const dbl = process.env.NODE_ENV === "production" && process.env.DBL ? new Api(process.env.DBL) : null;
|
||||||
|
|
||||||
const logger = winston.createLogger({
|
const logger = winston.createLogger({
|
||||||
|
@ -117,6 +121,43 @@ async function dblPost() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (process.env.METRICS && process.env.METRICS !== "") {
|
||||||
|
const servers = [];
|
||||||
|
if (process.env.API_TYPE === "ws") {
|
||||||
|
const imageHosts = JSON.parse(readFileSync(new URL("../../config/servers.json", import.meta.url), { encoding: "utf8" })).image;
|
||||||
|
for (let { server } of imageHosts) {
|
||||||
|
if (!server.includes(":")) {
|
||||||
|
server += ":3762";
|
||||||
|
}
|
||||||
|
servers.push(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const httpServer = createServer(async (req, res) => {
|
||||||
|
if (req.method !== "GET") {
|
||||||
|
res.statusCode = 405;
|
||||||
|
return res.end("GET only");
|
||||||
|
}
|
||||||
|
res.write(`# HELP esmbot_command_count Number of times a command has been run
|
||||||
|
# TYPE esmbot_command_count counter
|
||||||
|
# HELP esmbot_server_count Number of servers/guilds the bot is in
|
||||||
|
# TYPE esmbot_server_count gauge
|
||||||
|
# HELP esmbot_shard_count Number of shards the bot has
|
||||||
|
# TYPE esmbot_shard_count gauge
|
||||||
|
`);
|
||||||
|
const counts = await database.getCounts();
|
||||||
|
for (const [i, w] of Object.entries(counts)) {
|
||||||
|
res.write(`esmbot_command_count{command="${i}"} ${w}\n`);
|
||||||
|
}
|
||||||
|
|
||||||
|
res.write(`esmbot_server_count ${serverCount}\n`);
|
||||||
|
res.write(`esmbot_shard_count ${shardCount}\n`);
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
httpServer.listen(process.env.METRICS, () => {
|
||||||
|
logger.log("info", `Serving metrics at ${process.env.METRICS}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
setInterval(updateStats, 300000);
|
setInterval(updateStats, 300000);
|
||||||
if (dbl) setInterval(dblPost, 1800000);
|
if (dbl) setInterval(dblPost, 1800000);
|
||||||
|
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
import { BaseServiceWorker } from "eris-fleet";
|
|
||||||
import { createServer } from "http";
|
|
||||||
import { log } from "../logger.js";
|
|
||||||
import database from "../database.js";
|
|
||||||
|
|
||||||
class PrometheusWorker extends BaseServiceWorker {
|
|
||||||
constructor(setup) {
|
|
||||||
super(setup);
|
|
||||||
|
|
||||||
console.info = (str) => this.ipc.sendToAdmiral("info", str);
|
|
||||||
|
|
||||||
if (process.env.METRICS && process.env.METRICS !== "") {
|
|
||||||
this.httpServer = createServer(async (req, res) => {
|
|
||||||
if (req.method !== "GET") {
|
|
||||||
res.statusCode = 405;
|
|
||||||
return res.end("GET only");
|
|
||||||
}
|
|
||||||
res.write(`# HELP esmbot_command_count Number of times a command has been run
|
|
||||||
# TYPE esmbot_command_count counter
|
|
||||||
# HELP esmbot_server_count Number of servers/guilds the bot is in
|
|
||||||
# TYPE esmbot_server_count gauge
|
|
||||||
# HELP esmbot_shard_count Number of shards the bot has
|
|
||||||
# TYPE esmbot_shard_count gauge
|
|
||||||
`);
|
|
||||||
if (process.env.API_TYPE === "ws") {
|
|
||||||
const servers = await this.ipc.serviceCommand("image", { type: "stats" }, true);
|
|
||||||
res.write(`# HELP esmbot_connected_workers Number of workers connected
|
|
||||||
# TYPE esmbot_connected_workers gauge
|
|
||||||
esmbot_connected_workers ${servers.length}
|
|
||||||
# HELP esmbot_running_jobs Number of running jobs on this worker
|
|
||||||
# TYPE esmbot_running_jobs gauge
|
|
||||||
# HELP esmbot_queued_jobs Number of queued jobs on this worker
|
|
||||||
# TYPE esmbot_queued_jobs gauge
|
|
||||||
# HELP esmbot_max_jobs Number of max allowed jobs on this worker
|
|
||||||
# TYPE esmbot_max_jobs gauge
|
|
||||||
`);
|
|
||||||
for (const [i, w] of servers.entries()) {
|
|
||||||
res.write(`esmbot_running_jobs{worker="${i}"} ${w.runningJobs}\n`);
|
|
||||||
res.write(`esmbot_max_jobs{worker="${i}"} ${w.max}\n`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const counts = await database.getCounts();
|
|
||||||
for (const [i, w] of Object.entries(counts)) {
|
|
||||||
res.write(`esmbot_command_count{command="${i}"} ${w}\n`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const stats = await this.ipc.getStats();
|
|
||||||
res.write(`esmbot_server_count ${stats.guilds}\n`);
|
|
||||||
res.write(`esmbot_shard_count ${stats.shardCount}\n`);
|
|
||||||
res.end();
|
|
||||||
});
|
|
||||||
this.httpServer.listen(process.env.METRICS, () => {
|
|
||||||
log("info", `Serving metrics at ${process.env.METRICS}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
this.serviceReady();
|
|
||||||
}
|
|
||||||
|
|
||||||
shutdown(done) {
|
|
||||||
if (this.httpServer) this.httpServer.close();
|
|
||||||
done();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default PrometheusWorker;
|
|
Loading…
Reference in a new issue