UNPKG

whistle.data-checker

Version:
79 lines (72 loc) 2.58 kB
const dayjs = require('dayjs'); const util = require('./util'); let reqIdList = []; let reqData = {}; const MAX_BUF_SIZE = 600; const MIN_BUF_SIZE = 500; const COUNT = 50; const updateStatus = (req, serverName) => { /** * 获取 request body 需要 req.getSession 回调函数来实现,且是异步 * 如果直接 set 到 item 会导致部分获取不到 * req.getSession 获取完整的抓包数据,要等待响应完成 * req.getReqSession 获取完整的抓包数据,要等待响应完成 */ // 获取抓包数据,不需要等待响应完成 req.getReqSession(session => { if (!session) { return; } const reqId = util.getReqId(req); let item = reqData[reqId]; if (!item) { item = { reqId, method: util.getMethod(req), url: util.getFullUrl(req), clientIp: util.getClientIp(req), ruleValue: util.getRuleValue(req), servers: {}, reqBody: session.req.body, }; // console.log('getFields(req, reqBody)=>\n', util.getFields(req, session.req.body)); const formatData = util.getFields(req, session.req.body); // 有效数据 if (formatData) { reqData[reqId] = { reqId, ...formatData }; reqIdList.push(reqId); let len = reqIdList.length; if (len > MAX_BUF_SIZE) { len -= MIN_BUF_SIZE; const removedIds = reqIdList.slice(0, len); removedIds.forEach(id => delete reqData[id]); reqIdList = reqIdList.slice(len); } } } item.servers[serverName] = 1; item.statusCode = util.getStatusCode(req); item.serverIp = util.getServerIp(req); }); }; exports.arriveStatsServer = req => updateStatus(req, 'statsServer'); // exports.arriveResStatsServer = req => updateStatus(req, 'resStatsServer'); // exports.arriveRulesServer = req => updateStatus(req, 'rulesServer'); // exports.arriveServer = req => updateStatus(req, 'server'); // exports.arriveResRulesServer = req => updateStatus(req, 'resRulesServer'); // exports.arriveTunnelRulesServer = req => updateStatus(req, 'tunnelRulesServer'); // exports.arriveTunnelServer = req => updateStatus(req, 'tunnelServer'); exports.getReqList = (startReqId, count) => { count = count > 0 ? count : COUNT; let index = 0; if (startReqId) { index = reqIdList.indexOf(startReqId) + 1; } else { index = Math.max(0, reqIdList.length - count); } const result = reqIdList.slice(index, index + count); return result.map(id => reqData[id]); }; exports.clearList = () => { reqData = {}; };