sitespeed.io/lib/core/queueStatistics.js

68 lines
1.8 KiB
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
};
}