redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
37 lines • 1.73 kB
JavaScript
import { EQueueOperationalState, EQueueProperty, } from '../../queue-manager/index.js';
import { ESystemStateTransitionReason, } from '../types/index.js';
import { redisKeys } from '../../common/redis/redis-keys/redis-keys.js';
import { _createQueueStateTransition } from './_create-queue-state-transition.js';
import { ERedisScriptName } from '../../common/redis/scripts.js';
import { QueueNotFoundError } from '../../errors/index.js';
export function _getQueueState(client, queueParams, cb) {
const { keyQueueProperties } = redisKeys.getQueueKeys(queueParams.ns, queueParams.name, null);
client.runScript(ERedisScriptName.GET_QUEUE_STATE, [keyQueueProperties], [EQueueProperty.OPERATIONAL_STATE], (err, reply) => {
if (err)
return cb(err);
if (reply === 'QUEUE_NOT_FOUND') {
return cb(new QueueNotFoundError({
metadata: {
queue: queueParams,
},
}));
}
const currentState = reply
? Number(reply)
: EQueueOperationalState.ACTIVE;
const { keyQueueStateHistory } = redisKeys.getQueueKeys(queueParams.ns, queueParams.name, null);
client.lindex(keyQueueStateHistory, 0, (err, latestTransition) => {
if (err)
return cb(err);
let transition;
if (latestTransition) {
transition = JSON.parse(latestTransition);
}
else {
transition = _createQueueStateTransition(EQueueOperationalState.ACTIVE, currentState, ESystemStateTransitionReason.SYSTEM_INIT);
}
cb(null, transition);
});
});
}
//# sourceMappingURL=_get-queue-state.js.map