52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
import isEmpty from 'lodash.isempty';
|
|
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
|
import { DomainsAggregator } from './aggregator.js';
|
|
|
|
export default class DomainsPlugin extends SitespeedioPlugin {
|
|
constructor(options, context, queue) {
|
|
super({ name: 'domains', options, context, queue });
|
|
}
|
|
|
|
open(context) {
|
|
this.make = context.messageMaker('domains').make;
|
|
// '*.requestCounts, 'domains.summary'
|
|
context.filterRegistry.registerFilterForType([], 'domains.summary');
|
|
this.browsertime = false;
|
|
this.domainsAggregator = new DomainsAggregator();
|
|
}
|
|
processMessage(message, queue) {
|
|
const make = this.make;
|
|
switch (message.type) {
|
|
case 'browsertime.setup': {
|
|
this.browsertime = true;
|
|
break;
|
|
}
|
|
|
|
case 'browsertime.har': {
|
|
this.domainsAggregator.addToAggregate(message.data, message.url);
|
|
break;
|
|
}
|
|
|
|
case 'webpagetest.har': {
|
|
// Only collect WebPageTest data if we don't run Browsertime
|
|
if (this.browsertime === false) {
|
|
this.domainsAggregator.addToAggregate(message.data, message.url);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 'sitespeedio.summarize': {
|
|
const summary = this.domainsAggregator.summarize();
|
|
if (!isEmpty(summary)) {
|
|
for (let group of Object.keys(summary.groups)) {
|
|
queue.postMessage(
|
|
make('domains.summary', summary.groups[group], { group })
|
|
);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|