blob: 6c1678bd6f2c97373ccc48816088f3578297921a [file] [log] [blame]
'use strict';
// Method for parsing the metric string. It creates collections with
// all types of browsersOptions, subprocessesOptions,
// probes, components and sizes.
// Sizes are splitted in two because they are linked with the type of
// probe: from Chrome or from OS.
// Components are stored in a hierarchy made from maps.
function parseAllMetrics(metricNames) {
let browsersOptions = [];
let subprocessesOptions = [];
const componentsTree = new Map();
const sizeMap = new Map();
for (let element of metricNames) {
if (element.includes('process_count') ||
element.includes('dump_count')) {
continue;
}
if (element.startsWith('memory')) {
element = element.split(':');
browsersOptions.push(element[1]);
subprocessesOptions.push(element[2]);
if (sizeMap.has(element[3])) {
const array = sizeMap.get(element[3]);
const sizeElem = element[element.length - 1];
if (array.indexOf(sizeElem) === -1) {
array.push(element[element.length - 1]);
sizeMap.set(element[3], array);
}
} else {
sizeMap.set(element[3], [element[element.length - 1]]);
}
let map = componentsTree;
for (let i = 3; i < element.length - 1; i++) {
if (!map.has(element[i])) {
const newMap = new Map();
map.set(element[i], newMap);
map = newMap;
} else {
map = map.get(element[i]);
}
}
}
}
browsersOptions = _.uniq(browsersOptions);
subprocessesOptions = _.uniq(subprocessesOptions);
return {
browsers: browsersOptions,
subprocesses: subprocessesOptions,
components: componentsTree,
sizes: sizeMap,
names: metricNames
};
}