UNPKG

@cocalc/database

Version:

CoCalc: code for working with our PostgreSQL database

60 lines 2.04 kB
"use strict"; /* * 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