loadmill
Version:
A node.js module for running load tests and functional tests on loadmill.com
69 lines (68 loc) • 2.93 kB
JavaScript
;
exports.__esModule = true;
exports.HttpMethods = exports.sendHttpRequest = void 0;
var tslib_1 = require("tslib");
var superagent = require("superagent");
var DEFAULT_TIMEOUT_MS = 30000; // 30 seconds
var RETRY_DELAY_MS = 1000; // 1 second
var sendHttpRequest = function (options) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var err_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 6]);
return [4 /*yield*/, _executeRequest(options)];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_1 = _a.sent();
console.error("Error during " + (options.method || HttpMethods.GET).toUpperCase() + " request to " + options.url + ":", err_1);
if (!_shouldRetry(err_1)) return [3 /*break*/, 5];
console.log("Retrying " + (options.method || HttpMethods.GET).toUpperCase() + " request to " + options.url + "...");
return [4 /*yield*/, _delay(RETRY_DELAY_MS)];
case 3:
_a.sent();
return [4 /*yield*/, _executeRequest(options)];
case 4: return [2 /*return*/, _a.sent()];
case 5: throw err_1;
case 6: return [2 /*return*/];
}
});
}); };
exports.sendHttpRequest = sendHttpRequest;
var _executeRequest = function (options) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var _a, method, url, token, query, body, request;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = options.method, method = _a === void 0 ? HttpMethods.GET : _a, url = options.url, token = options.token, query = options.query, body = options.body;
request = superagent[method](url)
.auth(token, '')
.timeout(DEFAULT_TIMEOUT_MS);
if (query) {
request = request.query(query);
}
if (body) {
request = request.send(body);
}
return [4 /*yield*/, request];
case 1: return [2 /*return*/, _b.sent()];
}
});
}); };
// retry on network issues
var _shouldRetry = function (err) {
return err.timeout ||
err.code === 'ECONNREFUSED' ||
err.code === 'ECONNABORTED' ||
err.code === 'ETIMEDOUT' ||
err.code === 'ECONNRESET';
};
var _delay = function (ms) { return new Promise(function (resolve) { return setTimeout(resolve, ms); }); };
var HttpMethods;
(function (HttpMethods) {
HttpMethods["GET"] = "get";
HttpMethods["POST"] = "post";
HttpMethods["PUT"] = "put";
HttpMethods["DELETE"] = "delete";
HttpMethods["PATCH"] = "patch";
})(HttpMethods = exports.HttpMethods || (exports.HttpMethods = {}));