diff --git a/flow/slack_connector.js b/flow/slack_connector.js new file mode 100644 index 0000000..8c073a6 --- /dev/null +++ b/flow/slack_connector.js @@ -0,0 +1,124 @@ +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", 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 + +exports.html = `
+
+
+
Slack Channel
+
+
+
+
+
API Key:
+
+
+
+
+
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) { + var can = false; + + 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) { + 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); + } + } + }; + REQUEST(opt); + + } else { + 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); + } 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'); + }; + + instance.on('options', instance.reconfigure); + instance.reconfigure(); +}