UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

260 lines (257 loc) 7.88 kB
import { b as __awaiter, c as __generator, a as __spreadArray } from '../../tslib.es6-096fffdd.js'; import { compareTwoList, getMaxAndMinIdx } from '../../list/parse-list.mjs'; import { createCanvasTable } from '../../canvas/table.mjs'; import { getRUMPerformance } from '../../tencent-cloud/rum/performance.mjs'; import { batchSendWxRobotBase64Img } from '../../wecom-robot/batch-send.mjs'; import CountryMap from './country-map.mjs'; import '../../number/number.mjs'; import '../../list/list.mjs'; import '../../canvas/get-canvas.mjs'; import '../../tencent-cloud/base/base.mjs'; import 'axios'; import '../../wecom-robot/base.mjs'; import '../../wecom-robot/helper.mjs'; import '../../wecom-robot/send-img.mjs'; import '../../node-img/img.mjs'; // const DEFAULT_REGION = '其他'; var CHINA_REGION = '中国'; var ONE_DAY_SECONDS = 24 * 60 * 60; var SORT_KEY = 'allCount'; var TABLE_HEADER_MAP = { region: '地区', allCount: '请求数', firstScreen: '首屏耗时', dns: 'DNS查询', tcp: 'TCP连接', ssl: 'SSL建连', ttfb: '请求响应', contentDownload: '内容传输', domParse: '内容解析', resourceDownload: '资源加载' // appLaunch: '', // scriptEvaluate: '', // pageRoute: '', // firstPaint: '', // engineInit: '', // bundleLoad: '', // firstScreenRequest: '', // loadEnd: '', // durationCount000Ratio: '', // durationCount500Ratio: '', // durationCount1000Ratio: '', // durationCount3000Ratio: '', // durationCount5000Ratio: '', // bucketInf: '', }; var RATIO_KEY_LIST = ['durationCount000Ratio', 'durationCount500Ratio', 'durationCount1000Ratio', 'durationCount3000Ratio', 'durationCount5000Ratio']; function isChina(region) { return !Object.values(CountryMap).includes(region); } function fixedNumber(num) { return Math.floor(num * 100) / 100; } function formatValue(value) { if (typeof value !== 'number') return value; return fixedNumber(value); } function genTableData(data) { var tableData = data.map(function (regionItem) { var temp = Object.keys(regionItem).reduce(function (ac, perfName) { var value = regionItem[perfName]; if (RATIO_KEY_LIST.includes(perfName)) { value = value * 100; } ac[perfName] = { name: perfName, value: formatValue(value) }; return ac; }, {}); return temp; }); return tableData; } function sortObj(obj, sortKeyList) { return sortKeyList.reduce(function (acc, key) { if (obj[key] !== undefined) { acc[key] = obj[key]; } return acc; }, {}); } function clusterChina(obj) { obj[CHINA_REGION] = { region: CHINA_REGION }; Object.keys(obj).forEach(function (region) { if (isChina(region)) { Object.keys(obj[region]).forEach(function (key) { if (key === 'allCount') { obj[CHINA_REGION][key] = obj[region][key] + (obj[CHINA_REGION][key] || 0); } else if (key !== 'region') { obj[CHINA_REGION][key] = obj[region][key] * obj[region].allCount + (obj[CHINA_REGION][key] || 0); } }); delete obj[region]; } }); Object.keys(obj[CHINA_REGION]).map(function (key) { if (!['allCount', 'region'].includes(key)) { obj[CHINA_REGION][key] = obj[CHINA_REGION][key] / obj[CHINA_REGION].allCount; } }); } /** * [ * { * region: '巴西', * allCount: 100, * firstScreen: 1000, * [key]: value * }, * 'xx': { * // ... * } * ] */ function parseResult(results) { var obj = {}; for (var _i = 0, results_1 = results; _i < results_1.length; _i++) { var item = results_1[_i]; (item.series || []).forEach(function (it) { var _a; var key = ((_a = it === null || it === void 0 ? void 0 : it.tags) === null || _a === void 0 ? void 0 : _a.region) || ''; if (key) { if (!obj[key]) obj[key] = { region: key }; ((it === null || it === void 0 ? void 0 : it.columns) || []).reduce(function (acc, column, columnIndex) { var _a, _b; if (TABLE_HEADER_MAP[column] !== undefined) { acc[column] = (_b = (_a = it.values) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b[columnIndex]; } return acc; }, obj[key]); } }); } clusterChina(obj); return Object.keys(obj).map(function (key) { var value = sortObj(obj[key], Object.keys(TABLE_HEADER_MAP)); return value; }).sort(function (a, b) { return b[SORT_KEY] - a[SORT_KEY]; }); // .reduce((acc,item) => {}) // return Object.keys(obj).reduce((acc, key) => { // acc[key] = sortObj(obj[key], Object.keys(TABLE_HEADER_MAP)); // return acc; // }, {}); } function getTableHeaders(keyList) { return keyList.map(function (key) { return TABLE_HEADER_MAP[key] || key; }); } function genRUMnPerfData(_a) { var secretId = _a.secretId, secretKey = _a.secretKey, id = _a.id, startTime = _a.startTime, endTime = _a.endTime, _b = _a.type, type = _b === void 0 ? 'region' : _b; return __awaiter(this, void 0, void 0, function () { var res, list, tableData; return __generator(this, function (_c) { switch (_c.label) { case 0: return [4 /*yield*/, getRUMPerformance({ secretId: secretId, secretKey: secretKey, id: id, startTime: startTime, endTime: endTime, type: type })]; case 1: res = _c.sent(); list = parseResult(res.data || []); tableData = genTableData(list); return [2 /*return*/, tableData]; } }); }); } function genRUMPerfImgAndSend(_a) { var secretId = _a.secretId, secretKey = _a.secretKey, id = _a.id, startTime = _a.startTime, endTime = _a.endTime, _b = _a.type, type = _b === void 0 ? 'region' : _b, _c = _a.title, title = _c === void 0 ? '' : _c, chatId = _a.chatId, webhookUrl = _a.webhookUrl; return __awaiter(this, void 0, void 0, function () { var data, preData, tableData, len, img; return __generator(this, function (_d) { switch (_d.label) { case 0: return [4 /*yield*/, genRUMnPerfData({ secretId: secretId, secretKey: secretKey, id: id, startTime: startTime, endTime: endTime, type: type })]; case 1: data = _d.sent(); return [4 /*yield*/, genRUMnPerfData({ secretId: secretId, secretKey: secretKey, id: id, startTime: startTime - ONE_DAY_SECONDS, endTime: endTime - ONE_DAY_SECONDS, type: type })]; case 2: preData = _d.sent(); compareTwoList(data, preData, 'region'); tableData = getMaxAndMinIdx(data); if (!tableData.length) return [2 /*return*/]; len = Object.keys(tableData[0]).length; img = ''; try { img = createCanvasTable({ data: tableData, headers: getTableHeaders(Object.keys(tableData[0])), title: title, cellWidthList: __spreadArray([95], Array.from({ length: len }).map(function () { return 65; }), true) }); } catch (err) { console.error('[genRUMPerfImgAndSend.createCanvasTable.err]', err); } if (!img || !chatId) { return [2 /*return*/]; } return [4 /*yield*/, batchSendWxRobotBase64Img({ img: img, webhookUrl: webhookUrl, chatId: chatId })]; case 3: _d.sent(); return [2 /*return*/]; } }); }); } export { genRUMPerfImgAndSend, genRUMnPerfData };