41 lines
931 B
TypeScript
41 lines
931 B
TypeScript
import http from "http";
|
|
import url from "url";
|
|
import { HealthController } from "./HealthController";
|
|
import log from "../../log";
|
|
|
|
export class WebServer {
|
|
private server: http.Server;
|
|
private port: number;
|
|
|
|
constructor(port: number, healthController: HealthController) {
|
|
this.port = port;
|
|
this.server = http.createServer(async (req, res) => {
|
|
const route = url.parse(req.url ?? "").pathname;
|
|
|
|
if (route === "/metrics") {
|
|
// Return all metrics the Prometheus exposition format
|
|
res.setHeader("Content-Type", "text/plain");
|
|
res.end(await healthController.metrics());
|
|
}
|
|
|
|
if (route === "/health") {
|
|
res.end("OK");
|
|
}
|
|
|
|
res.statusCode = 404;
|
|
res.end();
|
|
});
|
|
this.start();
|
|
}
|
|
|
|
start() {
|
|
this.server.listen(this.port, () => {
|
|
log.info(`Server started on port ${this.port}`);
|
|
});
|
|
}
|
|
|
|
stop() {
|
|
this.server.close();
|
|
}
|
|
}
|