t-comm
Version:
专业、稳定、纯粹的工具库
96 lines (91 loc) • 3.1 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var number_number = require('../../number/number.js');
var SORT_KEY = 'PageUv';
function formatNum(num) {
if (typeof num !== 'number') {
return num;
}
return +num.toFixed(2);
}
/**
* 解析汇总数据
* @ignore
* @param {object} options 配置
* @param {Array<object>} options.data 汇总数据
* @param {object} options.extraDataMap 额外数据Map,键为 ProjectId
* @param {Array<number>} options.ignoreProjectIdList 忽略的projectIdList
* @param {Array<string>} options.sortKeyList 排序key列表
* @returns {Array<object>} 处理后的数据
* @example
*
* const result = parseSummaryScore({
* data
* })
* // 结果如下:
* [
* {
* ProjectName: { name: 'ProjectName', value: '脚手架' },
* PagePv: { name: 'PagePv', value: 544343 },
* PageUv: { name: 'PageUv', value: 225275 },
* Score: { name: 'Score', value: 90 },
* PageDuration: { name: 'PageDuration', value: 2894.08 },
* PageError: { name: 'PageError', value: 627 },
* PageErrorRatio: { name: 'PageErrorRatio', value: 0.12 },
* ApiNum: { name: 'ApiNum', value: 2506167 },
* ApiFail: { name: 'ApiFail', value: 3468 },
* ApiFailRatio: { name: 'ApiFailRatio', value: 0.14 },
* ApiDuration: { name: 'ApiDuration', value: 337.67 },
* StaticNum: { name: 'StaticNum', value: 9857894 },
* StaticFail: { name: 'StaticFail', value: 1174 },
* StaticFailRatio: { name: 'StaticFailRatio', value: 0.01 },
* StaticDuration: { name: 'StaticDuration', value: 154.5 },
* },
* {
* ProjectName: { name: 'ProjectName', value: '社区' },
* // ...
* },
* ]
*/
function parseSummaryScore(_a) {
var data = _a.data,
_b = _a.extraDataMap,
extraDataMap = _b === void 0 ? {} : _b,
_c = _a.ignoreProjectIdList,
ignoreProjectIdList = _c === void 0 ? [] : _c,
_d = _a.sortKeyList,
sortKeyList = _d === void 0 ? [] : _d;
var res = data.filter(function (item) {
return !ignoreProjectIdList.includes(+item.ProjectId);
}).sort(function (a, b) {
return +b[SORT_KEY] - +a[SORT_KEY];
}).map(function (item) {
var temp = {};
var projectId = item.ProjectId;
var list = Object.keys(item).map(function (iKey) {
return {
name: iKey,
value: formatNum(item[iKey])
};
}).concat([{
name: 'ApiFailRatio',
value: number_number.getPartRatio(item.ApiNum, item.ApiFail)
}, {
name: 'StaticFailRatio',
value: number_number.getPartRatio(item.StaticNum, item.StaticFail)
}, {
name: 'PageErrorRatio',
value: number_number.getPartRatio(item.PagePv, item.PageError)
}]).concat(extraDataMap[projectId] || []).filter(function (item) {
return sortKeyList.includes(item.name);
}).sort(function (a, b) {
return sortKeyList.indexOf(a.name) - sortKeyList.indexOf(b.name);
});
list.forEach(function (item) {
temp[item.name] = item;
});
return temp;
});
return res;
}
exports.parseSummaryScore = parseSummaryScore;