redis-smq
Version:
A high-performance, reliable, and scalable message queue for Node.js.
96 lines • 3.9 kB
JavaScript
import { PanicError } from 'redis-smq-common';
import { redisKeys } from '../../common/redis/redis-keys/redis-keys.js';
import { QueueNotFoundError } from '../../errors/index.js';
import { EQueueDeliveryModel, EQueueOperationalState, EQueueProperty, EQueueType, } from '../types/index.js';
function parseProperties(raw) {
const properties = {
deliveryModel: EQueueDeliveryModel.POINT_TO_POINT,
queueType: EQueueType.LIFO_QUEUE,
rateLimit: null,
messagesCount: 0,
acknowledgedMessagesCount: 0,
deadLetteredMessagesCount: 0,
pendingMessagesCount: 0,
scheduledMessagesCount: 0,
processingMessagesCount: 0,
delayedMessagesCount: 0,
requeuedMessagesCount: 0,
operationalState: EQueueOperationalState.ACTIVE,
lockId: null,
lastStateChangeAt: null,
};
for (const key in raw) {
const keyNum = Number(key);
const value = raw[key];
switch (keyNum) {
case EQueueProperty.QUEUE_TYPE:
properties.queueType = Number(value);
break;
case EQueueProperty.DELIVERY_MODEL:
properties.deliveryModel = Number(value);
break;
case EQueueProperty.RATE_LIMIT:
properties.rateLimit = value ? JSON.parse(value) : null;
break;
case EQueueProperty.MESSAGES_COUNT:
properties.messagesCount = Number(value);
break;
case EQueueProperty.ACKNOWLEDGED_MESSAGES_COUNT:
properties.acknowledgedMessagesCount = Number(value);
break;
case EQueueProperty.DEAD_LETTERED_MESSAGES_COUNT:
properties.deadLetteredMessagesCount = Number(value);
break;
case EQueueProperty.SCHEDULED_MESSAGES_COUNT:
properties.scheduledMessagesCount = Number(value);
break;
case EQueueProperty.PROCESSING_MESSAGES_COUNT:
properties.processingMessagesCount = Number(value);
break;
case EQueueProperty.PENDING_MESSAGES_COUNT:
properties.pendingMessagesCount = Number(value);
break;
case EQueueProperty.DELAYED_MESSAGES_COUNT:
properties.delayedMessagesCount = Number(value);
break;
case EQueueProperty.REQUEUED_MESSAGES_COUNT:
properties.requeuedMessagesCount = Number(value);
break;
case EQueueProperty.OPERATIONAL_STATE:
properties.operationalState = Number(value);
break;
case EQueueProperty.LAST_STATE_CHANGE_AT:
properties.lastStateChangeAt = Number(value);
break;
case EQueueProperty.LOCK_ID:
properties.lockId = value ? value : null;
break;
default:
return new PanicError({
message: `Unsupported queue property type [${key}]`,
});
}
}
return properties;
}
export function _getQueueProperties(redisClient, queueParams, cb) {
const { keyQueueProperties } = redisKeys.getQueueKeys(queueParams.ns, queueParams.name, null);
redisClient.hgetall(keyQueueProperties, (err, reply) => {
if (err)
cb(err);
else if (!reply || !Object.keys(reply).length)
cb(new QueueNotFoundError({
metadata: {
queue: queueParams,
},
}));
else {
const queueProperties = parseProperties(reply);
if (queueProperties instanceof Error)
cb(queueProperties);
else
cb(null, queueProperties);
}
});
}
//# sourceMappingURL=_get-queue-properties.js.map