UNPKG

openapi-connect

Version:
58 lines 3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectMetricsMiddlewares = exports.collectMetrics = void 0; const responseTime = require("response-time"); const normalizers_1 = require("../helpers/normalizers"); const urlModule = require("url"); const collectMetrics = (options) => (req, res, time) => { var _a, _b, _c; const { requestCount, requestDuration, requestLength, responseLength, options: metricsOptions } = options.collectMetrics; const { originalUrl, method } = req; if ((_a = options.swaggerUI) === null || _a === void 0 ? void 0 : _a.enable) { const swaggerDocsPath = urlModule.resolve(options.basePath, 'docs'); const swaggerApiDocsPath = urlModule.resolve(options.basePath, 'api-docs'); if (originalUrl === swaggerDocsPath || originalUrl === swaggerApiDocsPath || originalUrl.includes('swagger') || originalUrl === '/favicon-32x32.png') { return; } } const route = (0, normalizers_1.normalizePath)(originalUrl, (_b = metricsOptions === null || metricsOptions === void 0 ? void 0 : metricsOptions.extraMasks) !== null && _b !== void 0 ? _b : []); const status = (0, normalizers_1.normalizeStatusCode)(res.statusCode); let labels = { route, method, status }; if (metricsOptions === null || metricsOptions === void 0 ? void 0 : metricsOptions.transformLabels) { labels = metricsOptions.transformLabels(labels, req, res); } requestCount === null || requestCount === void 0 ? void 0 : requestCount.inc(labels); requestDuration === null || requestDuration === void 0 ? void 0 : requestDuration.observe(labels, time / 1000); const reqLength = req.headers['content-length']; if (reqLength) { requestLength === null || requestLength === void 0 ? void 0 : requestLength.observe(labels, Number(reqLength)); } const responseHeaders = res.getHeaders(); const resLength = (_c = responseHeaders['Content-Length']) !== null && _c !== void 0 ? _c : responseHeaders['content-length']; if (resLength) { responseLength === null || responseLength === void 0 ? void 0 : responseLength.observe(labels, Number(resLength)); } }; exports.collectMetrics = collectMetrics; function collectMetricsMiddlewares(options) { if (!options.collectMetrics) { return null; } const { requestCount, requestDuration, requestLength, responseLength } = options.collectMetrics; const metrics = [requestCount, requestDuration, requestLength, responseLength]; if (!metrics.some(Boolean)) { return null; } const collectMetricsHandler = responseTime((0, exports.collectMetrics)(options)); return { handler: collectMetricsHandler, errorHandler: (err, req, res, next) => { collectMetricsHandler(req, res, () => next(err)); } }; } exports.collectMetricsMiddlewares = collectMetricsMiddlewares; //# sourceMappingURL=metrics.js.map