Binato/Binato.ts

72 lines
2.4 KiB
TypeScript
Raw Normal View History

2022-11-19 01:06:03 +00:00
console.clear();
import { ConsoleHelper } from "./ConsoleHelper";
import { readFileSync, existsSync } from "fs";
if (!existsSync("./config.json")) {
ConsoleHelper.printError("You must have a config file in the root of Binato's folder structure.");
ConsoleHelper.printError("Check the GitHub for an example file");
process.exit(1);
}
2022-11-16 15:25:46 +00:00
import { ChatHistory } from "./server/ChatHistory";
2022-11-16 11:59:23 +00:00
import compression from "compression";
import express from "express";
2022-11-23 00:48:28 +00:00
import { HandleRequest, GetSharedContent } from "./server/BanchoServer";
import { SharedContent } from "./server/interfaces/SharedContent";
2022-11-16 11:59:23 +00:00
import { Registry, collectDefaultMetrics } from "prom-client";
2022-11-17 00:29:07 +00:00
const config:any = JSON.parse(readFileSync(__dirname + "/config.json").toString());
// Pull out shared data from BanchoServer
const sharedContent:SharedContent = GetSharedContent();
2022-11-16 11:59:23 +00:00
2022-11-16 15:25:46 +00:00
const binatoApp:express.Application = express();
2022-11-16 11:59:23 +00:00
if (config["prometheus"]["enabled"]) {
const register:Registry = new Registry();
register.setDefaultLabels({ app: "nodejs_binato" });
collectDefaultMetrics({ register });
2022-11-16 15:25:46 +00:00
const prometheusApp:express.Application = express();
2022-11-16 11:59:23 +00:00
prometheusApp.get("/metrics", async (req, res) => {
res.end(await register.metrics());
});
2022-11-19 01:06:03 +00:00
prometheusApp.listen(config["prometheus"]["port"], () => ConsoleHelper.printInfo(`Prometheus metrics listening at port ${config["prometheus"]["port"]}`));
2022-11-16 11:59:23 +00:00
} else {
ConsoleHelper.printWarn("Prometheus is disabled!");
}
if (config["express"]["compression"]) {
binatoApp.use(compression());
2022-11-19 01:06:03 +00:00
ConsoleHelper.printInfo("Compression is enabled");
2022-11-16 11:59:23 +00:00
} else {
ConsoleHelper.printWarn("Compression is disabled");
}
2022-11-16 15:25:46 +00:00
const INDEX_PAGE:string = readFileSync("./web/serverPage.html").toString();
2022-11-16 11:59:23 +00:00
binatoApp.use((req, res) => {
let packet:Buffer = Buffer.alloc(0);
req.on("data", (chunk:Buffer) => packet = Buffer.concat([packet, chunk], packet.length + chunk.length));
req.on("end", () => {
switch (req.method) {
case "GET":
if (req.url == "/" || req.url == "/index.html" || req.url == "/index") {
2022-11-16 15:25:46 +00:00
res.send(INDEX_PAGE);
2022-11-16 11:59:23 +00:00
} else if (req.url == "/chat") {
2022-11-16 15:25:46 +00:00
res.send(ChatHistory.GenerateForWeb());
2022-11-16 11:59:23 +00:00
}
break;
case "POST":
2022-11-17 00:29:07 +00:00
HandleRequest(req, res, packet);
2022-11-16 11:59:23 +00:00
break;
default:
res.status(405).send("405 | Method not allowed!<hr>Binato");
break;
}
});
2022-11-17 00:29:07 +00:00
});
2022-11-19 01:06:03 +00:00
binatoApp.listen(config.express.port, () => ConsoleHelper.printInfo(`Binato is up! Listening at port ${config.express.port}`));