n8n 2.41.1 → 2.41.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/expression-observability/expression-observability.provider.d.ts +3 -3
- package/dist/expression-observability/expression-observability.provider.js +6 -8
- package/dist/expression-observability/expression-observability.provider.js.map +1 -1
- package/dist/modules/agents/agent-run-tracing.service.d.ts +3 -1
- package/dist/modules/agents/agent-run-tracing.service.js +5 -4
- package/dist/modules/agents/agent-run-tracing.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai-settings.service.d.ts +0 -1
- package/dist/modules/instance-ai/instance-ai-settings.service.js +0 -3
- package/dist/modules/instance-ai/instance-ai-settings.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.adapter.service.d.ts +3 -0
- package/dist/modules/instance-ai/instance-ai.adapter.service.js +16 -1
- package/dist/modules/instance-ai/instance-ai.adapter.service.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.module.d.ts +0 -1
- package/dist/modules/instance-ai/instance-ai.module.js +0 -1
- package/dist/modules/instance-ai/instance-ai.module.js.map +1 -1
- package/dist/modules/instance-ai/instance-ai.service.js +5 -3
- package/dist/modules/instance-ai/instance-ai.service.js.map +1 -1
- package/dist/modules/instance-ai/workflow-verification-obligation-service.d.ts +1 -1
- package/dist/modules/instance-ai/workflow-verification-obligation-service.js +2 -2
- package/dist/modules/instance-ai/workflow-verification-obligation-service.js.map +1 -1
- package/dist/modules/instance-reporting.ee/database/repositories/instance-monitoring-report.repository.d.ts +1 -1
- package/dist/modules/instance-reporting.ee/database/repositories/instance-monitoring-report.repository.js +3 -5
- package/dist/modules/instance-reporting.ee/database/repositories/instance-monitoring-report.repository.js.map +1 -1
- package/dist/modules/instance-reporting.ee/instance-reporting-scheduler.service.d.ts +2 -0
- package/dist/modules/instance-reporting.ee/instance-reporting-scheduler.service.js +25 -2
- package/dist/modules/instance-reporting.ee/instance-reporting-scheduler.service.js.map +1 -1
- package/dist/modules/instance-reporting.ee/instance-reporting.config.js.map +1 -1
- package/dist/modules/instance-reporting.ee/instance-reporting.module.d.ts +2 -0
- package/dist/modules/instance-reporting.ee/instance-reporting.module.js +17 -4
- package/dist/modules/instance-reporting.ee/instance-reporting.module.js.map +1 -1
- package/dist/modules/instance-reporting.ee/instance-reporting.service.d.ts +4 -2
- package/dist/modules/instance-reporting.ee/instance-reporting.service.js +21 -11
- package/dist/modules/instance-reporting.ee/instance-reporting.service.js.map +1 -1
- package/dist/modules/otel/execution-level-tracer.d.ts +4 -4
- package/dist/modules/otel/execution-level-tracer.js +30 -24
- package/dist/modules/otel/execution-level-tracer.js.map +1 -1
- package/dist/modules/otel/otel-lifecycle-handler.js +0 -1
- package/dist/modules/otel/otel-lifecycle-handler.js.map +1 -1
- package/dist/modules/otel/otel.service.d.ts +9 -2
- package/dist/modules/otel/otel.service.js +53 -27
- package/dist/modules/otel/otel.service.js.map +1 -1
- package/package.json +25 -26
|
@@ -4,7 +4,7 @@ export declare function parseWorkflowBuildOutcome(outcome: Record<string, unknow
|
|
|
4
4
|
export declare class WorkflowVerificationObligationService {
|
|
5
5
|
private readonly agentMemory;
|
|
6
6
|
private readonly isSetupPanelEnabled;
|
|
7
|
-
constructor(agentMemory: TypeORMAgentMemory, isSetupPanelEnabled?: () => boolean);
|
|
7
|
+
constructor(agentMemory: TypeORMAgentMemory, isSetupPanelEnabled?: (threadId: string) => boolean);
|
|
8
8
|
private storage;
|
|
9
9
|
isPlannedRecord(record: WorkflowLoopWorkItemRecord): boolean;
|
|
10
10
|
getObligation(threadId: string, workItemId: string, options: {
|
|
@@ -27,7 +27,7 @@ class WorkflowVerificationObligationService {
|
|
|
27
27
|
obligationFromRecord(threadId, record, options) {
|
|
28
28
|
return (0, instance_ai_1.deriveWorkflowVerificationObligation)(threadId, record, {
|
|
29
29
|
...options,
|
|
30
|
-
setupPanelEnabled: this.isSetupPanelEnabled(),
|
|
30
|
+
setupPanelEnabled: this.isSetupPanelEnabled(threadId),
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
async findPendingPlannedWorkflowVerification(threadId, graph) {
|
|
@@ -51,7 +51,7 @@ class WorkflowVerificationObligationService {
|
|
|
51
51
|
const options = {
|
|
52
52
|
source: 'planned',
|
|
53
53
|
plannedTaskId: task.id,
|
|
54
|
-
setupPanelEnabled: this.isSetupPanelEnabled(),
|
|
54
|
+
setupPanelEnabled: this.isSetupPanelEnabled(threadId),
|
|
55
55
|
};
|
|
56
56
|
const record = await this.storage().getWorkItem(threadId, baseOutcome.workItemId);
|
|
57
57
|
const outcome = record?.lastBuildOutcome ?? baseOutcome;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-verification-obligation-service.js","sourceRoot":"","sources":["../../../src/modules/instance-ai/workflow-verification-obligation-service.ts"],"names":[],"mappings":";;;;AAAA,kDAc0B;AAI1B,mCACC,OAA4C;IAE5C,MAAM,MAAM,GAAG,wCAA0B,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED;IACC,YACkB,WAA+B,EAC/B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"workflow-verification-obligation-service.js","sourceRoot":"","sources":["../../../src/modules/instance-ai/workflow-verification-obligation-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { InstanceReportDataPoint } from '../entities/instance-monitoring-re
|
|
|
3
3
|
import { InstanceMonitoringReport } from '../entities/instance-monitoring-report';
|
|
4
4
|
export declare class InstanceMonitoringReportRepository extends Repository<InstanceMonitoringReport> {
|
|
5
5
|
constructor(dataSource: DataSource);
|
|
6
|
-
|
|
6
|
+
findPending(): Promise<InstanceMonitoringReport | null>;
|
|
7
7
|
hasSettledToday(now: Date): Promise<boolean>;
|
|
8
8
|
createPending(dataPoints: InstanceReportDataPoint[]): Promise<InstanceMonitoringReport>;
|
|
9
9
|
findLastCoveredDay(): Promise<string | null>;
|
|
@@ -18,11 +18,9 @@ let InstanceMonitoringReportRepository = class InstanceMonitoringReportRepositor
|
|
|
18
18
|
constructor(dataSource) {
|
|
19
19
|
super(instance_monitoring_report_1.InstanceMonitoringReport, dataSource.manager);
|
|
20
20
|
}
|
|
21
|
-
async
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
order: { createdAt: 'DESC' },
|
|
25
|
-
});
|
|
21
|
+
async findPending() {
|
|
22
|
+
const [latest] = await this.find({ order: { createdAt: 'DESC', id: 'DESC' }, take: 1 });
|
|
23
|
+
return latest?.status === 'pending' ? latest : null;
|
|
26
24
|
}
|
|
27
25
|
async hasSettledToday(now) {
|
|
28
26
|
return await this.existsBy({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-monitoring-report.repository.js","sourceRoot":"","sources":["../../../../../src/modules/instance-reporting.ee/database/repositories/instance-monitoring-report.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAoF;AACpF,+BAAkC;AAGlC,uFAAkF;AAG3E,IAAM,kCAAkC,GAAxC,MAAM,kCAAmC,SAAQ,oBAAoC;IAC3F,YAAY,UAAsB;QACjC,KAAK,CAAC,qDAAwB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD,CAAC;
|
|
1
|
+
{"version":3,"file":"instance-monitoring-report.repository.js","sourceRoot":"","sources":["../../../../../src/modules/instance-reporting.ee/database/repositories/instance-monitoring-report.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,13 +63,13 @@ let InstanceReportingScheduler = class InstanceReportingScheduler {
|
|
|
63
63
|
async tick() {
|
|
64
64
|
try {
|
|
65
65
|
const reportTime = await this.settingsService.getReportTime();
|
|
66
|
-
const waitMs = await this.reportingService.msUntilRetryAllowed(new Date());
|
|
66
|
+
const waitMs = Math.min(await this.reportingService.msUntilRetryAllowed(new Date()), await this.msUntilNextSlot(reportTime));
|
|
67
67
|
if (waitMs > 0) {
|
|
68
68
|
this.scheduleNext(waitMs);
|
|
69
69
|
return;
|
|
70
70
|
}
|
|
71
71
|
if ((await this.reportIfDue(reportTime)) === 'failed') {
|
|
72
|
-
this.scheduleNext(instance_reporting_service_1.RETRY_DELAY_MS);
|
|
72
|
+
this.scheduleNext(Math.min(instance_reporting_service_1.RETRY_DELAY_MS, await this.msUntilNextSlot(reportTime)));
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
75
|
this.scheduleNext(msUntilNext(reportTime, new Date()));
|
|
@@ -81,10 +81,29 @@ let InstanceReportingScheduler = class InstanceReportingScheduler {
|
|
|
81
81
|
}
|
|
82
82
|
async reportIfDue(reportTime) {
|
|
83
83
|
const now = new Date();
|
|
84
|
+
const pending = await this.reportRepository.findPending();
|
|
85
|
+
if (pending) {
|
|
86
|
+
if (pendingIsStale(pending, reportTime, now)) {
|
|
87
|
+
await this.reportingService.skip(pending.id, pending.attempts, 'slot-passed');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return await this.trySend();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
84
93
|
if (now.getTime() < slotOn(reportTime, now))
|
|
85
94
|
return 'skipped';
|
|
86
95
|
if (await this.reportRepository.hasSettledToday(now))
|
|
87
96
|
return 'skipped';
|
|
97
|
+
return await this.trySend();
|
|
98
|
+
}
|
|
99
|
+
async msUntilNextSlot(reportTime) {
|
|
100
|
+
const pending = await this.reportRepository.findPending();
|
|
101
|
+
if (!pending)
|
|
102
|
+
return Number.POSITIVE_INFINITY;
|
|
103
|
+
const nextSlot = slotOn(reportTime, pending.createdAt) + MINUTES_PER_DAY * constants_1.Time.minutes.toMilliseconds;
|
|
104
|
+
return nextSlot - Date.now();
|
|
105
|
+
}
|
|
106
|
+
async trySend() {
|
|
88
107
|
try {
|
|
89
108
|
await this.reportingService.sendReport();
|
|
90
109
|
return 'sent';
|
|
@@ -123,6 +142,10 @@ exports.InstanceReportingScheduler = InstanceReportingScheduler = __decorate([
|
|
|
123
142
|
(0, di_1.Service)(),
|
|
124
143
|
__metadata("design:paramtypes", [instance_reporting_service_1.InstanceReportingService, instance_monitoring_report_repository_1.InstanceMonitoringReportRepository, instance_reporting_settings_service_1.InstanceReportingSettingsService, n8n_core_1.InstanceSettings, event_service_1.EventService, backend_common_1.Logger])
|
|
125
144
|
], InstanceReportingScheduler);
|
|
145
|
+
function pendingIsStale(report, reportTime, now) {
|
|
146
|
+
const nextSlot = slotOn(reportTime, report.createdAt) + MINUTES_PER_DAY * constants_1.Time.minutes.toMilliseconds;
|
|
147
|
+
return now.getTime() >= nextSlot;
|
|
148
|
+
}
|
|
126
149
|
function slotOn(reportTime, now) {
|
|
127
150
|
const [hour, minute] = reportTime.split(':').map(Number);
|
|
128
151
|
return Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), hour, minute, 0, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-reporting-scheduler.service.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting-scheduler.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,8CAAsC;AACtC,gDAAiF;AACjF,gCAAkC;AAClC,uCAA4C;AAC5C,6CAAqC;AAErC,0DAAsD;
|
|
1
|
+
{"version":3,"file":"instance-reporting-scheduler.service.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting-scheduler.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-reporting.config.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAA7B;QAKN,2BAAsB,GAAW,EAAE,CAAC;QASpC,6BAAwB,GAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"instance-reporting.config.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting.config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAA7B;QAKN,2BAAsB,GAAW,EAAE,CAAC;QASpC,6BAAwB,GAAW,EAAE,CAAC;QAStC,+BAA0B,GAAW,EAAE,CAAC;IACzC,CAAC;CAAA,CAAA;;AAnBA;IADC,IAAA,YAAG,EAAC,8BAA8B,CAAC;;uEACA;AASpC;IADC,IAAA,YAAG,EAAC,iCAAiC,CAAC;;yEACD;AAStC;IADC,IAAA,YAAG,EAAC,mCAAmC,CAAC;;2EACD;kCAvB5B,uBAAuB;IADnC,eAAM;GACM,uBAAuB,CAwBnC"}
|
|
@@ -10,4 +10,6 @@ export declare class InstanceReportingModule implements ModuleInterface {
|
|
|
10
10
|
}>;
|
|
11
11
|
entities(): Promise<typeof import("./database/entities/instance-monitoring-report.js").InstanceMonitoringReport[]>;
|
|
12
12
|
private isConfigured;
|
|
13
|
+
private hasReceiver;
|
|
14
|
+
private hasCredential;
|
|
13
15
|
}
|
|
@@ -17,10 +17,13 @@ let InstanceReportingModule = class InstanceReportingModule {
|
|
|
17
17
|
if (di_1.Container.get(backend_common_1.ModulesConfig).disabledModules.includes('insights')) {
|
|
18
18
|
throw new n8n_workflow_1.UserError('The `instance-reporting` module requires the `insights` module, but it is listed in N8N_DISABLED_MODULES. Remove `insights` from N8N_DISABLED_MODULES or remove `instance-reporting` from N8N_ENABLED_MODULES.');
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
const logger = di_1.Container.get(backend_common_1.Logger).scoped('instance-reporting');
|
|
21
|
+
if (!(await this.hasReceiver())) {
|
|
22
|
+
logger.warn('Instance reporting is enabled but N8N_INSTANCE_REPORTING_BASE_URL is unset, so no reports will be sent');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!(await this.hasCredential())) {
|
|
26
|
+
logger.warn('Instance reporting is enabled but this instance has no license certificate, so no reports will be sent. The receiver accepts reports only from licensed instances. Set N8N_LICENSE_CERT, activate a license, or set N8N_INSTANCE_REPORTING_AUTH_TOKEN.');
|
|
24
27
|
return;
|
|
25
28
|
}
|
|
26
29
|
const { InstanceReportingScheduler } = await import('./instance-reporting-scheduler.service.js');
|
|
@@ -38,9 +41,19 @@ let InstanceReportingModule = class InstanceReportingModule {
|
|
|
38
41
|
return [InstanceMonitoringReport];
|
|
39
42
|
}
|
|
40
43
|
async isConfigured() {
|
|
44
|
+
return (await this.hasReceiver()) && (await this.hasCredential());
|
|
45
|
+
}
|
|
46
|
+
async hasReceiver() {
|
|
41
47
|
const { InstanceReportingConfig } = await import('./instance-reporting.config.js');
|
|
42
48
|
return di_1.Container.get(InstanceReportingConfig).instanceReportingBaseUrl !== '';
|
|
43
49
|
}
|
|
50
|
+
async hasCredential() {
|
|
51
|
+
const { InstanceReportingConfig } = await import('./instance-reporting.config.js');
|
|
52
|
+
if (di_1.Container.get(InstanceReportingConfig).instanceReportingAuthToken !== '')
|
|
53
|
+
return true;
|
|
54
|
+
const { License } = await import('../../license.js');
|
|
55
|
+
return (await di_1.Container.get(License).loadCertStr()) !== '';
|
|
56
|
+
}
|
|
44
57
|
};
|
|
45
58
|
exports.InstanceReportingModule = InstanceReportingModule;
|
|
46
59
|
exports.InstanceReportingModule = InstanceReportingModule = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-reporting.module.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wDAA4D;AAE5D,gDAAgD;AAChD,gCAAoC;AACpC,+CAAyC;AAelC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACnC,KAAK,CAAC,IAAI;QAGT,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAGnD,IAAI,cAAS,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,wBAAS,CAClB,gNAAgN,CAChN,CAAC;QACH,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"instance-reporting.module.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wDAA4D;AAE5D,gDAAgD;AAChD,gCAAoC;AACpC,+CAAyC;AAelC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACnC,KAAK,CAAC,IAAI;QAGT,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAGnD,IAAI,cAAS,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,wBAAS,CAClB,gNAAgN,CAChN,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,cAAS,CAAC,GAAG,CAAC,uBAAM,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAElE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CACV,wGAAwG,CACxG,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CACV,wPAAwP,CACxP,CAAC;YACF,OAAO;QACR,CAAC;QAED,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAClD,2CAA2C,CAC3C,CAAC;QAEF,cAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAWD,KAAK,CAAC,QAAQ;QACb,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAE5D,MAAM,EAAE,gCAAgC,EAAE,GAAG,MAAM,MAAM,CACxD,0CAA0C,CAC1C,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,cAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,aAAa,EAAE,CAAC;QAEzF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAChD,mDAAmD,CACnD,CAAC;QAEF,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACnC,CAAC;IAGO,KAAK,CAAC,YAAY;QACzB,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,WAAW;QACxB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAEnF,OAAO,cAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,wBAAwB,KAAK,EAAE,CAAC;IAC/E,CAAC;IAOO,KAAK,CAAC,aAAa;QAC1B,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACnF,IAAI,cAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,0BAA0B,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAE1F,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAEjD,OAAO,CAAC,MAAM,cAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAC5D,CAAC;CACD,CAAA;;kCAzFY,uBAAuB;IADnC,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;GAC1D,uBAAuB,CAyFnC"}
|
|
@@ -3,6 +3,7 @@ import { OutboundHttp } from '@n8n/backend-network';
|
|
|
3
3
|
import { LicenseMetricsRepository } from '@n8n/db';
|
|
4
4
|
import { InstanceSettings } from 'n8n-core';
|
|
5
5
|
import { EventService } from '../../events/event.service';
|
|
6
|
+
import { License } from '../../license';
|
|
6
7
|
import { InsightsService } from '../../modules/insights/insights.service';
|
|
7
8
|
import { OwnershipService } from '../../services/ownership.service';
|
|
8
9
|
import { InstanceMonitoringReportRepository } from './database/repositories/instance-monitoring-report.repository';
|
|
@@ -15,12 +16,13 @@ export declare class InstanceReportingService {
|
|
|
15
16
|
private readonly instanceSettings;
|
|
16
17
|
private readonly ownershipService;
|
|
17
18
|
private readonly licenseMetricsRepository;
|
|
19
|
+
private readonly license;
|
|
18
20
|
private readonly logger;
|
|
19
21
|
private readonly eventService;
|
|
20
22
|
private readonly http;
|
|
21
|
-
constructor(config: InstanceReportingConfig, reportRepository: InstanceMonitoringReportRepository, insightsService: InsightsService, instanceSettings: InstanceSettings, ownershipService: OwnershipService, licenseMetricsRepository: LicenseMetricsRepository, logger: Logger, eventService: EventService, outboundHttp: OutboundHttp);
|
|
23
|
+
constructor(config: InstanceReportingConfig, reportRepository: InstanceMonitoringReportRepository, insightsService: InsightsService, instanceSettings: InstanceSettings, ownershipService: OwnershipService, licenseMetricsRepository: LicenseMetricsRepository, license: License, logger: Logger, eventService: EventService, outboundHttp: OutboundHttp);
|
|
22
24
|
sendReport(): Promise<void>;
|
|
23
|
-
|
|
25
|
+
skip(id: string, attempts: number, reason: 'max-retries' | 'slot-passed'): Promise<void>;
|
|
24
26
|
msUntilRetryAllowed(now: Date): Promise<number>;
|
|
25
27
|
private missedDays;
|
|
26
28
|
private collectDataPoints;
|
|
@@ -19,6 +19,7 @@ const n8n_core_1 = require("n8n-core");
|
|
|
19
19
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
20
20
|
const constants_2 = require("../../constants");
|
|
21
21
|
const event_service_1 = require("../../events/event.service");
|
|
22
|
+
const license_1 = require("../../license");
|
|
22
23
|
const insights_service_1 = require("../../modules/insights/insights.service");
|
|
23
24
|
const ownership_service_1 = require("../../services/ownership.service");
|
|
24
25
|
const instance_monitoring_report_repository_1 = require("./database/repositories/instance-monitoring-report.repository");
|
|
@@ -29,13 +30,14 @@ const MAX_ATTEMPTS = 3;
|
|
|
29
30
|
exports.RETRY_DELAY_MS = 5 * constants_1.Time.minutes.toMilliseconds;
|
|
30
31
|
const MAX_BACKFILL_DAYS = 30;
|
|
31
32
|
let InstanceReportingService = class InstanceReportingService {
|
|
32
|
-
constructor(config, reportRepository, insightsService, instanceSettings, ownershipService, licenseMetricsRepository, logger, eventService, outboundHttp) {
|
|
33
|
+
constructor(config, reportRepository, insightsService, instanceSettings, ownershipService, licenseMetricsRepository, license, logger, eventService, outboundHttp) {
|
|
33
34
|
this.config = config;
|
|
34
35
|
this.reportRepository = reportRepository;
|
|
35
36
|
this.insightsService = insightsService;
|
|
36
37
|
this.instanceSettings = instanceSettings;
|
|
37
38
|
this.ownershipService = ownershipService;
|
|
38
39
|
this.licenseMetricsRepository = licenseMetricsRepository;
|
|
40
|
+
this.license = license;
|
|
39
41
|
this.logger = logger;
|
|
40
42
|
this.eventService = eventService;
|
|
41
43
|
this.logger = this.logger.scoped('instance-reporting');
|
|
@@ -51,10 +53,17 @@ let InstanceReportingService = class InstanceReportingService {
|
|
|
51
53
|
});
|
|
52
54
|
}
|
|
53
55
|
async sendReport() {
|
|
56
|
+
const licenseCert = this.config.instanceReportingAuthToken
|
|
57
|
+
? undefined
|
|
58
|
+
: await this.license.loadCertStr();
|
|
59
|
+
if (licenseCert === '') {
|
|
60
|
+
this.logger.warn('Skipping the instance report because this instance has no license certificate.');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
54
63
|
const now = new Date();
|
|
55
|
-
let report = await this.reportRepository.
|
|
64
|
+
let report = await this.reportRepository.findPending();
|
|
56
65
|
if (report && report.attempts >= MAX_ATTEMPTS) {
|
|
57
|
-
await this.skip(report.id, report.attempts);
|
|
66
|
+
await this.skip(report.id, report.attempts, 'max-retries');
|
|
58
67
|
return;
|
|
59
68
|
}
|
|
60
69
|
if (!report) {
|
|
@@ -74,6 +83,7 @@ let InstanceReportingService = class InstanceReportingService {
|
|
|
74
83
|
...(this.config.instanceReportingLabel ? { label: this.config.instanceReportingLabel } : {}),
|
|
75
84
|
n8nVersion: constants_2.N8N_VERSION,
|
|
76
85
|
dataPoints: report.dataPoints,
|
|
86
|
+
...(licenseCert ? { licenseCert } : {}),
|
|
77
87
|
};
|
|
78
88
|
try {
|
|
79
89
|
const response = await this.http.request({
|
|
@@ -100,22 +110,22 @@ let InstanceReportingService = class InstanceReportingService {
|
|
|
100
110
|
this.eventService.emit('instance-report-failed');
|
|
101
111
|
await this.reportRepository.recordFailure(report.id, message, new Date());
|
|
102
112
|
if (report.attempts + 1 >= MAX_ATTEMPTS) {
|
|
103
|
-
await this.skip(report.id, report.attempts + 1);
|
|
113
|
+
await this.skip(report.id, report.attempts + 1, 'max-retries');
|
|
104
114
|
}
|
|
105
115
|
throw error;
|
|
106
116
|
}
|
|
107
117
|
await this.reportRepository.markDelivered(report.id, new Date());
|
|
108
118
|
this.logger.debug('Sent instance report', { batchId: report.id });
|
|
109
119
|
}
|
|
110
|
-
async skip(id, attempts) {
|
|
120
|
+
async skip(id, attempts, reason) {
|
|
111
121
|
await this.reportRepository.markSkipped(id);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
});
|
|
122
|
+
const message = reason === 'max-retries'
|
|
123
|
+
? 'Giving up on the instance report after repeated delivery failures'
|
|
124
|
+
: 'Giving up on the instance report because its slot has passed';
|
|
125
|
+
this.logger.error(message, { batchId: id, attempts });
|
|
116
126
|
}
|
|
117
127
|
async msUntilRetryAllowed(now) {
|
|
118
|
-
const pending = await this.reportRepository.
|
|
128
|
+
const pending = await this.reportRepository.findPending();
|
|
119
129
|
if (!pending?.lastAttemptAt)
|
|
120
130
|
return 0;
|
|
121
131
|
const elapsed = now.getTime() - pending.lastAttemptAt.getTime();
|
|
@@ -160,7 +170,7 @@ let InstanceReportingService = class InstanceReportingService {
|
|
|
160
170
|
exports.InstanceReportingService = InstanceReportingService;
|
|
161
171
|
exports.InstanceReportingService = InstanceReportingService = __decorate([
|
|
162
172
|
(0, di_1.Service)(),
|
|
163
|
-
__metadata("design:paramtypes", [instance_reporting_config_1.InstanceReportingConfig, instance_monitoring_report_repository_1.InstanceMonitoringReportRepository, insights_service_1.InsightsService, n8n_core_1.InstanceSettings, ownership_service_1.OwnershipService, db_1.LicenseMetricsRepository, backend_common_1.Logger, event_service_1.EventService, backend_network_1.OutboundHttp])
|
|
173
|
+
__metadata("design:paramtypes", [instance_reporting_config_1.InstanceReportingConfig, instance_monitoring_report_repository_1.InstanceMonitoringReportRepository, insights_service_1.InsightsService, n8n_core_1.InstanceSettings, ownership_service_1.OwnershipService, db_1.LicenseMetricsRepository, license_1.License, backend_common_1.Logger, event_service_1.EventService, backend_network_1.OutboundHttp])
|
|
164
174
|
], InstanceReportingService);
|
|
165
175
|
function utcDayBefore(instant, count) {
|
|
166
176
|
return new Date(instant.getTime() - count * constants_1.Time.days.toMilliseconds).toISOString().slice(0, 10);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-reporting.service.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAE7C,0DAAoD;AACpD,8CAAsC;AACtC,gCAAmD;AACnD,gCAAkC;AAClC,uCAA4C;AAC5C,+CAAgD;AAEhD,2CAA0C;AAC1C,0DAAsD;AACtD,0EAAsE;AACtE,oEAAgE;AAGhE,yHAAmH;AACnH,2EAAsE;AACtE,iFAAuE;AAGvE,MAAM,kBAAkB,GAAG,EAAE,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAO5D,MAAM,YAAY,GAAG,CAAC,CAAC;AAGV,QAAA,cAAc,GAAG,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAU9D,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAOtB,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAGpC,YACkB,MAA+B,EAC/B,gBAAoD,EACpD,eAAgC,EAChC,gBAAkC,EAClC,gBAAkC,EAClC,wBAAkD,EAClD,MAAc,EACd,YAA0B,EAC3C,YAA0B;
|
|
1
|
+
{"version":3,"file":"instance-reporting.service.js","sourceRoot":"","sources":["../../../src/modules/instance-reporting.ee/instance-reporting.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,15 +2,16 @@ import { Logger } from '@n8n/backend-common';
|
|
|
2
2
|
import type { Context } from '@opentelemetry/api';
|
|
3
3
|
import { type StartWorkflowParams, type EndWorkflowParams, type StartNodeParams, type EndNodeParams } from './execution-level-tracer.types';
|
|
4
4
|
import { OtelSettingsService } from './otel-settings.service';
|
|
5
|
+
import { OtelService } from './otel.service';
|
|
5
6
|
import type { TracingContext } from './tracing-context';
|
|
6
7
|
export declare class ExecutionLevelTracer {
|
|
8
|
+
private readonly otelService;
|
|
7
9
|
private readonly otelSettingsService;
|
|
8
10
|
private readonly logger;
|
|
9
11
|
private readonly activeWorkflowSpans;
|
|
10
12
|
private readonly activeNodeSpansByExecutionId;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
constructor(otelSettingsService: OtelSettingsService, logger: Logger);
|
|
13
|
+
constructor(otelService: OtelService, otelSettingsService: OtelSettingsService, logger: Logger);
|
|
14
|
+
private get tracer();
|
|
14
15
|
startWorkflow(params: StartWorkflowParams): TracingContext;
|
|
15
16
|
endWorkflow(params: EndWorkflowParams): void;
|
|
16
17
|
startNode(params: StartNodeParams): void;
|
|
@@ -19,7 +20,6 @@ export declare class ExecutionLevelTracer {
|
|
|
19
20
|
injectTraceHeaders(executionId: string, nodeName: string | undefined, headers: Record<string, string>): void;
|
|
20
21
|
private parseTraceParentHeaders;
|
|
21
22
|
private buildContinuationLinks;
|
|
22
|
-
private findWorkflowSpanContext;
|
|
23
23
|
private findMostSpecificSpan;
|
|
24
24
|
private endDanglingNodeSpans;
|
|
25
25
|
}
|
|
@@ -13,30 +13,34 @@ exports.ExecutionLevelTracer = void 0;
|
|
|
13
13
|
const backend_common_1 = require("@n8n/backend-common");
|
|
14
14
|
const di_1 = require("@n8n/di");
|
|
15
15
|
const api_1 = require("@opentelemetry/api");
|
|
16
|
+
const core_1 = require("@opentelemetry/core");
|
|
16
17
|
const execution_level_tracer_types_1 = require("./execution-level-tracer.types");
|
|
17
18
|
const otel_settings_service_1 = require("./otel-settings.service");
|
|
18
19
|
const otel_constants_1 = require("./otel.constants");
|
|
20
|
+
const otel_service_1 = require("./otel.service");
|
|
19
21
|
const TRACER_NAME = 'n8n-workflow';
|
|
22
|
+
const propagator = new core_1.W3CTraceContextPropagator();
|
|
20
23
|
const UNKNOWN_ERROR_TYPE = 'UnknownError';
|
|
21
24
|
const OBJECT_ERROR_TYPE = 'Object';
|
|
22
25
|
function isError(status) {
|
|
23
26
|
return status === 'error' || status === 'crashed';
|
|
24
27
|
}
|
|
25
28
|
let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
26
|
-
|
|
27
|
-
this.
|
|
28
|
-
}
|
|
29
|
-
constructor(otelSettingsService, logger) {
|
|
29
|
+
constructor(otelService, otelSettingsService, logger) {
|
|
30
|
+
this.otelService = otelService;
|
|
30
31
|
this.otelSettingsService = otelSettingsService;
|
|
31
32
|
this.logger = logger;
|
|
32
33
|
this.activeWorkflowSpans = new Map();
|
|
33
34
|
this.activeNodeSpansByExecutionId = new Map();
|
|
34
|
-
|
|
35
|
+
}
|
|
36
|
+
get tracer() {
|
|
37
|
+
return this.otelService.getTracer(TRACER_NAME);
|
|
35
38
|
}
|
|
36
39
|
startWorkflow(params) {
|
|
37
40
|
try {
|
|
38
41
|
const parentCtx = this.parseTraceParentHeaders(params.tracingContext);
|
|
39
42
|
const links = this.buildContinuationLinks(params.linkTo);
|
|
43
|
+
const projectAttributes = buildProjectAttributes(params.project);
|
|
40
44
|
const span = this.tracer.startSpan('workflow.execute', {
|
|
41
45
|
attributes: {
|
|
42
46
|
[otel_constants_1.ATTR.WORKFLOW_ID]: params.workflow.id,
|
|
@@ -44,15 +48,12 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
44
48
|
[otel_constants_1.ATTR.WORKFLOW_VERSION_ID]: params.workflow.versionId ?? '',
|
|
45
49
|
[otel_constants_1.ATTR.WORKFLOW_NODE_COUNT]: params.workflow.nodeCount,
|
|
46
50
|
[otel_constants_1.ATTR.EXECUTION_ID]: params.executionId,
|
|
47
|
-
...(params.project?.id && { [otel_constants_1.ATTR.PROJECT_ID]: params.project.id }),
|
|
48
51
|
...buildCustomAttributes(otel_constants_1.ATTR.WORKFLOW_CUSTOM_PREFIX, params.workflow?.customAttributes),
|
|
49
|
-
...
|
|
52
|
+
...projectAttributes,
|
|
50
53
|
},
|
|
51
54
|
links,
|
|
52
55
|
}, parentCtx);
|
|
53
|
-
this.activeWorkflowSpans.set(params.executionId, {
|
|
54
|
-
span,
|
|
55
|
-
});
|
|
56
|
+
this.activeWorkflowSpans.set(params.executionId, { span, projectAttributes });
|
|
56
57
|
return toTracingParentContext(span);
|
|
57
58
|
}
|
|
58
59
|
catch (error) {
|
|
@@ -99,8 +100,8 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
99
100
|
}
|
|
100
101
|
startNode(params) {
|
|
101
102
|
try {
|
|
102
|
-
const
|
|
103
|
-
if (!
|
|
103
|
+
const tracked = this.activeWorkflowSpans.get(params.executionId);
|
|
104
|
+
if (!tracked) {
|
|
104
105
|
this.logger.warn('Trying to start a node without a pre-existing parent workflow trace - ignoring');
|
|
105
106
|
return;
|
|
106
107
|
}
|
|
@@ -110,8 +111,9 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
110
111
|
[otel_constants_1.ATTR.NODE_NAME]: params.node.name,
|
|
111
112
|
[otel_constants_1.ATTR.NODE_TYPE]: params.node.type,
|
|
112
113
|
[otel_constants_1.ATTR.NODE_TYPE_VERSION]: params.node.typeVersion,
|
|
114
|
+
...tracked.projectAttributes,
|
|
113
115
|
},
|
|
114
|
-
},
|
|
116
|
+
}, api_1.trace.setSpan(api_1.context.active(), tracked.span));
|
|
115
117
|
let executionNodes = this.activeNodeSpansByExecutionId.get(params.executionId);
|
|
116
118
|
if (!executionNodes) {
|
|
117
119
|
executionNodes = new Map();
|
|
@@ -169,7 +171,7 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
169
171
|
const span = this.findMostSpecificSpan(executionId, nodeName);
|
|
170
172
|
if (!span)
|
|
171
173
|
return;
|
|
172
|
-
|
|
174
|
+
propagator.inject(api_1.trace.setSpan(api_1.ROOT_CONTEXT, span), headers, api_1.defaultTextMapSetter);
|
|
173
175
|
}
|
|
174
176
|
catch (error) {
|
|
175
177
|
this.logger.warn('Failed to inject trace headers', {
|
|
@@ -180,14 +182,14 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
180
182
|
}
|
|
181
183
|
}
|
|
182
184
|
parseTraceParentHeaders(tracingContext) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
if (!tracingContext)
|
|
186
|
+
return api_1.ROOT_CONTEXT;
|
|
187
|
+
return propagator.extract(api_1.ROOT_CONTEXT, tracingContext, api_1.defaultTextMapGetter);
|
|
186
188
|
}
|
|
187
189
|
buildContinuationLinks(linkTo) {
|
|
188
190
|
if (!linkTo)
|
|
189
191
|
return undefined;
|
|
190
|
-
const extracted =
|
|
192
|
+
const extracted = propagator.extract(api_1.ROOT_CONTEXT, linkTo, api_1.defaultTextMapGetter);
|
|
191
193
|
const spanContext = api_1.trace.getSpanContext(extracted);
|
|
192
194
|
if (!spanContext)
|
|
193
195
|
return undefined;
|
|
@@ -198,10 +200,6 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
198
200
|
},
|
|
199
201
|
];
|
|
200
202
|
}
|
|
201
|
-
findWorkflowSpanContext(executionId) {
|
|
202
|
-
const tracked = this.activeWorkflowSpans.get(executionId);
|
|
203
|
-
return tracked ? api_1.trace.setSpan(api_1.context.active(), tracked.span) : undefined;
|
|
204
|
-
}
|
|
205
203
|
findMostSpecificSpan(executionId, nodeName) {
|
|
206
204
|
return ((nodeName
|
|
207
205
|
? this.activeNodeSpansByExecutionId.get(executionId)?.get(nodeName)?.span
|
|
@@ -220,7 +218,7 @@ let ExecutionLevelTracer = class ExecutionLevelTracer {
|
|
|
220
218
|
exports.ExecutionLevelTracer = ExecutionLevelTracer;
|
|
221
219
|
exports.ExecutionLevelTracer = ExecutionLevelTracer = __decorate([
|
|
222
220
|
(0, di_1.Service)(),
|
|
223
|
-
__metadata("design:paramtypes", [otel_settings_service_1.OtelSettingsService, backend_common_1.Logger])
|
|
221
|
+
__metadata("design:paramtypes", [otel_service_1.OtelService, otel_settings_service_1.OtelSettingsService, backend_common_1.Logger])
|
|
224
222
|
], ExecutionLevelTracer);
|
|
225
223
|
function buildCustomAttributes(prefix, attrs) {
|
|
226
224
|
if (!attrs)
|
|
@@ -231,6 +229,14 @@ function buildCustomAttributes(prefix, attrs) {
|
|
|
231
229
|
}
|
|
232
230
|
return result;
|
|
233
231
|
}
|
|
232
|
+
function buildProjectAttributes(project) {
|
|
233
|
+
if (!project)
|
|
234
|
+
return {};
|
|
235
|
+
return {
|
|
236
|
+
[otel_constants_1.ATTR.PROJECT_ID]: project.id,
|
|
237
|
+
...buildCustomAttributes(otel_constants_1.ATTR.PROJECT_CUSTOM_PREFIX, project.customAttributes),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
234
240
|
function buildNodeEndAttributes(params) {
|
|
235
241
|
const attrs = {
|
|
236
242
|
[otel_constants_1.ATTR.NODE_ITEMS_INPUT]: params.inputItemCount,
|
|
@@ -241,7 +247,7 @@ function buildNodeEndAttributes(params) {
|
|
|
241
247
|
}
|
|
242
248
|
function toTracingParentContext(span) {
|
|
243
249
|
const carrier = {};
|
|
244
|
-
|
|
250
|
+
propagator.inject(api_1.trace.setSpan(api_1.ROOT_CONTEXT, span), carrier, api_1.defaultTextMapSetter);
|
|
245
251
|
return { traceparent: carrier.traceparent, tracestate: carrier.tracestate };
|
|
246
252
|
}
|
|
247
253
|
function terminateSpan(span, reason) {
|