ui/infra-compare/helpers.js (80 lines of code) (raw):
export const calcPercentOf = function calcPercentOf(a, b) {
return b ? (100 * a) / b : 0;
};
export const getHashBasedId = function getHashBasedId(
suiteName,
hashFunction,
platformName,
) {
const tableSection = platformName === null ? 'header' : 'row';
const hashValue = hashFunction(`${suiteName}${platformName}`);
return `table-${tableSection}-${hashValue}`;
};
export const containsText = (string, text) => {
const words = text
.split(' ')
.map((word) => `(?=.*${word})`)
.join('');
const regex = RegExp(words, 'gi');
return regex.test(string);
};
export const convertParams = (params, value) =>
Boolean(params[value] !== undefined && parseInt(params[value], 10));
const analyzeSet = (jobs) => {
let totalDurationAvg = 0;
let failures = 0;
jobs.forEach((job) => {
totalDurationAvg += job.duration / jobs.length;
if (job.result === 'testfailed') {
failures++;
}
});
return {
totalDurationAvg,
failures,
};
};
export const getCounterMap = function getCounterMap(
jobName,
originalData,
newData,
) {
const cmap = { isEmpty: false };
if ((!originalData && !newData) || jobName.indexOf('/') === -1) {
cmap.isEmpty = true;
return cmap;
}
const platform = jobName.slice(0, jobName.indexOf('/'));
const suite = jobName.slice(jobName.indexOf('/'));
cmap.platform = jobName.slice(0, jobName.indexOf('/'));
cmap.suite = jobName.slice(jobName.indexOf('/') + 1);
if (suite.indexOf('-') === -1) {
cmap.platform = `${platform.slice(platform.indexOf('-') + 1)}${suite}`;
cmap.suite = platform.slice(0, platform.indexOf('-'));
} else {
cmap.platform = `${platform.slice(platform.indexOf('-') + 1)}${suite.slice(
0,
suite.indexOf('-'),
)}`;
cmap.suite = suite.slice(suite.indexOf('-') + 1);
}
if (originalData) {
const orig = analyzeSet(originalData);
cmap.originalValue = Math.round(orig.totalDurationAvg);
cmap.originalFailures = orig.failures;
cmap.originalDataPoints = originalData.length;
}
if (newData) {
const newd = analyzeSet(newData);
cmap.newValue = Math.round(newd.totalDurationAvg);
cmap.newFailures = newd.failures;
cmap.newDataPoints = newData.length;
}
if (!originalData || !newData) {
return cmap; // No comparison, just display for one side.
}
cmap.delta = Math.abs(cmap.newValue - cmap.originalValue);
cmap.deltaPercentage = calcPercentOf(cmap.delta, cmap.originalValue);
cmap.isCertain = cmap.originalDataPoints > 4 && cmap.newDataPoints > 4;
return cmap;
};