@5minds/node-red-contrib-processcube 1.6.0-process-instance-delete-hotfix-4f895f-m4wkfj6t → 1.6.0-process-instance-delete-hotfix-b862f8-m4wnxy0n

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@5minds/node-red-contrib-processcube",
3
- "version": "1.6.0-process-instance-delete-hotfix-4f895f-m4wkfj6t",
3
+ "version": "1.6.0-process-instance-delete-hotfix-b862f8-m4wnxy0n",
4
4
  "license": "MIT",
5
5
  "description": "Node-RED nodes for ProcessCube",
6
6
  "scripts": {
@@ -20,8 +20,8 @@ module.exports = function (RED) {
20
20
 
21
21
  // Gültige Werte für time_type
22
22
  const validTimeTypes = ['days', 'hours'];
23
- const timeType = msg.payload.time_type
24
- ? msg.payload.time_type.toLowerCase()
23
+ const timeType = msg.payload.time_type
24
+ ? msg.payload.time_type.toLowerCase()
25
25
  : config.time_type?.toLowerCase();
26
26
 
27
27
  // time_type validieren
@@ -29,62 +29,72 @@ module.exports = function (RED) {
29
29
  node.error(`Invalid time_type provided: ${timeType}. Allowed values are 'days' or 'hours'.`);
30
30
  return;
31
31
  }
32
-
32
+
33
33
  // Zeitmultiplikator berechnen
34
34
  const multiplier = timeType === 'hours' ? 1 : 24;
35
35
  node.log(`Time type: ${timeType}, multiplier: ${multiplier}`);
36
-
36
+
37
37
  const deletionDate = new Date(Date.now() - timeToUse * multiplier * 60 * 60 * 1000);
38
- node.log(`Errechnetes Datum: ${deletionDate}`);
38
+ node.log(`Calculated deletion date: ${deletionDate}`);
39
+
39
40
  const modelId = msg.payload.processModelId?.trim() || config.modelid?.trim();
40
-
41
41
  if (!modelId) {
42
42
  node.error('processModelId is not defined or empty.');
43
43
  return;
44
44
  }
45
45
 
46
- const batchSize = msg.payload.batch_size || config.batch_size;
46
+ // Prüfung und Festlegung von batch_size
47
+ let batchSize = msg.payload.batch_size || config.batch_size || 1000;
48
+ if (isNaN(batchSize) || batchSize <= 0 || batchSize > 1000) {
49
+ node.error(`Invalid batch_size: ${batchSize}. Must be a positive number and not exceed 1000.`);
50
+ return;
51
+ }
52
+ batchSize = Math.min(batchSize, 1000); // Sicherstellen, dass der Wert 1000 nicht überschreitet
47
53
 
48
54
  try {
49
- const result = await client.processInstances.query(
50
- {
51
- processModelId: modelId,
52
- includeXml: false,
53
- finishedBefore: deletionDate.toISOString(),
54
- state: ["finished", "error", "terminated"],
55
- }
56
- );
57
-
58
- if (result.processInstances.length === 0) {
59
- node.log(`No process instances to delete for Model-ID: ${modelId} and given Date: ${deletionDate.toISOString()}`);
60
- node.send(msg);
61
- return;
62
- }
55
+ msg.payload = { successfulDeletions: [], failedDeletions: [] };
63
56
 
64
- const ids = result.processInstances.map((obj) => obj.processInstanceId);
57
+ let hasMoreResults = true;
65
58
 
66
- msg.payload = { successfulDeletions: [], failedDeletions: [] };
59
+ while (hasMoreResults) {
60
+ const result = await client.processInstances.query(
61
+ {
62
+ processModelId: modelId,
63
+ finishedBefore: deletionDate.toISOString(),
64
+ state: ['finished', 'error', 'terminated'],
65
+ limit: batchSize,
66
+ },
67
+ { includeXml: false }
68
+ );
69
+
70
+ const processInstances = result.processInstances || [];
71
+ if (processInstances.length === 0) {
72
+ node.log(`No more process instances to delete for Model-ID: ${modelId} with Date: ${deletionDate.toISOString()}`);
73
+ hasMoreResults = false;
74
+ continue;
75
+ }
76
+
77
+ const ids = processInstances.map((obj) => obj.processInstanceId);
67
78
 
68
- for (let i = 0; i < ids.length; i += batchSize) {
69
- var batch = ids.slice(i, i + batchSize);
70
- try
71
- {
72
- await client.processInstances.deleteProcessInstances(batch, true, node.engine.identity);
73
- msg.payload.successfulDeletions.push(...batch);
74
- }
75
- catch (deleteError)
76
- {
77
- batch.forEach((id) => {msg.payload.failedDeletions.push({ id, error: deleteError.message });});
78
- node.warn(`Failed to delete process instances in batch for Model-ID: ${modelId}: ${batch.join(', ')}. Error: ${deleteError.message}`);
79
+ try {
80
+ await client.processInstances.deleteProcessInstances(ids, true);
81
+ msg.payload.successfulDeletions.push(...ids);
82
+ node.log(`Successfully deleted ${ids.length} process instances.`);
83
+ } catch (deleteError) {
84
+ var message = JSON.stringify(deleteError);
85
+ ids.forEach((id) => {
86
+ msg.payload.failedDeletions.push({ id, error: message });
87
+ });
88
+ node.warn(`Failed to delete some process instances for Model-ID: ${modelId}. Error: ${message}`);
79
89
  }
80
90
  }
81
91
 
82
92
  node.send(msg);
83
93
  } catch (queryError) {
84
- node.error(`Failed to query process instances for Model-ID: ${modelId}: ${queryError.message}`);
94
+ node.error(`Failed to query process instances for Model-ID: ${modelId}. Error: ${queryError.message}`);
85
95
  }
86
96
  });
87
97
  }
88
98
 
89
99
  RED.nodes.registerType('processinstance-delete', ProcessInstanceDelete);
90
- };
100
+ };