From 2f659a164b2deb1553b6c824a5746b79068d3c62 Mon Sep 17 00:00:00 2001 From: Jakub Klena Date: Fri, 24 May 2024 01:19:34 +0200 Subject: [PATCH 1/4] Slack connector component --- flow/slack_connector.js | 112 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 flow/slack_connector.js diff --git a/flow/slack_connector.js b/flow/slack_connector.js new file mode 100644 index 0000000..b0be352 --- /dev/null +++ b/flow/slack_connector.js @@ -0,0 +1,112 @@ +exports.id = 'slack_connector'; +exports.title = 'Slack_Connector'; +exports.version = '1.0.0'; +exports.group = 'Worksys'; +exports.color = '#888600'; +exports.input = 1; +exports.output = 1; +exports.click = false; +exports.author = 'Jakub Klena'; +exports.icon = 'sign-out'; +exports.options = { slack_channel: "C071KN2Q8SK", bot_name: "Flow DEMO", bot_icon: ":totaljs:" }; +// Slack channel - where to post the messages, can be name like "backend-alerts" +// Bot Name - Name of the "user" that will post these messages, it should be based on which server it is running on. +// Bot Icon - We can use any slack icon (even custom ones uploaded by us) as the "user" profile picture + +exports.html = `
+
+
+
Slack Channel
+
+
+
+
+
Bot Name
+
+
+
Bot Icon
+
+
+
`; + +exports.readme = `Sends any string received on input to Slack Channel.`; + +var log4js = require("log4js"); +var path = require('path'); + +log4js.configure({ + appenders: { + errLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../", 'err.txt') }, + monitorLogs: { type: 'file', compress:true, daysToKeep: 2, maxLogSize: 1048576, backups: 1, keepFileExt: true, filename: path.join(__dirname + "/../", 'monitor.txt') }, + console: { type: 'console' } + }, + categories: { + errLogs: { appenders: ['console', 'errLogs'], level: 'error' }, + monitorLogs: { appenders: ['console', 'monitorLogs'], level: 'trace' }, + //another: { appenders: ['console'], level: 'trace' }, + default: { appenders: ['console'], level: 'trace' } + } +}); + +const errLogger = log4js.getLogger("errLogs"); +const logger = log4js.getLogger(); +const monitor = log4js.getLogger("monitorLogs"); + +exports.install = function(instance) { + process.on('uncaughtException', function (err) { + errLogger.error('uncaughtException:', err.message); + errLogger.error(err.stack); + instance.error(err); + }); + + instance.on('data', function(data) { + let str = String(data); // Ensuring data get converted to string + let message = `{ + channel: ${instance.options.slack_channel}, + username: ${instance.options.bot_name}, + icon_emoji: ${instance.options.bot_icon}, + text: ${str} + }`; + let headers = { + 'Content-type': `application/json`, + 'Authorization': `Bearer xoxb-7060441089557-7144902656932-7IU6yMlvscrNtm5KrZxbm7Tf` + }; + + if (F.is4) { + let opt = { + 'method': 'post', + 'url': 'https://slack.com/api/chat.postMessage', + 'headers': { + 'Content-type': `application/json`, + 'Authorization': `Bearer xoxb-7060441089557-7144902656932-7IU6yMlvscrNtm5KrZxbm7Tf` + }, + 'cookies': null, + 'body': JSON.stringify(message), + 'type': 'json', + 'callback': function(err, response) { + if (response && !err) { + var msg = { data: response.body, status: response.status, headers: response.headers, host: response.host, cookies: response.cookies }; + instance.send2(msg); + } else if (err) + errLogger.error('Slack post failed - err:', err, '\n - response was:', response); + instance.error(err, response); + } + }; + REQUEST(opt); + + } else { + + U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], JSON.stringify(message), function(err, data, status, headers, host) { + console.log("err: ", err); + console.log("resp: ", response); + if (response && !err) { + response.data = { data: data, status: status, headers: headers, host: host }; + instance.send2(response); + } else if (err) { + errLogger.error('Slack post failed - err:', err, '\n - response was:', response); + instance.error(err, response); + } + }, null, headers); + } + }); +} From 9e2ab3ccead41e3560902922f824d0e9e1664239 Mon Sep 17 00:00:00 2001 From: Jakub Klena Date: Fri, 24 May 2024 01:24:08 +0200 Subject: [PATCH 2/4] api key fix --- flow/slack_connector.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/flow/slack_connector.js b/flow/slack_connector.js index b0be352..ba8638a 100644 --- a/flow/slack_connector.js +++ b/flow/slack_connector.js @@ -8,7 +8,7 @@ exports.output = 1; exports.click = false; exports.author = 'Jakub Klena'; exports.icon = 'sign-out'; -exports.options = { slack_channel: "C071KN2Q8SK", bot_name: "Flow DEMO", bot_icon: ":totaljs:" }; +exports.options = { slack_channel: "C071KN2Q8SK", api_key: "", bot_name: "Flow DEMO", bot_icon: ":totaljs:" }; // Slack channel - where to post the messages, can be name like "backend-alerts" // Bot Name - Name of the "user" that will post these messages, it should be based on which server it is running on. // Bot Icon - We can use any slack icon (even custom ones uploaded by us) as the "user" profile picture @@ -19,6 +19,11 @@ exports.html = `
Slack Channel
+
+
+
API Key:
+
+
Bot Name
@@ -69,17 +74,14 @@ exports.install = function(instance) { }`; let headers = { 'Content-type': `application/json`, - 'Authorization': `Bearer xoxb-7060441089557-7144902656932-7IU6yMlvscrNtm5KrZxbm7Tf` + 'Authorization': `Bearer ${instance.options.api_key}` }; if (F.is4) { let opt = { 'method': 'post', 'url': 'https://slack.com/api/chat.postMessage', - 'headers': { - 'Content-type': `application/json`, - 'Authorization': `Bearer xoxb-7060441089557-7144902656932-7IU6yMlvscrNtm5KrZxbm7Tf` - }, + 'headers': headers, 'cookies': null, 'body': JSON.stringify(message), 'type': 'json', From 6d468acd6f308bd9485b39c5ebaaff905b4109c8 Mon Sep 17 00:00:00 2001 From: Jakub Klena Date: Fri, 24 May 2024 08:42:21 +0200 Subject: [PATCH 3/4] proper last version --- flow/slack_connector.js | 114 ++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 50 deletions(-) diff --git a/flow/slack_connector.js b/flow/slack_connector.js index ba8638a..6561217 100644 --- a/flow/slack_connector.js +++ b/flow/slack_connector.js @@ -58,57 +58,71 @@ const logger = log4js.getLogger(); const monitor = log4js.getLogger("monitorLogs"); exports.install = function(instance) { - process.on('uncaughtException', function (err) { - errLogger.error('uncaughtException:', err.message); - errLogger.error(err.stack); - instance.error(err); - }); + var can = false; - instance.on('data', function(data) { - let str = String(data); // Ensuring data get converted to string - let message = `{ - channel: ${instance.options.slack_channel}, - username: ${instance.options.bot_name}, - icon_emoji: ${instance.options.bot_icon}, - text: ${str} - }`; - let headers = { - 'Content-type': `application/json`, - 'Authorization': `Bearer ${instance.options.api_key}` + process.on('uncaughtException', function (err) { + errLogger.error('uncaughtException:', err.message); + errLogger.error(err.stack); + instance.error(err); + }); + + instance.on('data', function(data) { + if (!can) return; + + let str = String(data.data); // Ensuring data get converted to string + let message = { + 'channel': instance.options.slack_channel, + 'username': instance.options.bot_name, + 'icon_emoji': instance.options.bot_icon, + 'text': str + }; + let headers = { + 'Content-type': `application/json`, + 'Authorization': `Bearer ${instance.options.api_key}` + }; + + if (F.is4) { + instance.send2("is F4"); + let opt = { + 'method': 'post', + 'url': 'https://slack.com/api/chat.postMessage', + 'headers': headers, + 'body': JSON.stringify(message), + 'type': 'json', + 'callback': function(err, response) { + if (response && !err) { + var msg = { data: response.body, status: response.status, headers: response.headers, host: response.host, cookies: response.cookies }; + instance.send2(msg); + } else if (err) { + errLogger.error('Slack post failed - err:', err, '\n - response was:', response); + instance.error(err, response); + } + } + }; + instance.send2(opt); + REQUEST(opt); + + } else { + instance.send2("is NOT F4"); + + U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], message, function(err, data, status, headers, host) { + if (response && !err) { + response.data = { data: data, status: status, headers: headers, host: host }; + instance.send2(response); + } else if (err) { + errLogger.error('Slack post failed - err:', err, '\n - response was:', response); + instance.error(err, response); + } + }, null, headers); + } + }); + + instance.reconfigure = function() { + var options = instance.options; + can = options.slack_channel && options.bot_name && options.bot_icon && options.api_key ? true : false; + instance.status(can ? '' : 'Not configured', can ? undefined : 'red'); }; - if (F.is4) { - let opt = { - 'method': 'post', - 'url': 'https://slack.com/api/chat.postMessage', - 'headers': headers, - 'cookies': null, - 'body': JSON.stringify(message), - 'type': 'json', - 'callback': function(err, response) { - if (response && !err) { - var msg = { data: response.body, status: response.status, headers: response.headers, host: response.host, cookies: response.cookies }; - instance.send2(msg); - } else if (err) - errLogger.error('Slack post failed - err:', err, '\n - response was:', response); - instance.error(err, response); - } - }; - REQUEST(opt); - - } else { - - U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], JSON.stringify(message), function(err, data, status, headers, host) { - console.log("err: ", err); - console.log("resp: ", response); - if (response && !err) { - response.data = { data: data, status: status, headers: headers, host: host }; - instance.send2(response); - } else if (err) { - errLogger.error('Slack post failed - err:', err, '\n - response was:', response); - instance.error(err, response); - } - }, null, headers); - } - }); + instance.on('options', instance.reconfigure); + instance.reconfigure(); } From 1b7aae45905c624a68280c1e6695bc236fc07815 Mon Sep 17 00:00:00 2001 From: Jakub Klena Date: Fri, 24 May 2024 08:44:15 +0200 Subject: [PATCH 4/4] removing some debug msgs --- flow/slack_connector.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/flow/slack_connector.js b/flow/slack_connector.js index 6561217..8c073a6 100644 --- a/flow/slack_connector.js +++ b/flow/slack_connector.js @@ -82,7 +82,6 @@ exports.install = function(instance) { }; if (F.is4) { - instance.send2("is F4"); let opt = { 'method': 'post', 'url': 'https://slack.com/api/chat.postMessage', @@ -99,13 +98,10 @@ exports.install = function(instance) { } } }; - instance.send2(opt); REQUEST(opt); } else { - instance.send2("is NOT F4"); - - U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], message, function(err, data, status, headers, host) { + U.request('https://slack.com/api/chat.postMessage', ['json', 'post'], JSON.stringify(message), function(err, data, status, headers, host) { if (response && !err) { response.data = { data: data, status: status, headers: headers, host: host }; instance.send2(response);