thaldrin/src/utils/prometheus.ts

68 lines
2.8 KiB
TypeScript

// //! Code taken from NinoDiscord/Nino
// import prom from "prom-client"
// import { createServer, IncomingMessage, ServerResponse } from 'http'
// import vars from "../../variables"
// import Logger from "./logger"
// export default class Prometheus {
// public commandsExecuted!: prom.Counter<string>
// public messagesSeen!: prom.Counter<string>
// public guildCount!: prom.Gauge<string>
// public totalGuilds!: prom.Gauge<string>
// public uptime!: prom.Gauge<string>
// public events!: prom.Counter<string>
// #server!: ReturnType<typeof createServer>
// load() {
// prom.collectDefaultMetrics()
// this.commandsExecuted = new prom.Counter({
// labelNames: ['command'],
// name: "thaldrin_commands_executed",
// help: "How many commands Thaldrin has executed successfully"
// })
// this.messagesSeen = new prom.Counter({
// name: "thaldrin_messages_seen",
// help: "How many Messages Thaldrin has seen throughout the process lifespan"
// })
// this.guildCount = new prom.Gauge({
// name: "thaldrin_guild_count",
// help: "Number of Guilds Thaldrin joined this Lifecycle"
// })
// this.totalGuilds = new prom.Gauge({
// name: "thaldrin_guilds_total",
// help: "Total Number of Guilds Thaldrin is in"
// })
// this.events = new prom.Counter({
// labelNames: ['event'],
// name: "thaldrin_discord_events",
// help: "Received WebSocket events from Discord"
// })
// this.uptime = new prom.Gauge({
// name: "thaldrin_uptime",
// help: "Thaldrin's Uptime"
// })
// this.#server = createServer(this.onRequest.bind(this));
// this.#server.once('listening', () => Logger.info({ type: 'event:prometheusStart', message: `Prometheus: Listening at http://localhost:${vars.prometheus.port}` }));
// this.#server.on('error', error => console.error(error));
// this.#server.listen(vars.prometheus.port);
// }
// private async onRequest(req: IncomingMessage, res: ServerResponse) {
// this.uptime.set(process.uptime())
// if (req.url! === '/metrics') {
// res.writeHead(200, { 'Content-Type': prom.register.contentType });
// res.write(await prom.register.metrics());
// } else if (req.url! === '/favicon.ico') {
// res.writeHead(404, { 'Content-Type': 'application/json' });
// res.write('{"fuck":"you uwu"}');
// } else {
// res.writeHead(400, { 'Content-Type': 'application/json' });
// res.write('{"uwu":"owo"}');
// }
// res.end();
// }
// }
// export const Prom = new Prometheus()