realm-object-server
Version:
85 lines • 4.24 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const express = require("express");
const promClient = require("prom-client");
const Logger_1 = require("../shared/Logger");
const ProcessUtil_1 = require("../shared/ProcessUtil");
class KubernetesServer {
constructor(config = {}) {
this.ready = false;
const logLevel = process.env.LOG_LEVEL || "debug";
this.logger = new Logger_1.ConsoleLogger(logLevel);
this.registry = promClient.register;
this.registry.setDefaultLabels(config.labels || {});
promClient.collectDefaultMetrics({ register: this.registry });
}
start() {
return __awaiter(this, void 0, void 0, function* () {
const handler = (signal) => {
let shutdownPromise;
return () => __awaiter(this, void 0, void 0, function* () {
if (!shutdownPromise) {
this.logger.info(`Caught ${signal} signal. Shutting down.`);
shutdownPromise = this.shutdown().catch((err) => {
this.logger.fatal(`Error stopping server: ${err.message}`);
ProcessUtil_1.ProcessUtil.terminate({ success: false });
}).then(() => {
this.logger.info("Exiting gracefully.");
ProcessUtil_1.ProcessUtil.terminate({ success: true });
});
}
});
};
process.on("SIGINT", handler("INT"));
process.on("SIGTERM", handler("TERM"));
this.unhandledRejectionCallback = (reason, promise) => {
this.logger.fatal(`Detected an unhandled promise rejection at: ${promise} reason: ${reason.stack}`);
this.logger.fatal("Exiting...");
ProcessUtil_1.ProcessUtil.terminate({ success: false });
};
process.on("unhandledRejection", this.unhandledRejectionCallback);
const logMessagesCounter = new promClient.Counter({
name: "ros_log_messages_total",
help: "Realm Object Server log message counts",
labelNames: ["level"],
registers: [this.registry],
});
this.logger.on("message", (level, message) => logMessagesCounter.inc({ level }));
const internalExpress = express();
internalExpress.get("/healthz", (req, res) => res.sendStatus(200));
internalExpress.get("/readz", (req, res) => res.sendStatus(this.ready ? 200 : 503));
internalExpress.get("/metrics", (req, res) => res.send(this.getMetrics()));
this.internalServer = yield new Promise((resolve) => {
const port = Number(process.env.INTERNAL_PORT || 9081);
const listener = internalExpress.listen(port, "0.0.0.0", () => {
resolve(listener);
});
});
});
}
shutdown() {
return __awaiter(this, void 0, void 0, function* () {
if (this.internalServer) {
this.internalServer.close();
delete this.internalServer;
}
if (this.unhandledRejectionCallback) {
process.removeListener("unhandledRejection", this.unhandledRejectionCallback);
delete this.unhandledRejectionCallback;
}
});
}
getMetrics() {
return this.registry.metrics();
}
}
exports.KubernetesServer = KubernetesServer;
//# sourceMappingURL=KubernetesServer.js.map