diff --git a/lib/plugins/matrix/index.js b/lib/plugins/matrix/index.js index edc2999ad..eca991411 100644 --- a/lib/plugins/matrix/index.js +++ b/lib/plugins/matrix/index.js @@ -8,15 +8,17 @@ const cliUtil = require('../../cli/util'); const send = require('./send'); function getBrowserData(data) { - return `${data.browser.name} ${data.browser.version} ${get( - data, - 'android.model', - '' - )} ${get(data, 'android.androidVersion', '')} ${get( - data, - 'android.id', - '' - )} `; + if (data && data.browser) { + return `${data.browser.name} ${data.browser.version} ${get( + data, + 'android.model', + '' + )} ${get(data, 'android.androidVersion', '')} ${get( + data, + 'android.id', + '' + )} `; + } else return ''; } module.exports = { @@ -33,6 +35,7 @@ module.exports = { throwIfMissing(options.matrix, ['accessToken', 'host', 'room'], 'matrix'); this.resultUrls = context.resultUrls; this.errorTexts = ''; + this.waitForUpload = false; }, async processMessage(message) { const options = this.matrixOptions; @@ -41,7 +44,14 @@ module.exports = { this.browserData = message.data; break; } - case 'render': { + case 'gcs.setup': + case 'ftp.setup': + case 's3.setup': { + this.waitForUpload = true; + break; + } + + case 'sitespeedio.render': { if (this.errorTexts !== '') { const room = get(options, 'rooms.error', options.room); try { @@ -98,15 +108,42 @@ module.exports = { } text += ``; } - } else { - text += `
⚠️ All (${
+ }
+ if (Object.keys(message.data.error).length > 0) {
+ const errorURLs = Object.keys(message.data.error);
+ text += `⚠️ Budget errors testing ${
+ errorURLs.length
+ } URLs
`;
+ for (let url of errorURLs) {
+ text += `❌ ${url}
`;
+ text += `${message.data.error[url]}`;
+ }
+ }
+ if (
+ Object.keys(message.data.error).length === 0 &&
+ Object.keys(message.data.failing).length === 0
+ ) {
+ text += `
🎉 All (${ message.data.working.length - } URLs passed the budget.
`; + }) URLs passed the budget. `; text += `${get(this.options, 'name', '') + ' '}${getBrowserData(this.browserData)}
`; } + if (!this.waitForUpload) { + const room = get(options, 'rooms.budget', options.room); + await send(options.host, room, options.accessToken, text); + } else { + this.budgetText = text; + } + } + break; + } + case 'gcs.finished': + case 'ftp.finished': + case 's3.finished': { + if (this.waitForUpload && options.messages.indexOf('budget') > -1) { const room = get(options, 'rooms.budget', options.room); - await send(options.host, room, options.accessToken, text); + await send(options.host, room, options.accessToken, this.budgetText); } break; }