UNPKG

yandex-tank-ammo-generator

Version:

Cartridge generation for Yandex tank

83 lines (82 loc) 3.4 kB
"use strict"; 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;