mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
fix(core): Handle zero execution statistics on metrics collection during license renewal (#8463)
This commit is contained in:
parent
2fba0e8d58
commit
db48bdd6d1
|
@ -61,7 +61,7 @@ export class UsageMetricsRepository extends Repository<UsageMetrics> {
|
|||
`)) as Row[];
|
||||
|
||||
const toNumber = (value: string | number) =>
|
||||
typeof value === 'number' ? value : parseInt(value, 10);
|
||||
(typeof value === 'number' ? value : parseInt(value, 10)) || 0;
|
||||
|
||||
return {
|
||||
enabledUsers: toNumber(enabledUsers),
|
||||
|
|
|
@ -2,27 +2,24 @@ import { UsageMetricsRepository } from '@/databases/repositories/usageMetrics.re
|
|||
import { createAdmin, createMember, createOwner, createUser } from './shared/db/users';
|
||||
import * as testDb from './shared/testDb';
|
||||
import Container from 'typedi';
|
||||
import { CredentialsRepository } from '@/databases/repositories/credentials.repository';
|
||||
import { createManyWorkflows } from './shared/db/workflows';
|
||||
import { createManyCredentials } from './shared/db/credentials';
|
||||
import { WorkflowStatisticsRepository } from '@/databases/repositories/workflowStatistics.repository';
|
||||
import { StatisticsNames } from '@/databases/entities/WorkflowStatistics';
|
||||
import { WorkflowRepository } from '@/databases/repositories/workflow.repository';
|
||||
|
||||
describe('UsageMetricsRepository', () => {
|
||||
let usageMetricsRepository: UsageMetricsRepository;
|
||||
let credentialsRepository: CredentialsRepository;
|
||||
let workflowStatisticsRepository: WorkflowStatisticsRepository;
|
||||
let workflowRepository: WorkflowRepository;
|
||||
|
||||
beforeAll(async () => {
|
||||
await testDb.init();
|
||||
|
||||
usageMetricsRepository = Container.get(UsageMetricsRepository);
|
||||
credentialsRepository = Container.get(CredentialsRepository);
|
||||
workflowStatisticsRepository = Container.get(WorkflowStatisticsRepository);
|
||||
workflowRepository = Container.get(WorkflowRepository);
|
||||
|
||||
workflowStatisticsRepository = Container.get(WorkflowStatisticsRepository);
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
await testDb.truncate(['User', 'Credentials', 'Workflow', 'Execution', 'WorkflowStatistics']);
|
||||
});
|
||||
|
||||
|
@ -74,5 +71,20 @@ describe('UsageMetricsRepository', () => {
|
|||
manualExecutions: 2,
|
||||
});
|
||||
});
|
||||
|
||||
test('should handle zero execution statistics correctly', async () => {
|
||||
await Promise.all([createOwner(), createManyWorkflows(3, { active: true })]);
|
||||
|
||||
const metrics = await usageMetricsRepository.getLicenseRenewalMetrics();
|
||||
|
||||
expect(metrics).toStrictEqual({
|
||||
enabledUsers: 1,
|
||||
totalCredentials: 0,
|
||||
totalWorkflows: 3,
|
||||
activeWorkflows: 3,
|
||||
productionExecutions: 0, // not NaN
|
||||
manualExecutions: 0, // not NaN
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue