sitespeed.io
Version:
sitespeed.io is an open-source tool for comprehensive web performance analysis, enabling you to test, monitor, and optimize your website’s speed using real browsers in various environments.
68 lines (57 loc) • 1.86 kB
JavaScript
import get from 'lodash.get';
import set from 'lodash.set';
import { pushStats, summarizeStats } from '../support/statsHelpers.js';
const queueTimeByPluginName = {},
queueTimeByMessageType = {},
processingTimeByPluginName = {},
processingTimeByMessageType = {},
messageTypes = new Set(),
pluginNames = new Set();
export function registerQueueTime(message, plugin, nanos) {
messageTypes.add(message.type);
pluginNames.add(plugin.getName());
pushStats(queueTimeByMessageType, message.type, nanos / 1_000_000);
pushStats(queueTimeByPluginName, plugin.getName(), nanos / 1_000_000);
}
export function registerProcessingTime(message, plugin, nanos) {
messageTypes.add(message.type);
pluginNames.add(plugin.getName());
pushStats(processingTimeByMessageType, message.type, nanos / 1_000_000);
pushStats(processingTimeByPluginName, plugin.getName(), nanos / 1_000_000);
}
export function generateStatistics() {
const statOptions = {
percentiles: [0, 100],
includeSum: true
};
const byPluginName = [...pluginNames].reduce((summary, pluginName) => {
set(
summary,
['queueTime', pluginName],
summarizeStats(get(queueTimeByPluginName, pluginName), statOptions)
);
set(
summary,
['processingTime', pluginName],
summarizeStats(get(processingTimeByPluginName, pluginName), statOptions)
);
return summary;
}, {});
const byMessageType = [...messageTypes].reduce((summary, messageType) => {
set(
summary,
['queueTime', messageType],
summarizeStats(get(queueTimeByMessageType, messageType), statOptions)
);
set(
summary,
['processingTime', messageType],
summarizeStats(get(processingTimeByMessageType, messageType), statOptions)
);
return summary;
}, {});
return {
byPluginName,
byMessageType
};
}