From e64f56a30ec53811d0c39b7474e17674bac8e74d Mon Sep 17 00:00:00 2001 From: Ron <43244104+rons4@users.noreply.github.com> Date: Tue, 11 Aug 2020 10:07:52 +0200 Subject: [PATCH] Added feature to resolve alerts --- .../nodes-base/nodes/Signl4/Signl4.node.ts | 64 ++++++++++++++++--- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/packages/nodes-base/nodes/Signl4/Signl4.node.ts b/packages/nodes-base/nodes/Signl4/Signl4.node.ts index 29d3917cf6..057080d4da 100644 --- a/packages/nodes-base/nodes/Signl4/Signl4.node.ts +++ b/packages/nodes-base/nodes/Signl4/Signl4.node.ts @@ -67,6 +67,11 @@ export class Signl4 implements INodeType { value: 'send', description: 'Send an alert.', }, + { + name: 'Resolve', + value: 'resolve', + description: 'Resolve an alert.', + }, ], default: 'send', description: 'The operation to perform.', @@ -161,7 +166,8 @@ export class Signl4 implements INodeType { default: '', description: `If the event originates from a record in a 3rd party system, use this parameter to pass
the unique ID of that record. That ID will be communicated in outbound webhook notifications from SIGNL4,
- which is great for correlation/synchronization of that record with the alert.`, + which is great for correlation/synchronization of that record with the alert.
+ If you resolve / close an alert you must use the same External ID as in the original alert.`, }, { displayName: 'Filtering', @@ -216,9 +222,31 @@ export class Signl4 implements INodeType { name: 'title', type: 'string', default: '', + description: 'The title or subject of this alert.', }, ], }, + { + displayName: 'External ID', + name: 'externalId', + type: 'string', + default: '', + required: false, + displayOptions: { + show: { + operation: [ + 'resolve', + ], + resource: [ + 'alert', + ], + }, + }, + description: `If the event originates from a record in a 3rd party system, use this parameter to pass
+ the unique ID of that record. That ID will be communicated in outbound webhook notifications from SIGNL4,
+ which is great for correlation/synchronization of that record with the alert.
+ If you resolve / close an alert you must use the same External ID as in the original alert.`, + }, ], }; @@ -233,12 +261,13 @@ export class Signl4 implements INodeType { for (let i = 0; i < length; i++) { if (resource === 'alert') { //https://connect.signl4.com/webhook/docs/index.html + // Send alert if (operation === 'send') { const message = this.getNodeParameter('message', i) as string; const additionalFields = this.getNodeParameter('additionalFields',i) as IDataObject; const data: IDataObject = { - message, + 'message': message }; if (additionalFields.alertingScenario) { @@ -259,6 +288,7 @@ export class Signl4 implements INodeType { if (additionalFields.service) { data['X-S4-Service'] = additionalFields.service as string; } + data['X-S4-Status'] = 'new'; if (additionalFields.title) { data['title'] = additionalFields.title as string; } @@ -303,14 +333,32 @@ export class Signl4 implements INodeType { this, 'POST', '', - {}, + data, {}, endpoint, - { - formData: { - ...data, - }, - }, + {}, + ); + } + // Resolve alert + if (operation === 'resolve') { + + const data: IDataObject = {}; + + data['X-S4-ExternalID'] = this.getNodeParameter('externalId', i) as string; + data['X-S4-Status'] = 'resolved'; + + const credentials = this.getCredentials('signl4Api'); + + const endpoint = `https://connect.signl4.com/webhook/${credentials?.teamSecret}`; + + responseData = await SIGNL4ApiRequest.call( + this, + 'POST', + '', + data, + {}, + endpoint, + {}, ); } }