@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 +1 -1
- package/processinstance-delete.js +46 -36
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-
|
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(`
|
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
|
-
|
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
|
-
|
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
|
-
|
57
|
+
let hasMoreResults = true;
|
65
58
|
|
66
|
-
|
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
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
+
};
|