sitespeed.io/lib/plugins/analysisstorer/index.js

81 lines
1.9 KiB
JavaScript

import { SitespeedioPlugin } from '@sitespeed.io/plugin';
function shouldIgnoreMessage(message) {
return [
'url',
'browsertime.navigationScripts',
'error',
'sitespeedio.summarize',
'sitespeedio.prepareToRender',
'sitespeedio.render',
'html.finished',
'axe.setup',
'browsertime.har',
'browsertime.config',
'browsertime.setup',
'browsertime.scripts',
'browsertime.asyncscripts',
'sitespeedio.setup',
'webpagetest.har',
'webpagetest.setup',
'aggregateassets.summary',
'slowestassets.summary',
'largestassets.summary',
'budget.addMessageType',
'html.css',
'html.pug',
's3.finished',
'scp.finished',
'gcs.finished',
'ftp.finished',
'graphite.setup',
'influxdb.setup',
'grafana.setup',
'sustainable.setup',
'scp.setup'
].includes(message.type);
}
export default class AnalysisstorerPlugin extends SitespeedioPlugin {
constructor(options, context, queue) {
super({ name: 'analysisstorer', options, context, queue });
}
open(context) {
this.storageManager = context.storageManager;
this.alias = {};
}
processMessage(message) {
if (shouldIgnoreMessage(message)) {
return;
}
if (message.type === 'browsertime.alias') {
this.alias[message.url] = message.data;
return;
}
const jsonData = JSON.stringify(message.data);
let fileName = message.type + '.json';
if (message.url) {
if (Number.isInteger(message.iteration)) {
fileName = message.type + '-' + message.iteration + '.json';
}
return this.storageManager.writeDataForUrl(
jsonData,
fileName,
message.url,
undefined,
this.alias[message.url]
);
} else {
if (message.group) {
fileName = message.type + '-' + message.group + '.json';
}
return this.storageManager.writeData(jsonData, fileName);
}
}
}