whistle.data-checker
Version:
data checker for testing
79 lines (72 loc) • 2.58 kB
JavaScript
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 = {};
};