redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
82 lines • 3.16 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueueMetrics = void 0;
const types_1 = require("../../../types");
const redis_keys_1 = require("../../common/redis-keys/redis-keys");
const redis_smq_common_1 = require("redis-smq-common");
const queue_1 = require("./queue");
class QueueMetrics {
constructor(config, redisClient, logger) {
this.redisClient = redisClient;
this.logger = logger;
this.config = config;
}
getMetrics(queue, cb) {
const queueParams = queue_1.Queue.getParams(this.config, queue);
const queueMetrics = {
acknowledged: 0,
deadLettered: 0,
pending: 0,
};
const { keyQueuePending, keyQueuePendingPriorityMessageWeight, keyQueueDL, keyQueueAcknowledged, } = redis_keys_1.redisKeys.getQueueKeys(queueParams);
redis_smq_common_1.async.waterfall([
(cb) => queue_1.Queue.getSettings(this.config, this.redisClient, queueParams, (err, settings) => {
if (err)
cb(err);
if (!settings)
cb(new redis_smq_common_1.errors.EmptyCallbackReplyError());
else
cb(null, settings.type);
}),
(queueType, cb) => {
if (queueType === types_1.EQueueType.PRIORITY_QUEUE) {
this.redisClient.zcard(keyQueuePendingPriorityMessageWeight, (err, reply) => {
if (err)
cb(err);
else {
queueMetrics.pending = reply !== null && reply !== void 0 ? reply : 0;
cb();
}
});
}
else {
this.redisClient.llen(keyQueuePending, (err, reply) => {
if (err)
cb(err);
else {
queueMetrics.pending = reply !== null && reply !== void 0 ? reply : 0;
cb();
}
});
}
},
(cb) => {
this.redisClient.llen(keyQueueDL, (err, reply) => {
if (err)
cb(err);
else {
queueMetrics.deadLettered = reply !== null && reply !== void 0 ? reply : 0;
cb();
}
});
},
(cb) => {
this.redisClient.llen(keyQueueAcknowledged, (err, reply) => {
if (err)
cb(err);
else {
queueMetrics.acknowledged = reply !== null && reply !== void 0 ? reply : 0;
cb();
}
});
},
], (err) => {
if (err)
cb(err);
else
cb(null, queueMetrics);
});
}
}
exports.QueueMetrics = QueueMetrics;
//# sourceMappingURL=queue-metrics.js.map
;