Skip to content

Commit dedd574

Browse files
committed
add workflow auto cleanup
1 parent 45e03fb commit dedd574

4 files changed

Lines changed: 39 additions & 15 deletions

File tree

OpenFlowNodeRED/src/Config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class Config {
3838

3939
Config.flow_refresh_interval = parseInt(Config.getEnv("flow_refresh_interval", "60000"));
4040
Config.flow_refresh_initial_interval = parseInt(Config.getEnv("flow_refresh_initial_interval", "60000"));
41+
Config.workflow_node_auto_cleanup = Config.parseBoolean(Config.getEnv("workflow_node_auto_cleanup", "true"));
4142

4243
Config.api_ws_url = Config.getEnv("api_ws_url", "ws://localhost:3000");
4344
Config.amqp_url = Config.getEnv("amqp_url", "amqp://localhost");
@@ -82,6 +83,7 @@ export class Config {
8283

8384
public static flow_refresh_interval: number = parseInt(Config.getEnv("flow_refresh_interval", "60000"));
8485
public static flow_refresh_initial_interval: number = parseInt(Config.getEnv("flow_refresh_initial_interval", "60000"));
86+
public static workflow_node_auto_cleanup: boolean = Config.parseBoolean(Config.getEnv("workflow_node_auto_cleanup", "true"));
8587

8688
public static api_ws_url: string = Config.getEnv("api_ws_url", "ws://localhost:3000");
8789
public static amqp_url: string = Config.getEnv("amqp_url", "amqp://localhost");

OpenFlowNodeRED/src/node-red-contrib-openflow-storage.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ export class noderedcontribopenflowstorage {
152152
private _credentials: any[] = null;
153153
private _settings: any[] = null;
154154
public async CheckUpdates() {
155+
console.log("***************************************");
156+
console.log("* CheckUpdates:: begin *");
157+
console.log("***************************************");
155158
try {
156159
let oldsettings: any[] = null;
157160
if (this._settings != null) oldsettings = JSON.parse(JSON.stringify(this._settings));
@@ -217,6 +220,9 @@ export class noderedcontribopenflowstorage {
217220
} catch (error) {
218221
this._logger.error(error);
219222
}
223+
console.log("***************************************");
224+
console.log("* CheckUpdates:: end *");
225+
console.log("***************************************");
220226
setTimeout(this.CheckUpdates.bind(this), Config.flow_refresh_interval);
221227
}
222228
public async init(settings: any): Promise<boolean> {
@@ -375,7 +381,7 @@ export class noderedcontribopenflowstorage {
375381
else { this._logger.error(error); }
376382
}
377383
}
378-
// private firstrun: boolean = true;
384+
private firstrun: boolean = true;
379385
public async _getSettings(): Promise<any> {
380386
var settings: any = null;
381387
try {
@@ -443,7 +449,10 @@ export class noderedcontribopenflowstorage {
443449
}
444450
this._settings = settings;
445451
}
446-
setTimeout(this.CheckUpdates.bind(this), Config.flow_refresh_initial_interval);
452+
if (this.firstrun) {
453+
setTimeout(this.CheckUpdates.bind(this), Config.flow_refresh_initial_interval);
454+
this.firstrun = false;
455+
}
447456
return settings;
448457
}
449458
public async _saveSettings(settings: any): Promise<void> {

OpenFlowNodeRED/src/nodered/nodes/rpa_nodes.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class rpa_detector_node {
2424
WebSocketClient.instance.events.on("onclose", (message) => {
2525
if (message == null) message = "";
2626
this.node.status({ fill: "red", shape: "dot", text: "Disconnected " + message });
27-
this.onclose(null);
27+
this.onclose(false, null);
2828
});
2929
this.connect();
3030
} catch (error) {
@@ -66,9 +66,9 @@ export class rpa_detector_node {
6666
NoderedUtil.HandleError(this, error);
6767
}
6868
}
69-
async onclose(done: any) {
70-
if (!NoderedUtil.IsNullEmpty(this.localqueue)) {
71-
await NoderedUtil.CloseQueue(WebSocketClient.instance, this.localqueue);
69+
async onclose(removed: boolean, done: any) {
70+
if (!NoderedUtil.IsNullEmpty(this.localqueue) && removed) {
71+
NoderedUtil.CloseQueue(WebSocketClient.instance, this.localqueue);
7272
this.localqueue = "";
7373
}
7474
if (done != null) done();
@@ -101,7 +101,7 @@ export class rpa_workflow_node {
101101
WebSocketClient.instance.events.on("onclose", (message) => {
102102
if (message == null) message = "";
103103
this.node.status({ fill: "red", shape: "dot", text: "Disconnected " + message });
104-
this.onclose();
104+
this.onclose(false, null);
105105
});
106106
this.connect();
107107
} catch (error) {
@@ -233,11 +233,12 @@ export class rpa_workflow_node {
233233
}
234234
}
235235
}
236-
onclose() {
237-
if (!NoderedUtil.IsNullEmpty(this.localqueue)) {
236+
async onclose(removed: boolean, done: any) {
237+
if (!NoderedUtil.IsNullEmpty(this.localqueue) && removed) {
238238
NoderedUtil.CloseQueue(WebSocketClient.instance, this.localqueue);
239239
this.localqueue = "";
240240
}
241+
if (done != null) done();
241242
}
242243
}
243244

OpenFlowNodeRED/src/nodered/nodes/workflow_nodes.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class workflow_in_node {
3232
WebSocketClient.instance.events.on("onclose", (message) => {
3333
if (message == null) message = "";
3434
this.node.status({ fill: "red", shape: "dot", text: "Disconnected " + message });
35-
this.onclose();
35+
this.onclose(false, null);
3636
});
3737
this.connect();
3838
} catch (error) {
@@ -251,11 +251,22 @@ export class workflow_in_node {
251251
}
252252
}
253253
}
254-
onclose() {
255-
if (!NoderedUtil.IsNullEmpty(this.localqueue)) {
254+
async onclose(removed: boolean, done: any) {
255+
if (!NoderedUtil.IsNullEmpty(this.localqueue) && removed) {
256256
NoderedUtil.CloseQueue(WebSocketClient.instance, this.localqueue);
257257
this.localqueue = "";
258258
}
259+
if (removed && Config.workflow_node_auto_cleanup) {
260+
let res = await NoderedUtil.Query("workflow", { "queue": this.localqueue }, null, null, 1, 0, null);
261+
if (res.length > 0) {
262+
await NoderedUtil.DeleteOne("workflow", res[0]._id, null);
263+
}
264+
res = await NoderedUtil.Query("users", { "_type": "role", "$or": [{ "workflowid": this.workflow._id }, { "name": this.localqueue + "users" }] }, null, null, 1, 0, null);
265+
if (res.length > 0) {
266+
await NoderedUtil.DeleteOne("workflow", res[0]._id, null);
267+
}
268+
}
269+
if (done != null) done();
259270
}
260271
}
261272

@@ -452,7 +463,7 @@ export class assign_workflow_node {
452463
WebSocketClient.instance.events.on("onclose", (message) => {
453464
if (message == null) message = "";
454465
this.node.status({ fill: "red", shape: "dot", text: "Disconnected " + message });
455-
this.onclose();
466+
this.onclose(false, null);
456467
});
457468
this.connect();
458469
}
@@ -598,10 +609,11 @@ export class assign_workflow_node {
598609
NoderedUtil.HandleError(this, error);
599610
}
600611
}
601-
onclose() {
602-
if (!NoderedUtil.IsNullEmpty(this.localqueue)) {
612+
async onclose(removed: boolean, done: any) {
613+
if (!NoderedUtil.IsNullEmpty(this.localqueue) && removed) {
603614
NoderedUtil.CloseQueue(WebSocketClient.instance, this.localqueue);
604615
this.localqueue = "";
605616
}
617+
if (done != null) done();
606618
}
607619
}

0 commit comments

Comments
 (0)