sitespeed.io/lib/support/queueStatistics.js

61 lines
1.8 KiB
JavaScript

'use strict';
const stats = require('./statsHelpers'),
get = require('lodash.get'),
set = require('lodash.set');
const queueTimeByPluginName = {},
queueTimeByMessageType = {},
processingTimeByPluginName = {},
processingTimeByMessageType = {},
messageTypes = new Set(),
pluginNames = new Set();
module.exports = {
registerQueueTime(message, plugin, nanos) {
messageTypes.add(message.type);
pluginNames.add(plugin.name());
stats.pushStats(queueTimeByMessageType, message.type, nanos / 1000000);
stats.pushStats(queueTimeByPluginName, plugin.name(), nanos / 1000000);
},
registerProcessingTime(message, plugin, nanos) {
messageTypes.add(message.type);
pluginNames.add(plugin.name());
stats.pushStats(processingTimeByMessageType, message.type, nanos / 1000000);
stats.pushStats(processingTimeByPluginName, plugin.name(), nanos / 1000000);
},
generateStatistics() {
const statOptions = {
percentiles: [0, 100],
includeSum: true
};
const byPluginName = Array.from(pluginNames).reduce((summary, pluginName) => {
set(summary, ['queueTime', pluginName],
stats.summarizeStats(get(queueTimeByPluginName, pluginName), statOptions));
set(summary, ['processingTime', pluginName],
stats.summarizeStats(get(processingTimeByPluginName, pluginName), statOptions));
return summary;
}, {});
const byMessageType = Array.from(messageTypes).reduce((summary, messageType) => {
set(summary, ['queueTime', messageType],
stats.summarizeStats(get(queueTimeByMessageType, messageType), statOptions));
set(summary, ['processingTime', messageType],
stats.summarizeStats(get(processingTimeByMessageType, messageType), statOptions));
return summary;
}, {});
return {
byPluginName,
byMessageType
}
}
};