@cocalc/database
Version:
CoCalc: code for working with our PostgreSQL database
60 lines • 2.04 kB
JavaScript
;
/*
* This file is part of CoCalc: Copyright © 2022 Sagemath, Inc.
* License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.howLongDisconnectedMins = exports.setupRecordConnectErrors = void 0;
const logger_1 = __importDefault(require("@cocalc/backend/logger"));
const metrics_1 = require("../metrics");
function getStatusGauge() {
return (0, metrics_1.newGauge)("db_latest_connection_ts_total", "Last time the connect/disconnect event was emitted", ["status"]);
}
const L = (0, logger_1.default)("db:record-connect-error");
// timestamp when the *first* disconnect event happend
// a "connect" event will reset this to null
let lastDisconnected = null;
function recordDisconnected() {
L.debug("disconnected");
const now = Date.now();
try {
getStatusGauge().labels("disconnected").set(now);
}
catch (err) {
L.debug("issue with database status gauge", err);
}
if (lastDisconnected == null) {
lastDisconnected = now;
}
}
function recordConnected() {
L.debug("connected");
try {
getStatusGauge().labels("connected").set(Date.now());
}
catch (err) {
L.debug("issue with database status gauge", err);
}
lastDisconnected = null;
}
function setupRecordConnectErrors(db) {
db.on("connect", () => recordConnected());
db.on("disconnect", () => recordDisconnected());
}
exports.setupRecordConnectErrors = setupRecordConnectErrors;
function howLongDisconnectedMins() {
if (lastDisconnected == null) {
return undefined;
}
else {
const last = lastDisconnected;
const now = Date.now();
const dtMin = (now - last) / 1000 / 60;
return dtMin;
}
}
exports.howLongDisconnectedMins = howLongDisconnectedMins;
//# sourceMappingURL=record-connect-error.js.map