@5minds/node-red-contrib-processcube 1.5.10-feature-79d9a9-m4k1xjd3 → 1.5.10-feature-d72bde-m4lcb64h

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.5.10-feature-79d9a9-m4k1xjd3",
3
+ "version": "1.5.10-feature-d72bde-m4lcb64h",
4
4
  "license": "MIT",
5
5
  "description": "Node-RED nodes for ProcessCube",
6
6
  "scripts": {
@@ -6,8 +6,9 @@
6
6
  name: { value: '' },
7
7
  engine: { value: '', type: 'processcube-engine-config' },
8
8
  modelid: { value: '' },
9
- time: { value: '', type: 'number' },
10
- time_type: { value: 'hours' },
9
+ duration: { value: '', type: 'number' },
10
+ time_unit: { value: 'hours' },
11
+ batch_size: { value: '100', type: 'number' },
11
12
  },
12
13
  inputs: 1,
13
14
  outputs: 1,
@@ -32,16 +33,20 @@
32
33
  <input type="text" id="node-input-modelid" />
33
34
  </div>
34
35
  <div class="form-row">
35
- <label for="node-input-time"><i class="fa fa-tag"></i> Duration</label>
36
- <input type="text" id="node-input-time" />
36
+ <label for="node-input-duration"><i class="fa fa-tag"></i> Duration</label>
37
+ <input type="text" id="node-input-duration" />
37
38
  </div>
38
39
  <div class="form-row">
39
- <label for="node-input-time_type"><i class="fa fa-sliders"></i> Time Unit</label>
40
- <select id="node-input-time_type" style="width: 70%;">
40
+ <label for="node-input-time_unit"><i class="fa fa-sliders"></i> Time Unit</label>
41
+ <select id="node-input-time_unit" style="width: 70%;">
41
42
  <option value="hours">Hours</option>
42
43
  <option value="days">Days</option>
43
44
  </select>
44
45
  </div>
46
+ <div class="form-row">
47
+ <label for="node-input-batch-size"><i class="fa fa-tag"></i> Batch Size</label>
48
+ <input type="text" id="node-input-batch_size" />
49
+ </div>
45
50
  </script>
46
51
 
47
52
  <script type="text/markdown" data-help-name="processinstance-delete">
@@ -49,12 +54,52 @@ Delete old instances of a process model in the ProcessCube.
49
54
 
50
55
  ## Inputs
51
56
 
52
- : payload.time (number): The number of given time periods.
53
- : payload.time_type ('hours' | 'days'): The type of time period to use.
57
+ : payload.duration (number): The number of given time periods.
58
+ : payload.time_unit ('hours' | 'days'): The type of time period to use.
59
+ : payload.batch_size (number): The number of instances to be deleted simultaneously. (default 100)
54
60
 
55
61
  ## Outputs
56
62
 
57
- : payload (string[]): The ids of the processinstances that were deleted.
63
+ : Explanation of the payload:
64
+
65
+ Object
66
+ {
67
+ successfulDeletions: [Array of strings],
68
+ failedDeletions: [Array of objects]
69
+ }
70
+
71
+ - successfulDeletions:
72
+ - Type: Array<String>
73
+ - Content: A list of successfully deleted process instance IDs.
74
+
75
+ - excample:
76
+ successfulDeletions: [
77
+ "instanceId1",
78
+ "instanceId2",
79
+ "instanceId3"
80
+ ]
81
+
82
+ - failedDeletions:
83
+ - Type: Array<Object>
84
+ - Content: A list of objects containing details of the failed deletions.
85
+ - Each object has the following fields:
86
+ - id: The ID of the process instance that could not be deleted.
87
+ - error: The error message or the reason for the error.
88
+
89
+ - Example of a complete output:
90
+ {
91
+ successfulDeletions: [
92
+ "instanceId1",
93
+ "instanceId2",
94
+ "instanceId3"
95
+ ],
96
+ failedDeletions: [
97
+ { id: "instanceId4", error: "Permission denied" },
98
+ { id: "instanceId5", error: "Instance not found" }
99
+ ]
100
+ }
101
+
102
+ The node processes the IDs in configurable batches (default value: 100) and inserts successfully deleted or failed instances into the arrays accordingly.
58
103
 
59
104
  ### References
60
105
 
@@ -13,13 +13,13 @@ module.exports = function (RED) {
13
13
  }
14
14
 
15
15
  let timeMultiplier;
16
- if (msg.payload.time_type) {
17
- timeMultiplier = msg.payload.time_type == 'hours' ? 1 : 24;
16
+ if (msg.payload.time_unit) {
17
+ timeMultiplier = msg.payload.time_unit == 'hours' ? 1 : 24;
18
18
  } else {
19
- timeMultiplier = config.time_type == 'hours' ? 1 : 24;
19
+ timeMultiplier = config.time_unit == 'hours' ? 1 : 24;
20
20
  }
21
21
 
22
- const timeToUse = msg.payload.time ? msg.payload.time : config.time;
22
+ const timeToUse = msg.payload.duration ? msg.payload.duration : config.duration;
23
23
  const modelId = msg.payload.processModelId
24
24
  ? msg.payload.processModelId != ''
25
25
  ? msg.payload.processModelId
@@ -28,6 +28,8 @@ module.exports = function (RED) {
28
28
  ? config.modelid
29
29
  : undefined;
30
30
 
31
+ const batchSize = config.batch_size || 100; // Konfigurierbare Batchgröße, Standardwert 100
32
+
31
33
  try {
32
34
  const result = await client.processInstances.query({
33
35
  processModelId: modelId
@@ -45,19 +47,21 @@ module.exports = function (RED) {
45
47
 
46
48
  const ids = oldTasks.map((obj) => obj.processInstanceId);
47
49
 
48
- // Änderungen: Fehler beim Löschen abfangen
49
50
  msg.payload = {
50
51
  successfulDeletions: [],
51
52
  failedDeletions: []
52
53
  };
53
54
 
54
- for (const id of ids) {
55
+ for (let i = 0; i < ids.length; i += batchSize) {
56
+ const batch = ids.slice(i, i + batchSize);
55
57
  try {
56
- await client.processInstances.deleteProcessInstances([id], true, engine.identity);
57
- msg.payload.successfulDeletions.push(id); // Erfolgreiche IDs hinzufügen
58
+ await client.processInstances.deleteProcessInstances(batch, true, engine.identity);
59
+ msg.payload.successfulDeletions.push(...batch); // Erfolgreiche IDs hinzufügen
58
60
  } catch (deleteError) {
59
- msg.payload.failedDeletions.push({ id, error: deleteError.message }); // Fehler protokollieren
60
- node.warn(`Failed to delete process instance ID: ${id}. Error: ${deleteError.message}`);
61
+ batch.forEach(id => {
62
+ msg.payload.failedDeletions.push({ id, error: deleteError.message }); // Fehler protokollieren
63
+ });
64
+ node.warn(`Failed to delete process instances in batch: ${batch.join(', ')}. Error: ${deleteError.message}`);
61
65
  }
62
66
  }
63
67
 
@@ -69,4 +73,4 @@ module.exports = function (RED) {
69
73
  }
70
74
 
71
75
  RED.nodes.registerType('processinstance-delete', ProcessInstanceDelete);
72
- };
76
+ };