redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
87 lines • 5.94 kB
JavaScript
;
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