@loadmill/executer 0.1.141 → 0.1.142

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 (130) hide show
  1. package/package/dist/asserter.d.ts +9 -0
  2. package/package/dist/asserter.js +158 -0
  3. package/package/dist/asserter.js.map +1 -0
  4. package/package/dist/constants.d.ts +7 -0
  5. package/package/dist/constants.js +13 -0
  6. package/package/dist/constants.js.map +1 -0
  7. package/package/dist/cookies.d.ts +4 -0
  8. package/package/dist/cookies.js +79 -0
  9. package/package/dist/cookies.js.map +1 -0
  10. package/package/dist/errors.d.ts +5 -0
  11. package/package/dist/errors.js +38 -0
  12. package/package/dist/errors.js.map +1 -0
  13. package/package/dist/extraction-combiner.d.ts +17 -0
  14. package/package/dist/extraction-combiner.js +182 -0
  15. package/package/dist/extraction-combiner.js.map +1 -0
  16. package/package/dist/failures.d.ts +24 -0
  17. package/package/dist/failures.js +67 -0
  18. package/package/dist/failures.js.map +1 -0
  19. package/package/dist/grpc.d.ts +34 -0
  20. package/package/dist/grpc.js +269 -0
  21. package/package/dist/grpc.js.map +1 -0
  22. package/package/dist/iteration-stats.d.ts +2 -0
  23. package/package/dist/iteration-stats.js +38 -0
  24. package/package/dist/iteration-stats.js.map +1 -0
  25. package/package/dist/message-creators.d.ts +31 -0
  26. package/package/dist/message-creators.js +90 -0
  27. package/package/dist/message-creators.js.map +1 -0
  28. package/package/dist/mill-info.d.ts +70 -0
  29. package/package/dist/mill-info.js +3 -0
  30. package/package/dist/mill-info.js.map +1 -0
  31. package/package/dist/mill-version.d.ts +6 -0
  32. package/package/dist/mill-version.js +10 -0
  33. package/package/dist/mill-version.js.map +1 -0
  34. package/package/dist/parameter-pools.d.ts +3 -0
  35. package/package/dist/parameter-pools.js +69 -0
  36. package/package/dist/parameter-pools.js.map +1 -0
  37. package/package/dist/performance.d.ts +1 -0
  38. package/package/dist/performance.js +10 -0
  39. package/package/dist/performance.js.map +1 -0
  40. package/package/dist/post-script/ast-walker/index.d.ts +18 -0
  41. package/package/dist/post-script/ast-walker/index.js +215 -0
  42. package/package/dist/post-script/ast-walker/index.js.map +1 -0
  43. package/package/dist/post-script/ast-walker/type-guard.d.ts +11 -0
  44. package/package/dist/post-script/ast-walker/type-guard.js +56 -0
  45. package/package/dist/post-script/ast-walker/type-guard.js.map +1 -0
  46. package/package/dist/post-script/ast-walker/types.d.ts +24 -0
  47. package/package/dist/post-script/ast-walker/types.js +25 -0
  48. package/package/dist/post-script/ast-walker/types.js.map +1 -0
  49. package/package/dist/post-script/console-log.d.ts +7 -0
  50. package/package/dist/post-script/console-log.js +31 -0
  51. package/package/dist/post-script/console-log.js.map +1 -0
  52. package/package/dist/post-script/constants.d.ts +4 -0
  53. package/package/dist/post-script/constants.js +9 -0
  54. package/package/dist/post-script/constants.js.map +1 -0
  55. package/package/dist/post-script/parser/acorn-js-parser.d.ts +5 -0
  56. package/package/dist/post-script/parser/acorn-js-parser.js +20 -0
  57. package/package/dist/post-script/parser/acorn-js-parser.js.map +1 -0
  58. package/package/dist/post-script/parser/js-parser.d.ts +16 -0
  59. package/package/dist/post-script/parser/js-parser.js +3 -0
  60. package/package/dist/post-script/parser/js-parser.js.map +1 -0
  61. package/package/dist/post-script/parser/parser.d.ts +6 -0
  62. package/package/dist/post-script/parser/parser.js +3 -0
  63. package/package/dist/post-script/parser/parser.js.map +1 -0
  64. package/package/dist/post-script/post-script-executor.d.ts +24 -0
  65. package/package/dist/post-script/post-script-executor.js +125 -0
  66. package/package/dist/post-script/post-script-executor.js.map +1 -0
  67. package/package/dist/post-script/virtual-machine/virtual-machine.d.ts +13 -0
  68. package/package/dist/post-script/virtual-machine/virtual-machine.js +3 -0
  69. package/package/dist/post-script/virtual-machine/virtual-machine.js.map +1 -0
  70. package/package/dist/post-script/virtual-machine/vm2-virtual-machine.d.ts +12 -0
  71. package/package/dist/post-script/virtual-machine/vm2-virtual-machine.js +81 -0
  72. package/package/dist/post-script/virtual-machine/vm2-virtual-machine.js.map +1 -0
  73. package/package/dist/post-sequence.d.ts +2 -0
  74. package/package/dist/post-sequence.js +192 -0
  75. package/package/dist/post-sequence.js.map +1 -0
  76. package/package/dist/redact-data.d.ts +2 -0
  77. package/package/dist/redact-data.js +60 -0
  78. package/package/dist/redact-data.js.map +1 -0
  79. package/package/dist/report-types.d.ts +102 -0
  80. package/package/dist/report-types.js +11 -0
  81. package/package/dist/report-types.js.map +1 -0
  82. package/package/dist/request-sequence-result.d.ts +37 -0
  83. package/package/dist/request-sequence-result.js +19 -0
  84. package/package/dist/request-sequence-result.js.map +1 -0
  85. package/package/dist/request-stats.d.ts +13 -0
  86. package/package/dist/request-stats.js +14 -0
  87. package/package/dist/request-stats.js.map +1 -0
  88. package/package/dist/res-keeper.d.ts +16 -0
  89. package/package/dist/res-keeper.js +104 -0
  90. package/package/dist/res-keeper.js.map +1 -0
  91. package/package/dist/sampler.d.ts +29 -0
  92. package/package/dist/sampler.js +276 -0
  93. package/package/dist/sampler.js.map +1 -0
  94. package/package/dist/sequence-executor-like.d.ts +23 -0
  95. package/package/dist/sequence-executor-like.js +3 -0
  96. package/package/dist/sequence-executor-like.js.map +1 -0
  97. package/package/dist/sequence.d.ts +16 -0
  98. package/package/dist/sequence.js +1738 -0
  99. package/package/dist/sequence.js.map +1 -0
  100. package/package/dist/single-runner.d.ts +29 -0
  101. package/package/dist/single-runner.js +147 -0
  102. package/package/dist/single-runner.js.map +1 -0
  103. package/package/dist/step-handlers/code-step-handler.d.ts +12 -0
  104. package/package/dist/step-handlers/code-step-handler.js +93 -0
  105. package/package/dist/step-handlers/code-step-handler.js.map +1 -0
  106. package/package/dist/step-handlers/extract-step-handler.d.ts +12 -0
  107. package/package/dist/step-handlers/extract-step-handler.js +101 -0
  108. package/package/dist/step-handlers/extract-step-handler.js.map +1 -0
  109. package/package/dist/step-handlers/request-step-handler.d.ts +13 -0
  110. package/package/dist/step-handlers/request-step-handler.js +94 -0
  111. package/package/dist/step-handlers/request-step-handler.js.map +1 -0
  112. package/package/dist/step-handlers/step-handler.d.ts +11 -0
  113. package/package/dist/step-handlers/step-handler.js +3 -0
  114. package/package/dist/step-handlers/step-handler.js.map +1 -0
  115. package/package/dist/test-run-event-emitter.d.ts +15 -0
  116. package/package/dist/test-run-event-emitter.js +36 -0
  117. package/package/dist/test-run-event-emitter.js.map +1 -0
  118. package/package/dist/types/grpc.d.ts +14 -0
  119. package/package/dist/types/grpc.js +3 -0
  120. package/package/dist/types/grpc.js.map +1 -0
  121. package/package/dist/utils.d.ts +3 -0
  122. package/package/dist/utils.js +32 -0
  123. package/package/dist/utils.js.map +1 -0
  124. package/package/dist/work.d.ts +15 -0
  125. package/package/dist/work.js +3 -0
  126. package/package/dist/work.js.map +1 -0
  127. package/package/dist/ws.d.ts +71 -0
  128. package/package/dist/ws.js +474 -0
  129. package/package/dist/ws.js.map +1 -0
  130. package/package.json +4 -3
