UNPKG

redis-smq

Version:

A high-performance, reliable, and scalable message queue for Node.js.

87 lines 5.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QueueStateManager = void 0; const redis_smq_common_1 = require("redis-smq-common"); const index_js_1 = require("../queue-manager/index.js"); const configuration_js_1 = require("../config-manager/configuration.js"); const with_shared_pool_connection_js_1 = require("../common/redis/redis-connection-pool/with-shared-pool-connection.js"); const _parse_queue_params_and_validate_js_1 = require("../queue-manager/_/_parse-queue-params-and-validate.js"); const redis_keys_js_1 = require("../common/redis/redis-keys/redis-keys.js"); const index_js_2 = require("./types/index.js"); const _get_queue_state_js_1 = require("./_/_get-queue-state.js"); const _transit_queue_to_js_1 = require("./_/_transit-queue-to.js"); class QueueStateManager { constructor() { const config = configuration_js_1.Configuration.getConfig(); this.logger = (0, redis_smq_common_1.createLogger)(config.logger, this.constructor.name); } getState(queue, cb) { return redis_smq_common_1.async.withOptionalCallback(cb, (callback) => { const queueDesc = typeof queue === 'string' ? queue : `${queue.name}@${queue.ns}`; this.logger.debug(`Getting operational state for queue: ${queueDesc}`); (0, with_shared_pool_connection_js_1.withSharedPoolConnection)((client, done) => { (0, _parse_queue_params_and_validate_js_1._parseQueueParamsAndValidate)(client, queue, (err, queueParams) => { if (err) return done(err); if (!queueParams) return done(new redis_smq_common_1.CallbackEmptyReplyError()); (0, _get_queue_state_js_1._getQueueState)(client, queueParams, (err, stateTransition) => { if (err) { this.logger.error(`Error getting state for ${queueDesc}: ${err.message}`, err); return done(err); } if (!stateTransition) return done(new redis_smq_common_1.CallbackEmptyReplyError()); this.logger.debug(`Queue ${queueDesc} state: ${index_js_1.EQueueOperationalState[stateTransition.to]}`); done(null, stateTransition); }); }); }, callback); }); } pause(queue, options, cb) { return redis_smq_common_1.async.withOptionalCallback(cb, (callback) => { const queueDesc = typeof queue === 'string' ? queue : `${queue.name}@${queue.ns}`; this.logger.debug(`Pausing queue: ${queueDesc}`); (0, _transit_queue_to_js_1._transitQueueTo)(queue, index_js_1.EQueueOperationalState.PAUSED, Object.assign(Object.assign({}, options), { reason: (options === null || options === void 0 ? void 0 : options.reason) || index_js_2.EStateTransitionReason.MANUAL, description: (options === null || options === void 0 ? void 0 : options.description) || 'Manual pause' }), this.logger, callback); }); } resume(queue, options, cb) { return redis_smq_common_1.async.withOptionalCallback(cb, (callback) => { const queueDesc = typeof queue === 'string' ? queue : `${queue.name}@${queue.ns}`; this.logger.debug(`Resuming queue: ${queueDesc}`); (0, _transit_queue_to_js_1._transitQueueTo)(queue, index_js_1.EQueueOperationalState.ACTIVE, Object.assign(Object.assign({}, options), { reason: (options === null || options === void 0 ? void 0 : options.reason) || index_js_2.EStateTransitionReason.MANUAL, description: (options === null || options === void 0 ? void 0 : options.description) || 'Manual resume' }), this.logger, callback); }); } stop(queue, options, cb) { return redis_smq_common_1.async.withOptionalCallback(cb, (callback) => { const queueDesc = typeof queue === 'string' ? queue : `${queue.name}@${queue.ns}`; this.logger.debug(`Stopping queue: ${queueDesc}`); (0, _transit_queue_to_js_1._transitQueueTo)(queue, index_js_1.EQueueOperationalState.STOPPED, Object.assign(Object.assign({}, options), { reason: (options === null || options === void 0 ? void 0 : options.reason) || index_js_2.EStateTransitionReason.MANUAL, description: (options === null || options === void 0 ? void 0 : options.description) || 'Manual stop' }), this.logger, callback); }); } getStateHistory(queue, cb) { return redis_smq_common_1.async.withOptionalCallback(cb, (callback) => { const queueDesc = typeof queue === 'string' ? queue : `${queue.name}@${queue.ns}`; this.logger.debug(`Getting state history for queue: ${queueDesc}`); (0, with_shared_pool_connection_js_1.withSharedPoolConnection)((client, done) => { (0, _parse_queue_params_and_validate_js_1._parseQueueParamsAndValidate)(client, queue, (err, queueParams) => { if (err) return done(err); if (!queueParams) return done(new redis_smq_common_1.CallbackEmptyReplyError()); const { keyQueueStateHistory } = redis_keys_js_1.redisKeys.getQueueKeys(queueParams.ns, queueParams.name, null); client.lrange(keyQueueStateHistory, 0, -1, (err, reply) => { if (err) return done(err); const history = (reply || []).map((item) => JSON.parse(item)); this.logger.debug(`Retrieved ${history.length} state transitions for ${queueDesc}`); done(null, history); }); }); }, callback); }); } } exports.QueueStateManager = QueueStateManager; //# sourceMappingURL=queue-state-manager.js.map