@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
59 lines • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetricsOutboundMiddleware = exports.MetricsInboundMiddleware = void 0;
class MetricsInboundMiddleware {
metricsCollector;
prefix;
constructor(metricsCollector, options = {}) {
this.metricsCollector = metricsCollector;
this.prefix = options.prefix ?? 'sqs.inbound';
}
async process(context, next) {
const startTime = Date.now();
this.metricsCollector.increment(`${this.prefix}.received`);
try {
await next();
const duration = Date.now() - startTime;
this.metricsCollector.timing(`${this.prefix}.processing_time`, duration);
this.metricsCollector.increment(`${this.prefix}.success`);
context.metadata.processingTime = duration;
}
catch (error) {
const duration = Date.now() - startTime;
this.metricsCollector.timing(`${this.prefix}.processing_time`, duration);
this.metricsCollector.increment(`${this.prefix}.error`, {
error_type: error.name,
});
throw error;
}
}
}
exports.MetricsInboundMiddleware = MetricsInboundMiddleware;
class MetricsOutboundMiddleware {
metricsCollector;
prefix;
constructor(metricsCollector, options = {}) {
this.metricsCollector = metricsCollector;
this.prefix = options.prefix ?? 'sqs.outbound';
}
async processOutbound(context, next) {
const startTime = Date.now();
const messageSize = JSON.stringify(context.message).length;
this.metricsCollector.increment(`${this.prefix}.sent`);
this.metricsCollector.gauge(`${this.prefix}.message_size`, messageSize);
try {
await next();
const duration = Date.now() - startTime;
this.metricsCollector.timing(`${this.prefix}.send_time`, duration);
this.metricsCollector.increment(`${this.prefix}.success`);
}
catch (error) {
this.metricsCollector.increment(`${this.prefix}.error`, {
error_type: error.name,
});
throw error;
}
}
}
exports.MetricsOutboundMiddleware = MetricsOutboundMiddleware;
//# sourceMappingURL=metrics.middleware.js.map