mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
import config from '@/config';
|
|
import { N8N_VERSION } from '@/constants';
|
|
import * as ResponseHelper from '@/ResponseHelper';
|
|
import type express from 'express';
|
|
import promBundle from 'express-prom-bundle';
|
|
import promClient from 'prom-client';
|
|
import semverParse from 'semver/functions/parse';
|
|
|
|
export { promClient };
|
|
|
|
export function configureMetrics(app: express.Application) {
|
|
if (!config.getEnv('endpoints.metrics.enable')) {
|
|
return;
|
|
}
|
|
|
|
setupDefaultMetrics();
|
|
setupN8nVersionMetric();
|
|
setupApiMetrics(app);
|
|
mountMetricsEndpoint(app);
|
|
}
|
|
|
|
function setupN8nVersionMetric() {
|
|
const n8nVersion = semverParse(N8N_VERSION || '0.0.0');
|
|
|
|
if (n8nVersion) {
|
|
const versionGauge = new promClient.Gauge({
|
|
name: config.getEnv('endpoints.metrics.prefix') + 'version_info',
|
|
help: 'n8n version info.',
|
|
labelNames: ['version', 'major', 'minor', 'patch'],
|
|
});
|
|
|
|
versionGauge.set(
|
|
{
|
|
version: 'v' + n8nVersion.version,
|
|
major: n8nVersion.major,
|
|
minor: n8nVersion.minor,
|
|
patch: n8nVersion.patch,
|
|
},
|
|
1,
|
|
);
|
|
}
|
|
}
|
|
|
|
function setupDefaultMetrics() {
|
|
if (config.getEnv('endpoints.metrics.includeDefaultMetrics')) {
|
|
promClient.collectDefaultMetrics();
|
|
}
|
|
}
|
|
|
|
function setupApiMetrics(app: express.Application) {
|
|
if (config.getEnv('endpoints.metrics.includeApiEndpoints')) {
|
|
const metricsMiddleware = promBundle({
|
|
autoregister: false,
|
|
includeUp: false,
|
|
includePath: config.getEnv('endpoints.metrics.includeApiPathLabel'),
|
|
includeMethod: config.getEnv('endpoints.metrics.includeApiMethodLabel'),
|
|
includeStatusCode: config.getEnv('endpoints.metrics.includeApiStatusCodeLabel'),
|
|
});
|
|
|
|
app.use(['/rest/', '/webhook/', 'webhook-test/', '/api/'], metricsMiddleware);
|
|
}
|
|
}
|
|
|
|
function mountMetricsEndpoint(app: express.Application) {
|
|
app.get('/metrics', async (req: express.Request, res: express.Response) => {
|
|
const response = await promClient.register.metrics();
|
|
res.setHeader('Content-Type', promClient.register.contentType);
|
|
ResponseHelper.sendSuccessResponse(res, response, true, 200);
|
|
});
|
|
}
|