traffic-monitor-mqtt
Version:
Zentrales Traffic Monitoring via MQTT für Node.js Anwendungen
46 lines (45 loc) • 1.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createExpressMiddleware = createExpressMiddleware;
const debug_1 = __importDefault(require("debug"));
const log = (0, debug_1.default)('traffic-monitor:express');
function createExpressMiddleware(eventBatcher, clientConfig) {
return function trafficMonitorMiddleware(req, res, next) {
const startTime = Date.now();
// Capture response data
const originalEnd = res.end;
const chunks = [];
// Typesicherer Wrapper für res.end
res.end = function (chunk, encoding, callback) {
if (chunk) {
chunks.push(Buffer.from(chunk));
}
const executionTime = Date.now() - startTime;
const responseSize = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
const event = {
timestamp: new Date().toISOString(),
clientInfo: clientConfig,
operationType: 'http:incoming',
targetSystem: `express:${req.hostname}`,
performance: {
executionTimeMs: executionTime,
payloadSizeBytes: responseSize
},
details: {
method: req.method,
path: req.path,
statusCode: res.statusCode,
requestSize: parseInt(req.get('content-length') || '0')
}
};
eventBatcher.addEvent(event);
// Stelle sicher, dass encoding einen Wert hat
const safeEncoding = encoding || 'utf8';
return originalEnd.call(res, chunk, safeEncoding, callback);
};
next();
};
}