mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-23 11:44:06 -08:00
fix(core): Fix Message Event Bus Metrics not counting up for labeled metrics (#11396)
This commit is contained in:
parent
8cbe94708e
commit
7fc3b25d21
|
@ -14,4 +14,5 @@ module.exports = {
|
|||
],
|
||||
coveragePathIgnorePatterns: ['/src/databases/migrations/'],
|
||||
testTimeout: 10_000,
|
||||
prettierPath: null,
|
||||
};
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
import { GlobalConfig } from '@n8n/config';
|
||||
import type express from 'express';
|
||||
import { mock } from 'jest-mock-extended';
|
||||
import type { InstanceSettings } from 'n8n-core';
|
||||
import promClient from 'prom-client';
|
||||
|
||||
import { EventMessageWorkflow } from '@/eventbus/event-message-classes/event-message-workflow';
|
||||
import type { EventService } from '@/events/event.service';
|
||||
import { mockInstance } from '@test/mocking';
|
||||
|
||||
import { MessageEventBus } from '../../eventbus/message-event-bus/message-event-bus';
|
||||
import { PrometheusMetricsService } from '../prometheus-metrics.service';
|
||||
|
||||
jest.unmock('@/eventbus/message-event-bus/message-event-bus');
|
||||
|
||||
const customPrefix = 'custom_';
|
||||
|
||||
const eventService = mock<EventService>();
|
||||
const instanceSettings = mock<InstanceSettings>({ instanceType: 'main' });
|
||||
const app = mock<express.Application>();
|
||||
const eventBus = new MessageEventBus(
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
mock(),
|
||||
);
|
||||
|
||||
describe('workflow_success_total', () => {
|
||||
test('support workflow id labels', async () => {
|
||||
// ARRANGE
|
||||
const globalConfig = mockInstance(GlobalConfig, {
|
||||
endpoints: {
|
||||
metrics: {
|
||||
prefix: '',
|
||||
includeMessageEventBusMetrics: true,
|
||||
includeWorkflowIdLabel: true,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const prometheusMetricsService = new PrometheusMetricsService(
|
||||
mock(),
|
||||
eventBus,
|
||||
globalConfig,
|
||||
eventService,
|
||||
instanceSettings,
|
||||
);
|
||||
|
||||
await prometheusMetricsService.init(app);
|
||||
|
||||
// ACT
|
||||
const event = new EventMessageWorkflow({
|
||||
eventName: 'n8n.workflow.success',
|
||||
payload: { workflowId: '1234' },
|
||||
});
|
||||
|
||||
eventBus.emit('metrics.eventBus.event', event);
|
||||
|
||||
// ASSERT
|
||||
const workflowSuccessCounter =
|
||||
await promClient.register.getSingleMetricAsString('workflow_success_total');
|
||||
|
||||
expect(workflowSuccessCounter).toMatchInlineSnapshot(`
|
||||
"# HELP workflow_success_total Total number of n8n.workflow.success events.
|
||||
# TYPE workflow_success_total counter
|
||||
workflow_success_total{workflow_id="1234"} 1"
|
||||
`);
|
||||
});
|
||||
|
||||
test('support a custom prefix', async () => {
|
||||
// ARRANGE
|
||||
const globalConfig = mockInstance(GlobalConfig, {
|
||||
endpoints: {
|
||||
metrics: {
|
||||
prefix: customPrefix,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const prometheusMetricsService = new PrometheusMetricsService(
|
||||
mock(),
|
||||
eventBus,
|
||||
globalConfig,
|
||||
eventService,
|
||||
instanceSettings,
|
||||
);
|
||||
|
||||
await prometheusMetricsService.init(app);
|
||||
|
||||
// ACT
|
||||
const event = new EventMessageWorkflow({
|
||||
eventName: 'n8n.workflow.success',
|
||||
payload: { workflowId: '1234' },
|
||||
});
|
||||
|
||||
eventBus.emit('metrics.eventBus.event', event);
|
||||
|
||||
// ASSERT
|
||||
const versionInfoMetric = promClient.register.getSingleMetric(`${customPrefix}version_info`);
|
||||
|
||||
if (!versionInfoMetric) {
|
||||
fail(`Could not find a metric called "${customPrefix}version_info"`);
|
||||
}
|
||||
});
|
||||
});
|
|
@ -211,7 +211,6 @@ export class PrometheusMetricsService {
|
|||
help: `Total number of ${eventName} events.`,
|
||||
labelNames: Object.keys(labels),
|
||||
});
|
||||
counter.labels(labels).inc(0);
|
||||
this.counters[eventName] = counter;
|
||||
}
|
||||
|
||||
|
@ -224,7 +223,9 @@ export class PrometheusMetricsService {
|
|||
this.eventBus.on('metrics.eventBus.event', (event: EventMessageTypes) => {
|
||||
const counter = this.toCounter(event);
|
||||
if (!counter) return;
|
||||
counter.inc(1);
|
||||
|
||||
const labels = this.toLabels(event);
|
||||
counter.inc(labels, 1);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue