@loadmill/executer 0.1.93 → 0.1.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/asserter.d.ts +9 -0
  2. package/dist/asserter.js +141 -0
  3. package/dist/asserter.js.map +1 -0
  4. package/dist/cookies.d.ts +4 -0
  5. package/dist/cookies.js +79 -0
  6. package/dist/cookies.js.map +1 -0
  7. package/dist/errors.d.ts +5 -0
  8. package/dist/errors.js +38 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/extraction-combiner.d.ts +17 -0
  11. package/dist/extraction-combiner.js +182 -0
  12. package/dist/extraction-combiner.js.map +1 -0
  13. package/dist/failures.d.ts +24 -0
  14. package/dist/failures.js +67 -0
  15. package/dist/failures.js.map +1 -0
  16. package/dist/iteration-stats.d.ts +2 -0
  17. package/dist/iteration-stats.js +38 -0
  18. package/dist/iteration-stats.js.map +1 -0
  19. package/dist/message-creators.d.ts +31 -0
  20. package/dist/message-creators.js +90 -0
  21. package/dist/message-creators.js.map +1 -0
  22. package/dist/mill-info.d.ts +66 -0
  23. package/dist/mill-info.js +3 -0
  24. package/dist/mill-info.js.map +1 -0
  25. package/dist/mill-version.d.ts +6 -0
  26. package/dist/mill-version.js +10 -0
  27. package/dist/mill-version.js.map +1 -0
  28. package/dist/parameter-pools.d.ts +3 -0
  29. package/dist/parameter-pools.js +69 -0
  30. package/dist/parameter-pools.js.map +1 -0
  31. package/dist/post-script/ast-walker/index.d.ts +18 -0
  32. package/dist/post-script/ast-walker/index.js +215 -0
  33. package/dist/post-script/ast-walker/index.js.map +1 -0
  34. package/dist/post-script/ast-walker/type-guard.d.ts +11 -0
  35. package/dist/post-script/ast-walker/type-guard.js +56 -0
  36. package/dist/post-script/ast-walker/type-guard.js.map +1 -0
  37. package/dist/post-script/ast-walker/types.d.ts +24 -0
  38. package/dist/post-script/ast-walker/types.js +25 -0
  39. package/dist/post-script/ast-walker/types.js.map +1 -0
  40. package/dist/post-script/console-log.d.ts +7 -0
  41. package/dist/post-script/console-log.js +31 -0
  42. package/dist/post-script/console-log.js.map +1 -0
  43. package/dist/post-script/parser/acorn-js-parser.d.ts +5 -0
  44. package/dist/post-script/parser/acorn-js-parser.js +20 -0
  45. package/dist/post-script/parser/acorn-js-parser.js.map +1 -0
  46. package/dist/post-script/parser/js-parser.d.ts +16 -0
  47. package/dist/post-script/parser/js-parser.js +3 -0
  48. package/dist/post-script/parser/js-parser.js.map +1 -0
  49. package/dist/post-script/parser/parser.d.ts +6 -0
  50. package/dist/post-script/parser/parser.js +3 -0
  51. package/dist/post-script/parser/parser.js.map +1 -0
  52. package/dist/post-script/post-script-executor.d.ts +24 -0
  53. package/dist/post-script/post-script-executor.js +125 -0
  54. package/dist/post-script/post-script-executor.js.map +1 -0
  55. package/dist/post-script/virtual-machine/virtual-machine.d.ts +13 -0
  56. package/dist/post-script/virtual-machine/virtual-machine.js +3 -0
  57. package/dist/post-script/virtual-machine/virtual-machine.js.map +1 -0
  58. package/dist/post-script/virtual-machine/vm2-virtual-machine.d.ts +12 -0
  59. package/dist/post-script/virtual-machine/vm2-virtual-machine.js +81 -0
  60. package/dist/post-script/virtual-machine/vm2-virtual-machine.js.map +1 -0
  61. package/dist/post-sequence.d.ts +2 -0
  62. package/dist/post-sequence.js +192 -0
  63. package/dist/post-sequence.js.map +1 -0
  64. package/dist/redact-data.d.ts +2 -0
  65. package/dist/redact-data.js +71 -0
  66. package/dist/redact-data.js.map +1 -0
  67. package/dist/report-types.d.ts +102 -0
  68. package/dist/report-types.js +11 -0
  69. package/dist/report-types.js.map +1 -0
  70. package/dist/request-sequence-result.d.ts +44 -0
  71. package/dist/request-sequence-result.js +19 -0
  72. package/dist/request-sequence-result.js.map +1 -0
  73. package/dist/request-stats.d.ts +13 -0
  74. package/dist/request-stats.js +14 -0
  75. package/dist/request-stats.js.map +1 -0
  76. package/dist/res-keeper.d.ts +16 -0
  77. package/dist/res-keeper.js +104 -0
  78. package/dist/res-keeper.js.map +1 -0
  79. package/dist/sampler.d.ts +29 -0
  80. package/dist/sampler.js +276 -0
  81. package/dist/sampler.js.map +1 -0
  82. package/dist/sequence.d.ts +25 -0
  83. package/dist/sequence.js +1502 -0
  84. package/dist/sequence.js.map +1 -0
  85. package/dist/single-runner.d.ts +22 -0
  86. package/dist/single-runner.js +128 -0
  87. package/dist/single-runner.js.map +1 -0
  88. package/dist/test-run-event-emitter.d.ts +11 -0
  89. package/dist/test-run-event-emitter.js +36 -0
  90. package/dist/test-run-event-emitter.js.map +1 -0
  91. package/dist/utils.d.ts +1 -0
  92. package/dist/utils.js +29 -0
  93. package/dist/utils.js.map +1 -0
  94. package/dist/work.d.ts +15 -0
  95. package/dist/work.js +3 -0
  96. package/dist/work.js.map +1 -0
  97. package/dist/ws.d.ts +71 -0
  98. package/dist/ws.js +474 -0
  99. package/dist/ws.js.map +1 -0
  100. package/package.json +3 -3
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.redactSensitiveData = void 0;
7
+ var parameters_1 = require("@loadmill/core/dist/parameters");
8
+ var log_1 = __importDefault(require("@loadmill/universal/dist/log"));
9
+ var jsonpath_1 = __importDefault(require("jsonpath"));
10
+ var lodash_1 = require("lodash");
11
+ var qs_1 = __importDefault(require("qs"));
12
+ var redactedBodyText = 'Body Data Redacted';
13
+ function redactSensitiveData(resolvedRequests, sensitiveKeys) {
14
+ if (sensitiveKeys === void 0) { sensitiveKeys = []; }
15
+ resolvedRequests.forEach(function (rr) {
16
+ var _a, _b;
17
+ if ((_a = rr.postData) === null || _a === void 0 ? void 0 : _a.text) {
18
+ rr.postData.text = !lodash_1.isEmpty(sensitiveKeys) ? redactKeysFromBody(sensitiveKeys, rr.postData.text, rr.postData.mimeType) : redactedBodyText;
19
+ }
20
+ if ((_b = rr.response) === null || _b === void 0 ? void 0 : _b.text) {
21
+ rr.response.text = !lodash_1.isEmpty(sensitiveKeys) ? redactKeysFromBody(sensitiveKeys, rr.response.text, rr.response.type) : redactedBodyText;
22
+ }
23
+ if (rr.postParameters) {
24
+ redactPostParameters(rr.postParameters, sensitiveKeys);
25
+ }
26
+ });
27
+ }
28
+ exports.redactSensitiveData = redactSensitiveData;
29
+ function redactKeysFromBody(sensitiveKeys, text, mimeType) {
30
+ try {
31
+ if (mimeType === null || mimeType === void 0 ? void 0 : mimeType.startsWith('application/x-www-form-urlencoded')) {
32
+ var params = qs_1.default.parse(text);
33
+ redactKeysFromJson(params, sensitiveKeys);
34
+ return qs_1.default.stringify(params);
35
+ }
36
+ else if (mimeType === null || mimeType === void 0 ? void 0 : mimeType.includes('application/json')) {
37
+ var json = JSON.parse(text);
38
+ if (!json) {
39
+ return text;
40
+ }
41
+ redactKeysFromJson(json, sensitiveKeys);
42
+ return JSON.stringify(json);
43
+ }
44
+ return text;
45
+ }
46
+ catch (e) {
47
+ log_1.default.error('Failed to redact request / response body', e);
48
+ return redactedBodyText;
49
+ }
50
+ }
51
+ function redactKeysFromJson(json, sensitiveKeys) {
52
+ sensitiveKeys.forEach(function (key) {
53
+ jsonpath_1.default.apply(json, "$.." + key, function (_value) { return 'Redacted'; });
54
+ });
55
+ }
56
+ function redactPostParameters(postParameters, sensitiveKeys) {
57
+ if (postParameters === void 0) { postParameters = []; }
58
+ if (sensitiveKeys === void 0) { sensitiveKeys = []; }
59
+ postParameters.forEach(function (p) {
60
+ var paramName = parameters_1.parameterUtils.getParameterName(p);
61
+ if (!lodash_1.isEmpty(sensitiveKeys)) {
62
+ if (sensitiveKeys.includes(paramName)) {
63
+ p[paramName] = 'Redacted';
64
+ }
65
+ }
66
+ else {
67
+ p[paramName] = 'Redacted';
68
+ }
69
+ });
70
+ }
71
+ //# sourceMappingURL=redact-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact-data.js","sourceRoot":"","sources":["../src/redact-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { Failures } from './failures';
2
+ import { MillInfo } from './mill-info';
3
+ import { PerRequestResTime, PerRequestStats } from './request-stats';
4
+ export declare type LoadResult = 'done' | 'aborted' | 'failed';
5
+ /**
6
+ * This report contains all the info that comes from Redis each time there is a status update.
7
+ */
8
+ export interface LoadStatusReport extends AggregatedStatsReport {
9
+ endTime?: number;
10
+ startTime?: number;
11
+ result?: LoadResult;
12
+ activeSessions?: number;
13
+ }
14
+ /**
15
+ * This report contains all the aggregated stats computed from individual mill reports.
16
+ */
17
+ export interface AggregatedStatsReport extends BasicStatsReport {
18
+ /**
19
+ * The number of separate sessions / mills that sent at least one report.
20
+ */
21
+ reportedSessions?: number;
22
+ append?: boolean;
23
+ failures?: Failures;
24
+ browserStatsMap?: StatsMap;
25
+ locationStatsMap?: StatsMap;
26
+ serverMetrics?: ServerMetrics;
27
+ avgResTimeSequence?: SequenceObj;
28
+ requestStats?: PerRequestResTime;
29
+ failureReportsMap?: HashKeysToReportIds;
30
+ avgIterationTimeSequence?: SequenceObj;
31
+ }
32
+ /**
33
+ * A mapping that aggregates stats according to a certain feature, e.g. stats per browser version.
34
+ */
35
+ export interface StatsMap {
36
+ [feature: string]: BasicStatsReport & {
37
+ sessions: number;
38
+ };
39
+ }
40
+ /**
41
+ * A sequence of stats (currently only the average response time) reported within a certain
42
+ * interval (between `firstTime` and `lastTime`).
43
+ */
44
+ export interface SequenceObj {
45
+ append?: boolean;
46
+ sequence: ClientMetrics;
47
+ }
48
+ export declare type ClientMetrics = ClientMetricsClump[];
49
+ export declare type ClientMetricsClump = {
50
+ s?: number;
51
+ f?: number;
52
+ avg: number;
53
+ time: number;
54
+ p50?: number;
55
+ p95?: number;
56
+ weight: number;
57
+ concurrency: number;
58
+ };
59
+ export declare type ServerMetrics = ServerMetricsClump[];
60
+ export declare type ServerMetricsClump = {
61
+ _t: number;
62
+ uc?: number;
63
+ tc?: number;
64
+ tm?: number;
65
+ hm?: number;
66
+ uhm?: number;
67
+ };
68
+ export declare type HashKeysToReportIds = {
69
+ [hashKey: string]: string;
70
+ };
71
+ /**
72
+ * This is the report sent to Redis every time a mill report is received.
73
+ */
74
+ export declare type ToStoreStatsReport = StatsReportWithMillInfo & {
75
+ timestamp: number;
76
+ firstReport: boolean;
77
+ };
78
+ /**
79
+ * This report includes a single mill stats report along with additional meta data.
80
+ */
81
+ export declare type StatsReportWithMillInfo = FromMillStatsReport & MillInfo & {
82
+ lordId: string;
83
+ };
84
+ /**
85
+ * The stats report sent by the mill.
86
+ */
87
+ export interface FromMillStatsReport extends BasicStatsReport {
88
+ failures?: Failures;
89
+ requestStats?: PerRequestStats;
90
+ iterationTimes?: number[];
91
+ }
92
+ /**
93
+ * The basic stats we are usually interested in.
94
+ */
95
+ export interface BasicStatsReport {
96
+ hits?: number;
97
+ avgResTime?: number;
98
+ failedIterations?: number;
99
+ successfulIterations?: number;
100
+ avgIterationTime?: number;
101
+ }
102
+ export declare function isInformative({ hits, avgResTime, failedIterations, successfulIterations, }: FromMillStatsReport): boolean | 0 | undefined;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isInformative = void 0;
4
+ function isInformative(_a) {
5
+ var hits = _a.hits, avgResTime = _a.avgResTime, failedIterations = _a.failedIterations, successfulIterations = _a.successfulIterations;
6
+ return ((hits && hits > 0 && avgResTime != null && avgResTime >= 0) ||
7
+ (failedIterations && failedIterations > 0) ||
8
+ (successfulIterations && successfulIterations > 0));
9
+ }
10
+ exports.isInformative = isInformative;
11
+ //# sourceMappingURL=report-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-types.js","sourceRoot":"","sources":["../src/report-types.ts"],"names":[],"mappings":";;;AAsHA,SAAgB,aAAa,CAAC,EAKR;QAJpB,IAAI,UAAA,EACJ,UAAU,gBAAA,EACV,gBAAgB,sBAAA,EAChB,oBAAoB,0BAAA;IAEpB,OAAO,CACL,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,IAAI,CAAC,CAAC;QAC3D,CAAC,gBAAgB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAC1C,CAAC,oBAAoB,IAAI,oBAAoB,GAAG,CAAC,CAAC,CACnD,CAAC;AACJ,CAAC;AAXD,sCAWC"}
@@ -0,0 +1,44 @@
1
+ import { Failures } from './failures';
2
+ import { PerRequestStats } from './request-stats';
3
+ import { Parameters } from '@loadmill/core/dist/parameters';
4
+ import { LoadmillHeaders, LoadmillRequest, PostFormData, RequestPostData } from '@loadmill/core/dist/request';
5
+ import { CookiesDetails } from '@loadmill/core/dist/conf/types';
6
+ export declare function extendSequenceResult(result: RequestSequenceResult, requests: LoadmillRequest[]): ExtendedSequenceResult;
7
+ export interface ExtendedSequenceResult extends RequestSequenceResult {
8
+ resolvedRequests: ExtendedRequest[];
9
+ err?: string;
10
+ }
11
+ export interface RequestSequenceResult {
12
+ failures: Failures;
13
+ avgResTime: number;
14
+ successfulHits: number;
15
+ lastStartedIndex: number;
16
+ requestStats: PerRequestStats;
17
+ resolvedRequests: ResolvedRequest[];
18
+ cookies?: CookiesDetails;
19
+ }
20
+ export declare type ExtendedRequest = LoadmillRequest & ResolvedRequest;
21
+ export interface ResolvedRequest {
22
+ url?: string;
23
+ headers?: LoadmillHeaders[];
24
+ postData?: RequestPostData;
25
+ postFormData?: PostFormData;
26
+ response?: RequestResponse;
27
+ postParameters?: Parameters[];
28
+ stdout?: string[];
29
+ wsMessages?: string[];
30
+ unexpectedError?: {
31
+ stack: string;
32
+ message: string;
33
+ properties: string;
34
+ };
35
+ retried?: number;
36
+ index?: number;
37
+ }
38
+ export interface RequestResponse {
39
+ type: string;
40
+ text: string;
41
+ status: number;
42
+ statusText: string;
43
+ headers: LoadmillHeaders[];
44
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.extendSequenceResult = void 0;
15
+ function extendSequenceResult(result, requests) {
16
+ return __assign(__assign({}, result), { resolvedRequests: requests.map(function (request, index) { return (__assign(__assign({}, request), result.resolvedRequests[index])); }) });
17
+ }
18
+ exports.extendSequenceResult = extendSequenceResult;
19
+ //# sourceMappingURL=request-sequence-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-sequence-result.js","sourceRoot":"","sources":["../src/request-sequence-result.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAWA,SAAgB,oBAAoB,CAClC,MAA6B,EAC7B,QAA2B;IAE3B,6BACK,MAAM,KACT,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAC,OAAO,EAAE,KAAa,IAAK,OAAA,uBACtD,OAAO,GACP,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,EACjC,EAHyD,CAGzD,CAAC,IACH;AACJ,CAAC;AAXD,oDAWC"}
@@ -0,0 +1,13 @@
1
+ export interface PerRequestStats {
2
+ [index: number]: RequestStats;
3
+ }
4
+ export interface RequestStats {
5
+ resTimes: number[];
6
+ }
7
+ export interface PerRequestResTime {
8
+ [index: number]: {
9
+ weight: number;
10
+ avg: number;
11
+ };
12
+ }
13
+ export declare function setReqStats(reqStats: PerRequestStats, index: any, ...resTimes: number[]): void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setReqStats = void 0;
4
+ function setReqStats(reqStats, index) {
5
+ var _a;
6
+ var resTimes = [];
7
+ for (var _i = 2; _i < arguments.length; _i++) {
8
+ resTimes[_i - 2] = arguments[_i];
9
+ }
10
+ var stats = reqStats[index] || (reqStats[index] = { resTimes: [] });
11
+ (_a = stats.resTimes).push.apply(_a, resTimes);
12
+ }
13
+ exports.setReqStats = setReqStats;
14
+ //# sourceMappingURL=request-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-stats.js","sourceRoot":"","sources":["../src/request-stats.ts"],"names":[],"mappings":";;;AAYA,SAAgB,WAAW,CACzB,QAAyB,EACzB,KAAK;;IACL,kBAAqB;SAArB,UAAqB,EAArB,qBAAqB,EAArB,IAAqB;QAArB,iCAAqB;;IAErB,IAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,CAAA,KAAA,KAAK,CAAC,QAAQ,CAAA,CAAC,IAAI,WAAI,QAAQ,EAAE;AACnC,CAAC;AAPD,kCAOC"}
@@ -0,0 +1,16 @@
1
+ import { ObjectMap } from '@loadmill/universal/dist/object-map';
2
+ import { RequestSequenceResult } from './request-sequence-result';
3
+ export declare class ResKeeper {
4
+ private generateResultKey?;
5
+ knownKeysToResults: {
6
+ [key: string]: string;
7
+ };
8
+ results: ObjectMap<RequestSequenceResult>;
9
+ constructor(generateResultKey?: any);
10
+ getKnownKeys: () => string[];
11
+ mapToResultIds: (failureKeys: any) => {
12
+ [key: string]: string;
13
+ };
14
+ keepIfNeeded: (result: RequestSequenceResult, keepFor?: number | undefined) => void;
15
+ popForKeys: (failureKeys: string[], withIds?: boolean) => (RequestSequenceResult | undefined)[];
16
+ }
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.ResKeeper = void 0;
23
+ var object_map_1 = require("@loadmill/universal/dist/object-map");
24
+ var promiseUtils = __importStar(require("@loadmill/universal/dist/promise-utils"));
25
+ var failures_1 = require("./failures");
26
+ var ResKeeper = /** @class */ (function () {
27
+ function ResKeeper(generateResultKey) {
28
+ var _this = this;
29
+ Object.defineProperty(this, "generateResultKey", {
30
+ enumerable: true,
31
+ configurable: true,
32
+ writable: true,
33
+ value: generateResultKey
34
+ });
35
+ Object.defineProperty(this, "knownKeysToResults", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: {}
40
+ });
41
+ Object.defineProperty(this, "results", {
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true,
45
+ value: new object_map_1.ObjectMap(this.generateResultKey)
46
+ });
47
+ Object.defineProperty(this, "getKnownKeys", {
48
+ enumerable: true,
49
+ configurable: true,
50
+ writable: true,
51
+ value: function () { return Object.keys(_this.knownKeysToResults); }
52
+ });
53
+ Object.defineProperty(this, "mapToResultIds", {
54
+ enumerable: true,
55
+ configurable: true,
56
+ writable: true,
57
+ value: function (failureKeys) {
58
+ var map = {};
59
+ failureKeys.forEach(function (key) { return (map[key] = _this.knownKeysToResults[key]); });
60
+ return map;
61
+ }
62
+ });
63
+ Object.defineProperty(this, "keepIfNeeded", {
64
+ enumerable: true,
65
+ configurable: true,
66
+ writable: true,
67
+ value: function (result, keepFor) {
68
+ var failureKeys = failures_1.getFailureKeys(result.failures);
69
+ if (failureKeys.find(function (key) { return !_this.knownKeysToResults[key]; })) {
70
+ // We keep it:
71
+ var id_1 = _this.results.add(result);
72
+ failureKeys.forEach(function (key) { return (_this.knownKeysToResults[key] = id_1); });
73
+ if (keepFor) {
74
+ promiseUtils.delay(keepFor).then(function () { return _this.results.remove(id_1); });
75
+ }
76
+ }
77
+ }
78
+ });
79
+ Object.defineProperty(this, "popForKeys", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: function (failureKeys, withIds) {
84
+ if (withIds === void 0) { withIds = false; }
85
+ return failureKeys
86
+ .map(function (key) {
87
+ var id = _this.knownKeysToResults[key];
88
+ if (id) {
89
+ var res = _this.results.get(id);
90
+ _this.results.remove(id);
91
+ if (withIds && res) {
92
+ res['id'] = id;
93
+ }
94
+ return res;
95
+ }
96
+ })
97
+ .filter(Boolean);
98
+ }
99
+ });
100
+ }
101
+ return ResKeeper;
102
+ }());
103
+ exports.ResKeeper = ResKeeper;
104
+ //# sourceMappingURL=res-keeper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"res-keeper.js","sourceRoot":"","sources":["../src/res-keeper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,kEAAgE;AAChE,mFAAuE;AACvE,uCAA4C;AAG5C;IAIE,mBAAoB,iBAAkB;QAAtC,iBAA0C;;;;;mBAAtB;;QAHpB;;;;mBAAgD,EAAE;WAAC;QACnD;;;;mBAAU,IAAI,sBAAS,CAAwB,IAAI,CAAC,iBAAiB,CAAC;WAAC;QAIvE;;;;mBAAe,cAAM,OAAA,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,kBAAkB,CAAC,EAApC,CAAoC;WAAC;QAE1D;;;;mBAAiB,UAAC,WAAW;gBAC3B,IAAM,GAAG,GAA8B,EAAE,CAAC;gBAC1C,WAAW,CAAC,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAzC,CAAyC,CAAC,CAAC;gBAExE,OAAO,GAAG,CAAC;YACb,CAAC;WAAC;QAEF;;;;mBAAe,UAAC,MAA6B,EAAE,OAAgB;gBAC7D,IAAM,WAAW,GAAG,yBAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAEpD,IAAI,WAAW,CAAC,IAAI,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,KAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAA7B,CAA6B,CAAC,EAAE;oBAC5D,cAAc;oBACd,IAAM,IAAE,GAAG,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpC,WAAW,CAAC,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,CAAC,KAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAE,CAAC,EAAnC,CAAmC,CAAC,CAAC;oBAElE,IAAI,OAAO,EAAE;wBACX,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC;qBACjE;iBACF;YACH,CAAC;WAAC;QAEF;;;;mBAAa,UAAC,WAAqB,EAAE,OAAe;gBAAf,wBAAA,EAAA,eAAe;gBAClD,OAAO,WAAW;qBACf,GAAG,CAAC,UAAC,GAAG;oBACP,IAAM,EAAE,GAAG,KAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;oBAExC,IAAI,EAAE,EAAE;wBACN,IAAM,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACjC,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAExB,IAAI,OAAO,IAAI,GAAG,EAAE;4BAClB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;yBAChB;wBAED,OAAO,GAAG,CAAC;qBACZ;gBACH,CAAC,CAAC;qBACD,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;WAAC;IA1CuC,CAAC;IA2C5C,gBAAC;AAAD,CAAC,AA/CD,IA+CC;AA/CY,8BAAS"}
@@ -0,0 +1,29 @@
1
+ import { Failures } from './failures';
2
+ import { PerRequestStats } from './request-stats';
3
+ import { Work } from './work';
4
+ export interface SamplerFaja {
5
+ cancelWork(finished: boolean): any;
6
+ send(obj: string): any;
7
+ reportIntervalId: any;
8
+ isStopped: boolean;
9
+ keeper: any;
10
+ }
11
+ export declare class Sampler {
12
+ private samplerMill;
13
+ private work;
14
+ avgResTime: number;
15
+ expired: boolean;
16
+ successfulHits: number;
17
+ failedIterations: number;
18
+ startedIterations: number;
19
+ failures: Failures;
20
+ successfulIterations: number;
21
+ requestStats: PerRequestStats;
22
+ avgIterationTime: number;
23
+ iterationTimes: number[];
24
+ constructor(samplerMill: SamplerFaja, work: Work);
25
+ startSampling: () => void;
26
+ runAll: () => Promise<void>;
27
+ isDone: () => boolean;
28
+ sendReport: () => void;
29
+ }