89 lines
2.4 KiB
JavaScript
89 lines
2.4 KiB
JavaScript
'use strict';
|
|
|
|
const path = require('path'),
|
|
set = require('lodash.set'),
|
|
reduce = require('lodash.reduce'),
|
|
HTMLBuilder = require('./htmlBuilder');
|
|
|
|
module.exports = {
|
|
name() {
|
|
return path.basename(__dirname);
|
|
},
|
|
|
|
open(context, options) {
|
|
this.HTMLBuilder = new HTMLBuilder(context.storageManager);
|
|
this.options = options;
|
|
},
|
|
|
|
processMessage(message) {
|
|
switch (message.type) {
|
|
case 'url':
|
|
{
|
|
return this.HTMLBuilder.addUrl(message.url);
|
|
}
|
|
|
|
case 'error':
|
|
{
|
|
return this.HTMLBuilder.addErrorForUrl(message.url, message.source, message.data);
|
|
}
|
|
|
|
case 'browsertime.run':
|
|
case 'browsertime.pageSummary':
|
|
case 'browsertime.har':
|
|
case 'webpagetest.run':
|
|
case 'webpagetest.pageSummary':
|
|
case 'gpsi.data':
|
|
case 'pagexray.run':
|
|
case 'pagexray.pageSummary':
|
|
case 'coach.run':
|
|
case 'coach.pageSummary':
|
|
{
|
|
return this.HTMLBuilder.addDataForUrl(message.url, message.type, message.data, message.runIndex);
|
|
}
|
|
|
|
case 'assets.aggregate':
|
|
{
|
|
const assetList = reduce(message.data, (assetList, asset) => {
|
|
assetList.push(asset);
|
|
return assetList;
|
|
}, []);
|
|
|
|
const count = 20,
|
|
fullCount = Object.keys(assetList).length,
|
|
topAssets = assetList
|
|
.sort((a, b) => b.requestCount - a.requestCount)
|
|
.splice(0, count);
|
|
return this.HTMLBuilder.addDataForSummaryPage('assets', {topAssets, count, fullCount});
|
|
}
|
|
|
|
case 'domains.summary':
|
|
{
|
|
const domainList = reduce(message.data, (domainList, domainStats) => {
|
|
domainList.push(domainStats);
|
|
return domainList;
|
|
}, []);
|
|
|
|
const count = 200,
|
|
fullCount = domainList.length,
|
|
topDomains = domainList
|
|
.sort((a, b) => b.requestCount - a.requestCount)
|
|
.splice(0, count);
|
|
return this.HTMLBuilder.addDataForSummaryPage('domains', {topDomains, count, fullCount});
|
|
}
|
|
|
|
case 'webpagetest.summary':
|
|
case 'coach.summary':
|
|
case 'pagexray.summary':
|
|
case 'browsertime.summary':
|
|
{
|
|
const data = {};
|
|
set(data, message.type, message.data);
|
|
return this.HTMLBuilder.addDataForSummaryPage('index', data);
|
|
}
|
|
}
|
|
},
|
|
close() {
|
|
return this.HTMLBuilder.renderHTML(this.options);
|
|
}
|
|
};
|