@@ -0,0 +1,37 @@
1
+ import { Failures } from './failures';
2
+ import { PerRequestStats } from './request-stats';
3
+ import { GRPC, LoadmillHeaders, PostFormData, RequestPostData } from '@loadmill/core/dist/request';
4
+ import { CookiesDetails } from '@loadmill/core/dist/conf/types';
5
+ import { ResolvedStep } from '@loadmill/core/dist/step';
6
+ import { Step } from '@loadmill/core/dist/step/step-type';
7
+ export declare function extendSequenceResult(result: RequestSequenceResult, requests: Step[]): ExtendedSequenceResult;
8
+ export interface ExtendedSequenceResult extends RequestSequenceResult {
9
+ resolvedRequests: ExtendedRequest[];
10
+ err?: string;
11
+ }
12
+ export interface RequestSequenceResult {
13
+ failures: Failures;
14
+ evaluatingFailures?: Failures;
15
+ avgResTime: number;
16
+ successfulHits: number;
17
+ lastStartedIndex: number;
18
+ requestStats: PerRequestStats;
19
+ resolvedRequests: ResolvedStep[];
20
+ cookies?: CookiesDetails;
21
+ }
22
+ export declare type ExtendedRequest = Step & ResolvedRequest;
23
+ export interface ResolvedRequest extends ResolvedStep {
24
+ url?: string;
25
+ headers?: LoadmillHeaders[];
26
+ postData?: RequestPostData;
27
+ postFormData?: PostFormData;
28
+ grpc?: GRPC;
29
+ response?: RequestResponse;
30
+ }
31
+ export interface RequestResponse {
32
+ type: string;
33
+ text: string;
34
+ status: number;
35
+ statusText: string;
36
+ headers: LoadmillHeaders[];
37
+ }
@@ -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":";;;;;;;;;;;;;;AAYA,SAAgB,oBAAoB,CAClC,MAA6B,EAC7B,QAAgB;IAEhB,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
+ }
@@ -0,0 +1,276 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __generator = (this && this.__generator) || function (thisArg, body) {
31
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
32
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
33
+ function verb(n) { return function (v) { return step([n, v]); }; }
34
+ function step(op) {
35
+ if (f) throw new TypeError("Generator is already executing.");
36
+ while (_) try {
37
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
38
+ if (y = 0, t) op = [op[0] & 2, t.value];
39
+ switch (op[0]) {
40
+ case 0: case 1: t = op; break;
41
+ case 4: _.label++; return { value: op[1], done: false };
42
+ case 5: _.label++; y = op[1]; op = [0]; continue;
43
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
44
+ default:
45
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
46
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
47
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
48
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
49
+ if (t[2]) _.ops.pop();
50
+ _.trys.pop(); continue;
51
+ }
52
+ op = body.call(thisArg, _);
53
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
54
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
55
+ }
56
+ };
57
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
58
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
59
+ to[j] = from[i];
60
+ return to;
61
+ };
62
+ var __importDefault = (this && this.__importDefault) || function (mod) {
63
+ return (mod && mod.__esModule) ? mod : { "default": mod };
64
+ };
65
+ Object.defineProperty(exports, "__esModule", { value: true });
66
+ exports.Sampler = void 0;
67
+ var log_1 = __importDefault(require("@loadmill/universal/dist/log"));
68
+ var mathUtils = __importStar(require("@loadmill/universal/dist/math-utils"));
69
+ var promiseUtils = __importStar(require("@loadmill/universal/dist/promise-utils"));
70
+ var conf_1 = require("@loadmill/core/dist/conf");
71
+ var single_runner_1 = require("./single-runner");
72
+ var failures_1 = require("./failures");
73
+ var request_stats_1 = require("./request-stats");
74
+ var iteration_stats_1 = require("./iteration-stats");
75
+ var message_creators_1 = require("./message-creators");
76
+ var defaults_1 = require("@loadmill/core/dist/conf/defaults");
77
+ // 5 minutes:
78
+ var RES_KEEP_TIME = 5 * 60 * 1000;
79
+ var Sampler = /** @class */ (function () {
80
+ function Sampler(samplerMill, work) {
81
+ var _this = this;
82
+ Object.defineProperty(this, "samplerMill", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: samplerMill
87
+ });
88
+ Object.defineProperty(this, "work", {
89
+ enumerable: true,
90
+ configurable: true,
91
+ writable: true,
92
+ value: work
93
+ });
94
+ Object.defineProperty(this, "avgResTime", {
95
+ enumerable: true,
96
+ configurable: true,
97
+ writable: true,
98
+ value: 0
99
+ });
100
+ Object.defineProperty(this, "expired", {
101
+ enumerable: true,
102
+ configurable: true,
103
+ writable: true,
104
+ value: false
105
+ });
106
+ Object.defineProperty(this, "successfulHits", {
107
+ enumerable: true,
108
+ configurable: true,
109
+ writable: true,
110
+ value: 0
111
+ });
112
+ Object.defineProperty(this, "failedIterations", {
113
+ enumerable: true,
114
+ configurable: true,
115
+ writable: true,
116
+ value: 0
117
+ });
118
+ Object.defineProperty(this, "startedIterations", {
119
+ enumerable: true,
120
+ configurable: true,
121
+ writable: true,
122
+ value: 0
123
+ });
124
+ Object.defineProperty(this, "failures", {
125
+ enumerable: true,
126
+ configurable: true,
127
+ writable: true,
128
+ value: {}
129
+ });
130
+ Object.defineProperty(this, "successfulIterations", {
131
+ enumerable: true,
132
+ configurable: true,
133
+ writable: true,
134
+ value: 0
135
+ });
136
+ Object.defineProperty(this, "requestStats", {
137
+ enumerable: true,
138
+ configurable: true,
139
+ writable: true,
140
+ value: {}
141
+ });
142
+ Object.defineProperty(this, "avgIterationTime", {
143
+ enumerable: true,
144
+ configurable: true,
145
+ writable: true,
146
+ value: 0
147
+ });
148
+ Object.defineProperty(this, "iterationTimes", {
149
+ enumerable: true,
150
+ configurable: true,
151
+ writable: true,
152
+ value: []
153
+ });
154
+ Object.defineProperty(this, "startSampling", {
155
+ enumerable: true,
156
+ configurable: true,
157
+ writable: true,
158
+ value: function () {
159
+ _this.samplerMill.cancelWork(false);
160
+ promiseUtils.delay(_this.work.duration || defaults_1.DEFAULT_DURATION).then(function () {
161
+ if (!_this.samplerMill.isStopped) {
162
+ log_1.default.debug('Time\'s up!');
163
+ _this.expired = true;
164
+ _this.sendReport();
165
+ }
166
+ });
167
+ var requests = _this.work.requests;
168
+ var iterationDelay = _this.work.iterationDelay || defaults_1.DEFAULT_ITERATION_DELAY;
169
+ var reportDelayy = conf_1.reportDelay(iterationDelay, requests);
170
+ _this.samplerMill.reportIntervalId = setInterval(_this.sendReport, reportDelayy);
171
+ _this.samplerMill.isStopped = false;
172
+ _this.runAll();
173
+ }
174
+ });
175
+ Object.defineProperty(this, "runAll", {
176
+ enumerable: true,
177
+ configurable: true,
178
+ writable: true,
179
+ value: function () { return __awaiter(_this, void 0, void 0, function () {
180
+ var _loop_1, this_1;
181
+ var _this = this;
182
+ return __generator(this, function (_a) {
183
+ switch (_a.label) {
184
+ case 0:
185
+ _loop_1 = function () {
186
+ var res, resFailures, iterationDuration, skipCount;
187
+ return __generator(this, function (_b) {
188
+ switch (_b.label) {
189
+ case 0:
190
+ ++this_1.startedIterations;
191
+ log_1.default.trace('Executing iteration: ', this_1.startedIterations);
192
+ return [4 /*yield*/, single_runner_1.runSingleIteration(this_1.work)];
193
+ case 1:
194
+ res = _b.sent();
195
+ this_1.samplerMill.keeper.keepIfNeeded(res, RES_KEEP_TIME);
196
+ resFailures = res.failures;
197
+ if (!resFailures || Object.keys(resFailures).length === 0) {
198
+ ++this_1.successfulIterations;
199
+ }
200
+ else {
201
+ ++this_1.failedIterations;
202
+ failures_1.mergeFailures(this_1.failures, resFailures);
203
+ }
204
+ this_1.avgResTime = mathUtils.calcAvg(this_1.avgResTime, this_1.successfulHits, res.avgResTime, res.successfulHits);
205
+ this_1.successfulHits += res.successfulHits;
206
+ Object.keys(res.requestStats).forEach(function (index) {
207
+ request_stats_1.setReqStats.apply(void 0, __spreadArray([_this.requestStats, index], res.requestStats[index].resTimes));
208
+ });
209
+ iterationDuration = iteration_stats_1.calcIterationDuration(res);
210
+ this_1.iterationTimes.push(iterationDuration);
211
+ this_1.avgIterationTime = mathUtils.calcAvg(this_1.avgIterationTime, this_1.successfulIterations + this_1.failedIterations - 1, iterationDuration, 1);
212
+ if (!!this_1.isDone()) return [3 /*break*/, 3];
213
+ skipCount = res.lastStartedIndex + 1;
214
+ return [4 /*yield*/, promiseUtils.delay(conf_1.minimalRemainingDuration(this_1.work.iterationDelay || defaults_1.DEFAULT_ITERATION_DELAY, this_1.work.requests, skipCount))];
215
+ case 2:
216
+ _b.sent();
217
+ _b.label = 3;
218
+ case 3: return [2 /*return*/];
219
+ }
220
+ });
221
+ };
222
+ this_1 = this;
223
+ _a.label = 1;
224
+ case 1:
225
+ if (!!this.isDone()) return [3 /*break*/, 3];
226
+ return [5 /*yield**/, _loop_1()];
227
+ case 2:
228
+ _a.sent();
229
+ return [3 /*break*/, 1];
230
+ case 3:
231
+ if (!this.samplerMill.isStopped) {
232
+ log_1.default.debug('Finished last iteration:', this.startedIterations);
233
+ this.sendReport();
234
+ this.samplerMill.cancelWork(true);
235
+ }
236
+ return [2 /*return*/];
237
+ }
238
+ });
239
+ }); }
240
+ });
241
+ Object.defineProperty(this, "isDone", {
242
+ enumerable: true,
243
+ configurable: true,
244
+ writable: true,
245
+ value: function () {
246
+ return _this.samplerMill.isStopped || _this.expired || _this.startedIterations >= _this.work.iterations;
247
+ }
248
+ });
249
+ Object.defineProperty(this, "sendReport", {
250
+ enumerable: true,
251
+ configurable: true,
252
+ writable: true,
253
+ value: function () {
254
+ var report = {
255
+ failures: _this.failures,
256
+ hits: _this.successfulHits,
257
+ avgResTime: _this.avgResTime,
258
+ requestStats: _this.requestStats,
259
+ failedIterations: _this.failedIterations,
260
+ successfulIterations: _this.successfulIterations,
261
+ avgIterationTime: _this.avgIterationTime,
262
+ iterationTimes: _this.iterationTimes,
263
+ };
264
+ log_1.default.trace('Sending report:', report);
265
+ _this.samplerMill.send(message_creators_1.messageCreators.report(report));
266
+ _this.failures = {};
267
+ _this.requestStats = {};
268
+ _this.successfulIterations = _this.successfulHits = _this.failedIterations = _this.avgResTime = _this.avgIterationTime = 0;
269
+ _this.iterationTimes = [];
270
+ }
271
+ });
272
+ }
273
+ return Sampler;
274
+ }());
275
+ exports.Sampler = Sampler;
276
+ //# sourceMappingURL=sampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampler.js","sourceRoot":"","sources":["../src/sampler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import superagent from 'superagent';
2
+ import { SequenceExecutorParameters } from '@loadmill/core/dist/parameters';
3
+ import { Step } from '@loadmill/core/dist/step/step-type';
4
+ import { LoadmillRequest } from '@loadmill/core/dist/request';
5
+ import { Extractable } from '@loadmill/core/dist/step/extractable';
6
+ import { Assertable } from '@loadmill/core/dist/step/assertable';
7
+ import { RequestResponse, RequestSequenceResult } from './request-sequence-result';
8
+ import { WSRequest } from './ws';
9
+ import { GRPCRequest } from './grpc';
10
+ import { Histogram } from './failures';
11
+ export interface SequenceExecutorLike {
12
+ parameters: SequenceExecutorParameters;
13
+ lastResponseBody: string;
14
+ startAndPass(steps: Step[]): Promise<RequestSequenceResult>;
15
+ handlePostScript(step: Step, res: any, index: number): void;
16
+ setTimeParams(requestStartTime: number, beforeTime: number): void;
17
+ setPostParameters(index: number): void;
18
+ prepareRequest(request: LoadmillRequest, index: number): superagent.agent | WSRequest | GRPCRequest;
19
+ sendRequest(request: superagent.agent | WSRequest | GRPCRequest, index: number): Promise<Partial<RequestResponse>>;
20
+ processSuccessfulResponse(index: number, request: LoadmillRequest, res: any): Promise<Histogram>;
21
+ handleExtractions(request: Extractable, res: any): Promise<void>;
22
+ handleAssertions(index: number, step: Assertable): Histogram;
23
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=sequence-executor-like.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence-executor-like.js","sourceRoot":"","sources":["../src/sequence-executor-like.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import { RequestSequenceResult } from './request-sequence-result';
2
+ import { Parameters } from '@loadmill/core/dist/parameters';
3
+ import { Step } from '@loadmill/core/dist/step/step-type';
4
+ export declare const reqIdParamName = "loadmill-request-id";
5
+ export declare const sequence: {
6
+ execute(httpAgent: any, requests: Step[], parameters: Parameters[], domainsWhiteList: string[], sequenceOptions: SequenceOptions, protoFileRootPath?: string | undefined): Promise<RequestSequenceResult>;
7
+ };
8
+ declare type SequenceOptions = {
9
+ increaseResSize?: boolean;
10
+ sequentialParameterPools?: boolean;
11
+ sensitiveData?: boolean;
12
+ sensitiveKeys?: string[];
13
+ metricsKeys?: string[];
14
+ xmlDecode?: boolean;
15
+ };
16
+ export {};