UNPKG

@datastax/astra-db-ts

Version:
224 lines (223 loc) 7.71 kB
"use strict"; // Copyright Datastax, Inc // SPDX-License-Identifier: Apache-2.0 // noinspection DuplicatedCode Object.defineProperty(exports, "__esModule", { value: true }); exports.InternalLogger = void 0; const tslib_1 = require("tslib"); const constants_js_1 = require("../../lib/logging/constants.js"); const util_js_1 = require("../../lib/logging/util.js"); const index_js_1 = require("../../lib/index.js"); const cfg_handler_js_1 = require("../../lib/logging/cfg-handler.js"); const uuid = tslib_1.__importStar(require("uuid")); class InternalLogger { constructor(config, parent, console) { Object.defineProperty(this, "commandStarted", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "commandFailed", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "commandWarnings", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "commandSucceeded", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "adminCommandFailed", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "adminCommandStarted", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "adminCommandPolling", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "adminCommandWarnings", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "adminCommandSucceeded", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "_someCommandEventEnabled", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "_someAdminCommandEventEnabled", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "_config", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "_listeners", { enumerable: true, configurable: true, writable: true, value: Object.create(null) }); Object.defineProperty(this, "_parent", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "_console", { enumerable: true, configurable: true, writable: true, value: void 0 }); this._parent = parent; this._console = console; this._config = this._buildInternalConfig(config); } generateCommandRequestId() { return this._someCommandEventEnabled ? uuid.v4() : ''; } generateAdminCommandRequestId() { return this._someAdminCommandEventEnabled ? uuid.v4() : ''; } updateLoggingConfig(config) { this._config = this._updateInternalConfig(this._config, config); } on(eventName, listener) { if (!this._listeners[eventName]) { this._listeners[eventName] = []; } this._listeners[eventName].push(listener); } off(eventName, listener) { if (!this._listeners[eventName]) { return; } const index = this._listeners[eventName].indexOf(listener); if (index !== -1) { this._listeners[eventName].splice(index, 1); } if (this._listeners[eventName].length === 0) { delete this._listeners[eventName]; } } removeAllListeners(eventName) { if (eventName) { delete this._listeners[eventName]; } else { for (const key in this._listeners) { delete this._listeners[key]; } } } emit(eventName, event) { if (this._listeners[eventName]) { for (const listener of this._listeners[eventName]) { try { listener(event); } catch (_e) { // Silently ignore errors } if (event._propagationState === index_js_1.PropagationState.StopImmediate) { return; } } } if (this._parent && event._propagationState !== index_js_1.PropagationState.Stop) { this._parent.emit(eventName, event); } } _buildInternalConfig(config) { return this._updateInternalConfig(constants_js_1.EmptyInternalLoggingConfig, config); } _updateInternalConfig(base, config) { const newConfig = { ...base }; for (const layer of config.layers) { for (const event of layer.events) { newConfig[event] = (0, util_js_1.buildOutputsMap)(layer.emits); const activeOutputs = constants_js_1.PrintLoggingOutputs.filter(key => newConfig[event]?.[key]); if (activeOutputs.length > 1) { throw new Error(`Nonsensical logging configuration; conflicting outputs '${activeOutputs}' set for '${event}'`); } } } this._buildLoggingFunctions(newConfig); return newConfig; } _buildLoggingFunctions(config) { this._someCommandEventEnabled = false; this._someAdminCommandEventEnabled = false; for (const [_eventName, outputs] of Object.entries(config)) { const eventName = _eventName; if (!outputs) { this[eventName] = undefined; continue; } const log = this._mkLogFn(outputs); if (eventName.startsWith('admin')) { this._someAdminCommandEventEnabled = true; } else { this._someCommandEventEnabled = true; } this[eventName] = (...args) => { const event = new constants_js_1.EventConstructors[eventName](...args); outputs.event && this.emit(eventName, event); log?.(event); }; } } _mkLogFn(outputs) { switch (true) { case outputs.stdout: return (event) => this._console.log(event.format()); case outputs.stderr: return (event) => this._console.error(event.format()); case outputs['stdout:verbose']: return (event) => this._console.log(event.formatVerbose()); case outputs['stderr:verbose']: return (event) => this._console.error(event.formatVerbose()); } } } exports.InternalLogger = InternalLogger; Object.defineProperty(InternalLogger, "cfg", { enumerable: true, configurable: true, writable: true, value: cfg_handler_js_1.LoggingCfgHandler });