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