yandex-tank-ammo-generator
Version:
Cartridge generation for Yandex tank
83 lines (82 loc) • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ElasticClient_1 = require("../ElasticClient");
const QueryBuilder_1 = require("../ElasticClient/QueryBuilder");
async function default_1(data) {
process.env.SEARCH_INDEX = data.index;
process.env.ELASTIC_URI = data.elastic.uri;
if (data.elastic.auth) {
process.env.ELASTIC_AUTH = data.elastic.auth;
}
else {
process.env.ELASTIC_AUTH = '';
}
const elastic = new ElasticClient_1.ElasticClient();
const responseArr = [];
for (const item of data.routes) {
const query = new QueryBuilder_1.QueryBuilder();
query
.addMatch(QueryBuilder_1.IFindTypes.MUST, 'route', item.route)
.addMatch(QueryBuilder_1.IFindTypes.MUST, 'statusCode', 200)
.addMatch(QueryBuilder_1.IFindTypes.MUST, 'method', item.method.toLowerCase());
// .addMatch(IFindTypes.MUST, 'headers_host', data.host.trim());
query.sort({
[`${data.query.sort.field}`]: {
order: data.query.sort.type,
},
});
const res = await elastic.search(query.buildQuery(), {
index: data.index,
size: data.limit,
_source: ['path', 'method', 'route', 'headers_authorization', 'requestPayload_items', 'responseTime', 'message'],
});
if (res && res.statusCode === 200) {
const preparedData = res.body.hits.hits.map((item) => {
const obj = JSON.parse(item._source.message || '{}');
const auth = obj.headers['authorization'] || '';
switch (obj.method) {
case 'post': {
return {
path: obj.path,
tag: `POST_${obj.route}`,
body: obj.requestPayload,
method: 'POST',
headers: {
Authorization: auth,
},
};
}
case 'get': {
const uri = Object.keys(obj.query).reduce((acc, key) => {
const value = obj.query[key];
let qq = value;
if (Array.isArray(value)) {
const q = value.map((item) => `\"${item}\"`);
qq = '[' + q.join(',') + ']';
}
return acc.length === 0 ? acc + `?${key}=${qq}` : acc + `&${key}=${qq}`;
}, '');
const url = `${obj.path}${uri}`;
return {
path: url,
tag: `GET_${obj.route}`,
body: null,
method: 'GET',
headers: {
Authorization: auth,
},
};
}
}
});
responseArr.push(...preparedData);
}
}
const filename = `${data.host}_${new Date().toISOString()}`;
return {
name: filename,
host: data.host,
data: responseArr,
};
}
exports.default = default_1;