diff --git a/packages/workflow/src/TelemetryHelpers.ts b/packages/workflow/src/TelemetryHelpers.ts index cbe9a0bb54..672ea70c9b 100644 --- a/packages/workflow/src/TelemetryHelpers.ts +++ b/packages/workflow/src/TelemetryHelpers.ts @@ -250,6 +250,10 @@ export function generateNodesGraph( nodeItem.agent = (node.parameters.agent as string) ?? 'conversationalAgent'; } else if (node.type === MERGE_NODE_TYPE) { nodeItem.operation = node.parameters.mode as string; + + if (options?.isCloudDeployment && node.parameters.mode === 'combineBySql') { + nodeItem.sql = node.parameters.query as string; + } } else if (node.type === HTTP_REQUEST_NODE_TYPE && node.typeVersion === 1) { try { nodeItem.domain = new URL(node.parameters.url as string).hostname; diff --git a/packages/workflow/test/TelemetryHelpers.test.ts b/packages/workflow/test/TelemetryHelpers.test.ts index f7cd8c6190..c1624d5faf 100644 --- a/packages/workflow/test/TelemetryHelpers.test.ts +++ b/packages/workflow/test/TelemetryHelpers.test.ts @@ -592,6 +592,128 @@ describe('generateNodesGraph', () => { }); }); + it.each([ + { + workflow: { + nodes: [ + { + parameters: { + mode: 'combineBySql', + query: 'SELECT * FROM input1 LEFT JOIN input2 ON input1.name = input2.id', + }, + id: 'b468b603-3e59-4515-b555-90cfebd64d47', + name: 'Merge Node V3', + type: 'n8n-nodes-base.merge', + typeVersion: 3, + position: [320, 460], + }, + ], + connections: {}, + pinData: {}, + } as Partial, + isCloudDeployment: false, + expected: { + nodeGraph: { + node_types: ['n8n-nodes-base.merge'], + node_connections: [], + nodes: { + '0': { + id: 'b468b603-3e59-4515-b555-90cfebd64d47', + type: 'n8n-nodes-base.merge', + version: 3, + position: [320, 460], + operation: 'combineBySql', + }, + }, + notes: {}, + is_pinned: false, + }, + nameIndices: { 'Merge Node V3': '0' }, + webhookNodeNames: [], + }, + }, + { + workflow: { + nodes: [ + { + parameters: { + mode: 'append', + }, + id: 'b468b603-3e59-4515-b555-90cfebd64d47', + name: 'Merge Node V3', + type: 'n8n-nodes-base.merge', + typeVersion: 3, + position: [320, 460], + }, + ], + connections: {}, + pinData: {}, + } as Partial, + isCloudDeployment: true, + expected: { + nodeGraph: { + node_types: ['n8n-nodes-base.merge'], + node_connections: [], + nodes: { + '0': { + id: 'b468b603-3e59-4515-b555-90cfebd64d47', + type: 'n8n-nodes-base.merge', + version: 3, + position: [320, 460], + operation: 'append', + }, + }, + notes: {}, + is_pinned: false, + }, + nameIndices: { 'Merge Node V3': '0' }, + webhookNodeNames: [], + }, + }, + { + workflow: { + nodes: [ + { + parameters: { + mode: 'combineBySql', + query: 'SELECT * FROM input1 LEFT JOIN input2 ON input1.name = input2.id', + }, + id: 'b468b603-3e59-4515-b555-90cfebd64d47', + name: 'Merge Node V3', + type: 'n8n-nodes-base.merge', + typeVersion: 3, + position: [320, 460], + }, + ], + connections: {}, + pinData: {}, + } as Partial, + isCloudDeployment: true, + expected: { + nodeGraph: { + node_types: ['n8n-nodes-base.merge'], + node_connections: [], + nodes: { + '0': { + id: 'b468b603-3e59-4515-b555-90cfebd64d47', + type: 'n8n-nodes-base.merge', + version: 3, + position: [320, 460], + operation: 'combineBySql', + sql: 'SELECT * FROM input1 LEFT JOIN input2 ON input1.name = input2.id', + }, + }, + notes: {}, + is_pinned: false, + }, + nameIndices: { 'Merge Node V3': '0' }, + webhookNodeNames: [], + }, + }, + ])('should return graph with merge v3 node', ({ workflow, expected, isCloudDeployment }) => { + expect(generateNodesGraph(workflow, nodeTypes, { isCloudDeployment })).toEqual(expected); + }); + test('should return graph with http v1 node', () => { const workflow: Partial = { nodes: [