UNPKG

13.9 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = exports.ProxyTests = void 0;
9
10var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
12var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
14var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
16var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
18var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
19
20var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
21
22var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
24var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
26var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
28var _err = _interopRequireDefault(require("@lskjs/err"));
29
30var _module = _interopRequireDefault(require("@lskjs/module"));
31
32var _tryJSONparse = _interopRequireDefault(require("@lskjs/utils/tryJSONparse"));
33
34var _bluebird = _interopRequireDefault(require("bluebird"));
35
36var _find = _interopRequireDefault(require("lodash/find"));
37
38var _flatten = _interopRequireDefault(require("lodash/flatten"));
39
40var _get = _interopRequireDefault(require("lodash/get"));
41
42var _groupBy = _interopRequireDefault(require("lodash/groupBy"));
43
44var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
45
46var _pick = _interopRequireDefault(require("lodash/pick"));
47
48var _shuffle = _interopRequireDefault(require("lodash/shuffle"));
49
50var _createRequest = require("./createRequest");
51
52var _excluded = ["request"],
53 _excluded2 = ["proxy", "testId", "test", "force"];
54
55function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
56
57function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
58
59function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
60
61function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
62
63var getId = function getId(_ref) {
64 var proxy = _ref.proxy,
65 test = _ref.test;
66 return [(0, _get["default"])(proxy, 'key'), test.id].filter(Boolean).join('_');
67};
68
69var ProxyTests = /*#__PURE__*/function (_Module) {
70 (0, _inherits2["default"])(ProxyTests, _Module);
71
72 var _super = _createSuper(ProxyTests);
73
74 function ProxyTests() {
75 var _this;
76
77 (0, _classCallCheck2["default"])(this, ProxyTests);
78
79 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
80 args[_key] = arguments[_key];
81 }
82
83 _this = _super.call.apply(_super, [this].concat(args));
84 _this.config = {
85 concurrency: (0, _tryJSONparse["default"])(process.env.PREFETCH) || 50,
86 cacheTimeout: 15 * 60 * 1000
87 };
88 _this.cache = {
89 results: {},
90 proxyStats: {},
91 updatedAt: null
92 };
93 return _this;
94 }
95
96 (0, _createClass2["default"])(ProxyTests, [{
97 key: "request",
98 value: function request(req) {
99 var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
100 _request = _ref2.request,
101 props = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
102
103 if ((0, _isFunction["default"])(req)) {
104 return req(_objectSpread({
105 request: _request
106 }, props));
107 }
108
109 return _request(_objectSpread(_objectSpread({}, req), props));
110 }
111 }, {
112 key: "execTest",
113 value: function () {
114 var _execTest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
115 var _ref3,
116 id,
117 proxy,
118 _ref3$test,
119 test,
120 apm,
121 stats,
122 log,
123 request,
124 res,
125 startedAt,
126 expired,
127 _args = arguments;
128
129 return _regenerator["default"].wrap(function _callee$(_context) {
130 while (1) {
131 switch (_context.prev = _context.next) {
132 case 0:
133 _ref3 = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, id = _ref3.id, proxy = _ref3.proxy, _ref3$test = _ref3.test, test = _ref3$test === void 0 ? {} : _ref3$test;
134 _context.next = 3;
135 return this.app.module('apm');
136
137 case 3:
138 apm = _context.sent;
139 _context.next = 6;
140 return this.app.module('stats');
141
142 case 6:
143 stats = _context.sent;
144 _context.next = 9;
145 return this.log.createChild({
146 name: "".concat(test.id)
147 });
148
149 case 9:
150 log = _context.sent;
151 request = (0, _createRequest.createRequest)({
152 apm: apm,
153 labels: {
154 proxyTest: test.id
155 },
156 stats: stats,
157 log: log
158 }); // console.log({ proxy });
159
160 res = {
161 id: getId({
162 proxy: proxy,
163 test: test
164 }),
165 proxy: proxy,
166 proxyKey: (proxy === null || proxy === void 0 ? void 0 : proxy.key) || '?',
167 test: test
168 };
169 startedAt = new Date();
170 _context.prev = 13;
171 _context.next = 16;
172 return this.request(test.req, {
173 proxy: proxy,
174 request: request
175 });
176
177 case 16:
178 res.status = 'success';
179 _context.next = 23;
180 break;
181
182 case 19:
183 _context.prev = 19;
184 _context.t0 = _context["catch"](13);
185 res.status = 'error';
186 res.errCode = _err["default"].getCode(_context.t0); // res.err = err; // NOTE: вырубил, чтобы не переполнять память
187
188 case 23:
189 res.time = Date.now() - startedAt;
190 res.updatedAt = Date.now();
191 expired = test.expired || 5 * 60 * 1000;
192 res.expiredAt = Date.now() + expired; // const ok = test.validate ? await test.validate(res2) : true;
193
194 return _context.abrupt("return", res);
195
196 case 28:
197 case "end":
198 return _context.stop();
199 }
200 }
201 }, _callee, this, [[13, 19]]);
202 }));
203
204 function execTest() {
205 return _execTest.apply(this, arguments);
206 }
207
208 return execTest;
209 }()
210 }, {
211 key: "getCache",
212 value: function getCache(id) {
213 if (!this.cache.results[id]) return null;
214
215 if (this.cache.results[id].expiredAt < Date.now()) {
216 delete this.cache.results[id];
217 return null;
218 }
219
220 return this.cache.results[id];
221 }
222 }, {
223 key: "setCache",
224 value: function setCache(res) {
225 var id = res.id;
226 if (!id) id = getId(res);
227 if (!id) throw new _err["default"]('!id', {
228 res: res
229 });
230 this.cache.results[id] = res;
231 this.cache.updatedAt = Date.now();
232 this.cache.proxyStats = (0, _groupBy["default"])(this.cache.results, 'proxy.key');
233 }
234 }, {
235 key: "updateCache",
236 value: function updateCache() {
237 var _this2 = this;
238
239 Object.keys(this.cache.results).map(function (id) {
240 return _this2.getCache(id);
241 });
242 }
243 }, {
244 key: "getResults",
245 value: function getResults() {
246 this.updateCache();
247 return this.cache.results;
248 }
249 }, {
250 key: "runTest",
251 value: function () {
252 var _runTest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
253 var _ref4,
254 proxy,
255 testId,
256 test,
257 _ref4$force,
258 force,
259 props,
260 id,
261 res,
262 _args2 = arguments;
263
264 return _regenerator["default"].wrap(function _callee2$(_context2) {
265 while (1) {
266 switch (_context2.prev = _context2.next) {
267 case 0:
268 _ref4 = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {}, proxy = _ref4.proxy, testId = _ref4.testId, test = _ref4.test, _ref4$force = _ref4.force, force = _ref4$force === void 0 ? false : _ref4$force, props = (0, _objectWithoutProperties2["default"])(_ref4, _excluded2);
269
270 if (!test && testId) {
271 // eslint-disable-next-line no-param-reassign
272 test = (0, _find["default"])(this.tests, {
273 id: testId
274 });
275 }
276
277 id = getId({
278 proxy: proxy,
279 test: test
280 });
281 res = this.getCache(id);
282
283 if (!(res && !force)) {
284 _context2.next = 6;
285 break;
286 }
287
288 return _context2.abrupt("return", res);
289
290 case 6:
291 _context2.next = 8;
292 return this.execTest(_objectSpread({
293 id: id,
294 proxy: proxy,
295 test: test
296 }, props));
297
298 case 8:
299 res = _context2.sent;
300 // this.log.trace('[runTest]', res)
301 this.setCache(res);
302 return _context2.abrupt("return", res);
303
304 case 11:
305 case "end":
306 return _context2.stop();
307 }
308 }
309 }, _callee2, this);
310 }));
311
312 function runTest() {
313 return _runTest.apply(this, arguments);
314 }
315
316 return runTest;
317 }()
318 }, {
319 key: "getProxyStats",
320 value: function getProxyStats(proxyList) {
321 if (!proxyList) return this.cache.proxyStats;
322 var proxyKeys = proxyList.map(function (proxy) {
323 return proxy.key;
324 });
325 return (0, _pick["default"])(this.cache.proxyStats, proxyKeys);
326 }
327 }, {
328 key: "runTests",
329 value: function () {
330 var _runTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(proxyList) {
331 var _this3 = this;
332
333 var _ref5,
334 _ref5$force,
335 force,
336 concurrency,
337 stats,
338 res,
339 _args3 = arguments;
340
341 return _regenerator["default"].wrap(function _callee3$(_context3) {
342 while (1) {
343 switch (_context3.prev = _context3.next) {
344 case 0:
345 _ref5 = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {}, _ref5$force = _ref5.force, force = _ref5$force === void 0 ? false : _ref5$force;
346 concurrency = this.config.concurrency;
347 _context3.next = 4;
348 return this.app.module('stats');
349
350 case 4:
351 stats = _context3.sent;
352 stats.startTimer(); // this.log.trace('[runTests] start');
353
354 _context3.next = 8;
355 return _bluebird["default"].map((0, _shuffle["default"])(proxyList), function (proxy) {
356 return _bluebird["default"].map((0, _shuffle["default"])(_this3.tests), function (test) {
357 return _this3.runTest({
358 proxy: proxy,
359 test: test,
360 force: force
361 });
362 }, {
363 concurrency: 1
364 });
365 }, {
366 concurrency: concurrency
367 });
368
369 case 8:
370 res = _context3.sent;
371 stats.stopTimer(); // this.log.debug('[runTests]', res);
372
373 return _context3.abrupt("return", (0, _flatten["default"])(res));
374
375 case 11:
376 case "end":
377 return _context3.stop();
378 }
379 }
380 }, _callee3, this);
381 }));
382
383 function runTests(_x) {
384 return _runTests.apply(this, arguments);
385 }
386
387 return runTests;
388 }()
389 }]);
390 return ProxyTests;
391}(_module["default"]);
392
393exports.ProxyTests = ProxyTests;
394var _default = ProxyTests;
395exports["default"] = _default;
396//# sourceMappingURL=ProxyTests.js.map
\No newline at end of file