From 6c4e893d686324f067f8f9fb1193d3c61b5eb5dd Mon Sep 17 00:00:00 2001 From: bill bittner Date: Wed, 13 Sep 2017 15:06:45 -0700 Subject: [PATCH 01/11] fixed typo in db config vars --- config/custom-environment-variables.json | 4 ++-- config/default.json | 6 +++--- models/index.js | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/config/custom-environment-variables.json b/config/custom-environment-variables.json index 8d534311..dd32d682 100644 --- a/config/custom-environment-variables.json +++ b/config/custom-environment-variables.json @@ -3,7 +3,7 @@ "LbryClaimAddress": "LBRY_CLAIM_ADDRESS" }, "Database": { - "username": "MYSQL_USERNAME", - "password": "MYSQL_PASSWORD" + "Username": "MYSQL_USERNAME", + "Password": "MYSQL_PASSWORD" } } \ No newline at end of file diff --git a/config/default.json b/config/default.json index 85515097..cdab2d23 100644 --- a/config/default.json +++ b/config/default.json @@ -6,9 +6,9 @@ "GoogleId": "none" }, "Database": { - "database": "lbry", - "username": "none", - "password": "none" + "Database": "lbry", + "Username": "none", + "Password": "none" }, "Logging": { "LogLevel": "none" diff --git a/models/index.js b/models/index.js index 0d670107..96a4d288 100644 --- a/models/index.js +++ b/models/index.js @@ -6,9 +6,9 @@ const config = require('config'); const db = {}; const logger = require('winston'); -const database = config.get('Database.database'); -const username = config.get('Database.username'); -const password = config.get('Database.password'); +const database = config.get('Database.Database'); +const username = config.get('Database.Username'); +const password = config.get('Database.Password'); const sequelize = new Sequelize(database, username, password, { host : 'localhost', dialect: 'mysql', -- 2.45.2 From 915f55c0fb1c994117a77d71c22b85db0098c1be Mon Sep 17 00:00:00 2001 From: bill bittner Date: Wed, 13 Sep 2017 15:41:52 -0700 Subject: [PATCH 02/11] added winston-slack-webhook npm package --- config/custom-environment-variables.json | 3 +++ config/{loggerSetup.js => loggerConfig.js} | 4 ++++ config/slackLoggerConfig.js | 26 ++++++++++++++++++++++ package.json | 3 ++- speech.js | 5 +++-- 5 files changed, 38 insertions(+), 3 deletions(-) rename config/{loggerSetup.js => loggerConfig.js} (84%) create mode 100644 config/slackLoggerConfig.js diff --git a/config/custom-environment-variables.json b/config/custom-environment-variables.json index dd32d682..2ee10c42 100644 --- a/config/custom-environment-variables.json +++ b/config/custom-environment-variables.json @@ -5,5 +5,8 @@ "Database": { "Username": "MYSQL_USERNAME", "Password": "MYSQL_PASSWORD" + }, + "Logging": { + "SlackWebHook": "SLACK_WEB_HOOK" } } \ No newline at end of file diff --git a/config/loggerSetup.js b/config/loggerConfig.js similarity index 84% rename from config/loggerSetup.js rename to config/loggerConfig.js index ffd4c970..4efbbb02 100644 --- a/config/loggerSetup.js +++ b/config/loggerConfig.js @@ -12,6 +12,10 @@ module.exports = (winston, logLevel) => { ], }); + // winston.on('error', (err) => { + // console.log('unhandled exception in winston >> ', err); + // }); + winston.error('Level 0'); winston.warn('Level 1'); winston.info('Level 2'); diff --git a/config/slackLoggerConfig.js b/config/slackLoggerConfig.js new file mode 100644 index 00000000..3e5c615b --- /dev/null +++ b/config/slackLoggerConfig.js @@ -0,0 +1,26 @@ +const config = require('config'); +const SLACK_WEB_HOOK = config.get('Logging.SlackWebHook'); + +const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook; + +module.exports = (winston) => { + // add a transport for errors + winston.add(winstonSlackWebHook, { + name : 'slack-errors-transport', + level : 'error', + webhookUrl: SLACK_WEB_HOOK, + channel : '#speech-errors', + username : 'errorBot', + iconEmoji : ':face_with_head_bandage:', + }); + winston.add(winstonSlackWebHook, { + name : 'slack-info-transport', + level : 'info', + webhookUrl: SLACK_WEB_HOOK, + channel : '#speech-logs', + username : 'infoBot', + iconEmoji : ':nerd_face:', + }); + // send test message + winston.error('Testing slack logging... slack logging is online.'); +}; diff --git a/package.json b/package.json index 06a7de6c..ba075575 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,8 @@ "socket.io": "^2.0.1", "socketio-file-upload": "^0.6.0", "universal-analytics": "^0.4.13", - "winston": "^2.3.1" + "winston": "^2.3.1", + "winston-slack-webhook": "^0.1.5" }, "devDependencies": { "eslint": "3.19.0", diff --git a/speech.js b/speech.js index 259d0837..290de4e0 100644 --- a/speech.js +++ b/speech.js @@ -14,7 +14,8 @@ const db = require('./models'); // require our models for syncing // configure logging const logLevel = config.get('Logging.LogLevel'); -require('./config/loggerSetup.js')(logger, logLevel); +require('./config/loggerConfig.js')(logger, logLevel); +require('./config/slackLoggerConfig.js')(logger); // trust the proxy to get ip address for us app.enable('trust proxy'); @@ -154,5 +155,5 @@ db.sequelize }); }) .catch((error) => { - logger.error('Startup Error >>', error); + logger.error('Startup Error', error); }); -- 2.45.2 From ebff2cf62b6cfdddd57cd44448903a88d8d4df77 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Wed, 13 Sep 2017 15:59:29 -0700 Subject: [PATCH 03/11] added error message to logger.error --- controllers/statsController.js | 6 +++--- helpers/errorHandlers.js | 6 ++---- helpers/lbryApi.js | 2 +- speech.js | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/controllers/statsController.js b/controllers/statsController.js index 915c9d81..3ee05e77 100644 --- a/controllers/statsController.js +++ b/controllers/statsController.js @@ -35,7 +35,7 @@ module.exports = { }); }) .catch(error => { - logger.error('Sequelize error', error); + logger.error('Sequelize error >>', error); }); }, sendGoogleAnalytics (action, headers, ip, originalUrl) { @@ -137,7 +137,7 @@ module.exports = { resolve({ records: resultHashTable, totals: { totalServe, totalPublish, totalShow, totalCount, totalSuccess, totalFailure }, percentSuccess }); }) .catch(error => { - logger.error('sequelize error', error); + logger.error('sequelize error >>', error); reject(error); }); }); @@ -161,7 +161,7 @@ module.exports = { resolve(results); }) .catch(error => { - logger.error('sequelize error', error); + logger.error('sequelize error >>', error); reject(error); }); }); diff --git a/helpers/errorHandlers.js b/helpers/errorHandlers.js index 0bf168e3..117f4529 100644 --- a/helpers/errorHandlers.js +++ b/helpers/errorHandlers.js @@ -3,7 +3,7 @@ const { postToStats } = require('../controllers/statsController.js'); module.exports = { handleRequestError (action, originalUrl, ip, error, res) { - logger.error('Request Error >>', error); + logger.error(`Request Error >> ${error.message}`, error); if (error.response) { postToStats(action, originalUrl, ip, null, null, error.response.data.error.messsage); res.status(error.response.status).send(error.response.data.error.message); @@ -19,14 +19,12 @@ module.exports = { } }, handlePublishError (error) { + logger.error(`Publish Error >> ${error.message}`, error); if (error.code === 'ECONNREFUSED') { - logger.error('Publish Error:', 'Connection refused. The daemon may not be running.'); return 'Connection refused. The daemon may not be running.'; } else if (error.response.data.error) { - logger.error('Publish Error:', error.response.data.error); return error.response.data.error.message; } else { - logger.error('Unhandled Publish Error:', error.message); return error; } }, diff --git a/helpers/lbryApi.js b/helpers/lbryApi.js index 84290053..d082358d 100644 --- a/helpers/lbryApi.js +++ b/helpers/lbryApi.js @@ -114,7 +114,7 @@ module.exports = { } }) .catch((error) => { - logger.error('Unable to retrieve daemon download directory. Restart spee.ch once the daemon is ready. Using default "/home/lbry/Downloads".', error); + logger.error('Unable to retrieve daemon download directory', error); resolve('/home/lbry/Downloads/'); }); }); diff --git a/speech.js b/speech.js index 290de4e0..21dff58c 100644 --- a/speech.js +++ b/speech.js @@ -135,7 +135,7 @@ app.set('view engine', 'handlebars'); db.sequelize .sync() // sync sequelize .then(() => { // get the download directory from the daemon - logger.info('Retrieving daemon download directory'); + logger.info('Retrieving daemon download directory...'); return getDownloadDirectory(); }) .then(hostedContentPath => { @@ -155,5 +155,5 @@ db.sequelize }); }) .catch((error) => { - logger.error('Startup Error', error); + logger.error(`Startup Error >> ${error.message}`, error); }); -- 2.45.2 From fd382fcd9f10e5f3e12d078b656fab204ffee6ab Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 09:35:58 -0700 Subject: [PATCH 04/11] updated logger.error usage format --- helpers/errorHandlers.js | 4 ++-- helpers/lbryApi.js | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/helpers/errorHandlers.js b/helpers/errorHandlers.js index 117f4529..6f2261b2 100644 --- a/helpers/errorHandlers.js +++ b/helpers/errorHandlers.js @@ -3,7 +3,7 @@ const { postToStats } = require('../controllers/statsController.js'); module.exports = { handleRequestError (action, originalUrl, ip, error, res) { - logger.error(`Request Error >> ${error.message}`, error); + logger.error('Request Error:', error); if (error.response) { postToStats(action, originalUrl, ip, null, null, error.response.data.error.messsage); res.status(error.response.status).send(error.response.data.error.message); @@ -19,7 +19,7 @@ module.exports = { } }, handlePublishError (error) { - logger.error(`Publish Error >> ${error.message}`, error); + logger.error('Publish Error:', error); if (error.code === 'ECONNREFUSED') { return 'Connection refused. The daemon may not be running.'; } else if (error.response.data.error) { diff --git a/helpers/lbryApi.js b/helpers/lbryApi.js index d082358d..3777c593 100644 --- a/helpers/lbryApi.js +++ b/helpers/lbryApi.js @@ -110,11 +110,12 @@ module.exports = { if (data.result) { resolve(data.result.download_directory); } else { - reject(new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.')); + // reject(new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.')); + return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.'); } }) - .catch((error) => { - logger.error('Unable to retrieve daemon download directory', error); + .catch(error => { + logger.error('Lbrynet Error:', error); resolve('/home/lbry/Downloads/'); }); }); -- 2.45.2 From 456c2dc831294aee635688e0051f3261a82e0105 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 10:05:39 -0700 Subject: [PATCH 05/11] logging error message --- helpers/errorHandlers.js | 9 +++------ helpers/lbryApi.js | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/helpers/errorHandlers.js b/helpers/errorHandlers.js index 6f2261b2..ae889dfa 100644 --- a/helpers/errorHandlers.js +++ b/helpers/errorHandlers.js @@ -3,23 +3,20 @@ const { postToStats } = require('../controllers/statsController.js'); module.exports = { handleRequestError (action, originalUrl, ip, error, res) { - logger.error('Request Error:', error); + logger.error('Request Error:', error.message); + postToStats(action, originalUrl, ip, null, null, error); if (error.response) { - postToStats(action, originalUrl, ip, null, null, error.response.data.error.messsage); res.status(error.response.status).send(error.response.data.error.message); } else if (error.code === 'ECONNREFUSED') { - postToStats(action, originalUrl, ip, null, null, 'Connection refused. The daemon may not be running.'); res.status(503).send('Connection refused. The daemon may not be running.'); } else if (error.message) { - postToStats(action, originalUrl, ip, null, null, error); res.status(400).send(error.message); } else { - postToStats(action, originalUrl, ip, null, null, error); res.status(400).send(error); } }, handlePublishError (error) { - logger.error('Publish Error:', error); + logger.error('Publish Error:', error.message); if (error.code === 'ECONNREFUSED') { return 'Connection refused. The daemon may not be running.'; } else if (error.response.data.error) { diff --git a/helpers/lbryApi.js b/helpers/lbryApi.js index 3777c593..6b7b3b6e 100644 --- a/helpers/lbryApi.js +++ b/helpers/lbryApi.js @@ -115,7 +115,7 @@ module.exports = { } }) .catch(error => { - logger.error('Lbrynet Error:', error); + logger.error('Lbrynet Error:', error.message); resolve('/home/lbry/Downloads/'); }); }); -- 2.45.2 From f53ca8d95821c21be6b0f059a7f71b33f98d84e3 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 11:34:13 -0700 Subject: [PATCH 06/11] update error handler to convert props to keys --- helpers/errorHandlers.js | 15 +++++++++++++-- helpers/lbryApi.js | 2 +- models/index.js | 10 +++++----- package.json | 2 +- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/helpers/errorHandlers.js b/helpers/errorHandlers.js index ae889dfa..d1ac23cc 100644 --- a/helpers/errorHandlers.js +++ b/helpers/errorHandlers.js @@ -1,9 +1,20 @@ const logger = require('winston'); const { postToStats } = require('../controllers/statsController.js'); +function useObjectPropertiesIfNoKeys (err) { + if (Object.keys(err).length === 0) { + let newErrorObject = {}; + Object.getOwnPropertyNames(err).forEach((key) => { + newErrorObject[key] = err[key]; + }); + return newErrorObject; + } + return err; +} + module.exports = { handleRequestError (action, originalUrl, ip, error, res) { - logger.error('Request Error:', error.message); + logger.error('Request Error:', useObjectPropertiesIfNoKeys(error)); postToStats(action, originalUrl, ip, null, null, error); if (error.response) { res.status(error.response.status).send(error.response.data.error.message); @@ -16,7 +27,7 @@ module.exports = { } }, handlePublishError (error) { - logger.error('Publish Error:', error.message); + logger.error('Publish Error:', useObjectPropertiesIfNoKeys(error)); if (error.code === 'ECONNREFUSED') { return 'Connection refused. The daemon may not be running.'; } else if (error.response.data.error) { diff --git a/helpers/lbryApi.js b/helpers/lbryApi.js index 6b7b3b6e..3777c593 100644 --- a/helpers/lbryApi.js +++ b/helpers/lbryApi.js @@ -115,7 +115,7 @@ module.exports = { } }) .catch(error => { - logger.error('Lbrynet Error:', error.message); + logger.error('Lbrynet Error:', error); resolve('/home/lbry/Downloads/'); }); }); diff --git a/models/index.js b/models/index.js index 96a4d288..e4e870c5 100644 --- a/models/index.js +++ b/models/index.js @@ -52,7 +52,7 @@ function getLongClaimIdFromShortClaimId (name, shortId) { .then(result => { switch (result.length) { case 0: - return reject(new Error('That is an invalid Short Claim Id')); + throw new Error('That is an invalid Short Claim Id'); default: // note results must be sorted return resolve(result[0].claimId); } @@ -179,7 +179,7 @@ db['getShortClaimIdFromLongClaimId'] = (claimId, claimName) => { .then(result => { switch (result.length) { case 0: - return reject(new Error('That is an invalid claim name')); + throw new Error('That is an invalid claim name'); default: return resolve(sortResult(result, claimId)); } @@ -198,7 +198,7 @@ db['getShortChannelIdFromLongChannelId'] = (channelName, longChannelId) => { .then(result => { switch (result.length) { case 0: - return reject(new Error('That is an invalid channel name')); + throw new Error('That is an invalid channel name'); default: return resolve(sortResult(result, longChannelId)); } @@ -238,7 +238,7 @@ db['resolveClaim'] = (name, claimId) => { case 1: return resolve(result[0]); default: - return new Error('more than one entry matches that name and claimID'); + throw new Error('more than one entry matches that name and claimID'); } }) .catch(error => { @@ -255,7 +255,7 @@ db['getClaimIdByLongChannelId'] = (channelId, claimName) => { .then(result => { switch (result.length) { case 0: - return reject(new Error('There is no such claim for that channel')); + throw new Error('There is no such claim for that channel'); default: return resolve(result[0].claimId); } diff --git a/package.json b/package.json index ba075575..22f9872b 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "socketio-file-upload": "^0.6.0", "universal-analytics": "^0.4.13", "winston": "^2.3.1", - "winston-slack-webhook": "^0.1.5" + "winston-slack-webhook": "billbitt/winston-slack-webhook" }, "devDependencies": { "eslint": "3.19.0", -- 2.45.2 From b949c75e9d7f50b03c8b3e5b7f7e1d71568a7d29 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 13:09:09 -0700 Subject: [PATCH 07/11] updated slack config --- config/development.json | 4 +++- config/production.json | 4 +++- config/slackLoggerConfig.js | 7 ++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/config/development.json b/config/development.json index e21d54ea..d6ce4369 100644 --- a/config/development.json +++ b/config/development.json @@ -9,6 +9,8 @@ "MySqlConnectionUri": "none" }, "Logging": { - "LogLevel": "silly" + "LogLevel": "silly", + "SlackErrorChannel": "staging_speech-errors", + "SlackInfoChannel": "none" } } \ No newline at end of file diff --git a/config/production.json b/config/production.json index 34d9bfca..59605b30 100644 --- a/config/production.json +++ b/config/production.json @@ -9,6 +9,8 @@ "MySqlConnectionUri": "none" }, "Logging": { - "LogLevel": "verbose" + "LogLevel": "verbose", + "SlackErrorChannel": "speech-errors", + "SlackInfoChannel": "speech-logs" } } diff --git a/config/slackLoggerConfig.js b/config/slackLoggerConfig.js index 3e5c615b..f64c8c99 100644 --- a/config/slackLoggerConfig.js +++ b/config/slackLoggerConfig.js @@ -1,6 +1,7 @@ const config = require('config'); const SLACK_WEB_HOOK = config.get('Logging.SlackWebHook'); - +const SLACK_ERROR_CHANNEL = config.get('Logging.SlackErrorChannel'); +const SLACK_INFO_CHANNEL = config.get('Logging.SlackLogsChannel'); const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook; module.exports = (winston) => { @@ -9,7 +10,7 @@ module.exports = (winston) => { name : 'slack-errors-transport', level : 'error', webhookUrl: SLACK_WEB_HOOK, - channel : '#speech-errors', + channel : SLACK_ERROR_CHANNEL, username : 'errorBot', iconEmoji : ':face_with_head_bandage:', }); @@ -17,7 +18,7 @@ module.exports = (winston) => { name : 'slack-info-transport', level : 'info', webhookUrl: SLACK_WEB_HOOK, - channel : '#speech-logs', + channel : SLACK_INFO_CHANNEL, username : 'infoBot', iconEmoji : ':nerd_face:', }); -- 2.45.2 From cfe608c9ce76c652a190ad3b599cb88368661d61 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 13:13:26 -0700 Subject: [PATCH 08/11] added # to channels --- config/development.json | 2 +- config/production.json | 4 ++-- config/slackLoggerConfig.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/development.json b/config/development.json index d6ce4369..839e5f35 100644 --- a/config/development.json +++ b/config/development.json @@ -10,7 +10,7 @@ }, "Logging": { "LogLevel": "silly", - "SlackErrorChannel": "staging_speech-errors", + "SlackErrorChannel": "#staging_speech-errors", "SlackInfoChannel": "none" } } \ No newline at end of file diff --git a/config/production.json b/config/production.json index 59605b30..caa0b328 100644 --- a/config/production.json +++ b/config/production.json @@ -10,7 +10,7 @@ }, "Logging": { "LogLevel": "verbose", - "SlackErrorChannel": "speech-errors", - "SlackInfoChannel": "speech-logs" + "SlackErrorChannel": "#speech-errors", + "SlackInfoChannel": "#speech-logs" } } diff --git a/config/slackLoggerConfig.js b/config/slackLoggerConfig.js index f64c8c99..557b8778 100644 --- a/config/slackLoggerConfig.js +++ b/config/slackLoggerConfig.js @@ -1,7 +1,7 @@ const config = require('config'); const SLACK_WEB_HOOK = config.get('Logging.SlackWebHook'); const SLACK_ERROR_CHANNEL = config.get('Logging.SlackErrorChannel'); -const SLACK_INFO_CHANNEL = config.get('Logging.SlackLogsChannel'); +const SLACK_INFO_CHANNEL = config.get('Logging.SlackInfoChannel'); const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook; module.exports = (winston) => { -- 2.45.2 From 720de3ac6607a726cda2025f34665b72764ecbb4 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 13:22:21 -0700 Subject: [PATCH 09/11] changed logger.info to debug for file serving --- helpers/serveHelpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/serveHelpers.js b/helpers/serveHelpers.js index b270865f..d4e7cff8 100644 --- a/helpers/serveHelpers.js +++ b/helpers/serveHelpers.js @@ -11,7 +11,7 @@ function createOpenGraphInfo ({ fileType, claimId, name, fileName, fileExt }) { module.exports = { serveFile ({ fileName, fileType, filePath }, res) { - logger.info(`serving file ${fileName}`); + logger.debug(`serving file ${fileName}`); // set default options let options = { headers: { -- 2.45.2 From ffbb9cded4647d544d5fdf47eda98c708933d3c6 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 13:27:51 -0700 Subject: [PATCH 10/11] changed debug to verbose for serving log --- helpers/serveHelpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/serveHelpers.js b/helpers/serveHelpers.js index d4e7cff8..d5dbdaf1 100644 --- a/helpers/serveHelpers.js +++ b/helpers/serveHelpers.js @@ -11,7 +11,7 @@ function createOpenGraphInfo ({ fileType, claimId, name, fileName, fileExt }) { module.exports = { serveFile ({ fileName, fileType, filePath }, res) { - logger.debug(`serving file ${fileName}`); + logger.verbose(`serving file ${fileName}`); // set default options let options = { headers: { -- 2.45.2 From 283338b719385b8dfaddba450b5a3a5ca70dca26 Mon Sep 17 00:00:00 2001 From: bill bittner Date: Thu, 14 Sep 2017 16:17:49 -0700 Subject: [PATCH 11/11] changed bot name --- config/slackLoggerConfig.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/slackLoggerConfig.js b/config/slackLoggerConfig.js index 557b8778..5f49e001 100644 --- a/config/slackLoggerConfig.js +++ b/config/slackLoggerConfig.js @@ -11,7 +11,7 @@ module.exports = (winston) => { level : 'error', webhookUrl: SLACK_WEB_HOOK, channel : SLACK_ERROR_CHANNEL, - username : 'errorBot', + username : 'spee.ch', iconEmoji : ':face_with_head_bandage:', }); winston.add(winstonSlackWebHook, { @@ -19,7 +19,7 @@ module.exports = (winston) => { level : 'info', webhookUrl: SLACK_WEB_HOOK, channel : SLACK_INFO_CHANNEL, - username : 'infoBot', + username : 'spee.ch', iconEmoji : ':nerd_face:', }); // send test message -- 2.45.2