@ably-labs/locust 0.0.3 → 0.0.4

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.
package/lib/Worker.d.ts CHANGED
@@ -48,6 +48,10 @@ interface User {
48
48
  * A function which is registered with a worker to initialise a User.
49
49
  */
50
50
  declare type UserFn = () => User;
51
+ /**
52
+ * A function which is called when an event happens.
53
+ */
54
+ declare type EventFn = (data: any) => void;
51
55
  /**
52
56
  * A Locust worker which connects to a Locust master ZeroMQ socket and spawns
53
57
  * Locust users during an active load test.
@@ -105,6 +109,12 @@ export declare class Worker {
105
109
  * discard outdated messages.
106
110
  */
107
111
  lastReceivedSpawnTimestamp: number;
112
+ /**
113
+ * A set of functions which are called when events happen.
114
+ */
115
+ callbacks: {
116
+ [key: string]: EventFn[];
117
+ };
108
118
  constructor(opts: Options);
109
119
  /**
110
120
  * Register a function to initialise users of the given class name.
@@ -120,6 +130,18 @@ export declare class Worker {
120
130
  *
121
131
  */
122
132
  run(): Promise<void>;
133
+ /**
134
+ * Register a callback to be called when an event happens.
135
+ */
136
+ on(event: string, callback: (data: any) => void): void;
137
+ /**
138
+ * Register a callback to be called when a user starts.
139
+ */
140
+ onUserStart(callback: EventFn): void;
141
+ /**
142
+ * Register a callback to be called when a user stops.
143
+ */
144
+ onUserStop(callback: EventFn): void;
123
145
  /**
124
146
  * Send a protocol message to the Locust master.
125
147
  */
@@ -195,5 +217,9 @@ export declare class Worker {
195
217
  };
196
218
  user_count: number;
197
219
  };
220
+ /**
221
+ * Invoke all callbacks for the given event with the given data.
222
+ */
223
+ emit(event: string, data: any): void;
198
224
  }
199
225
  export {};
package/lib/Worker.js CHANGED
@@ -97,6 +97,7 @@ var Worker = /** @class */ (function () {
97
97
  ],
98
98
  });
99
99
  this.lastReceivedSpawnTimestamp = 0;
100
+ this.callbacks = {};
100
101
  }
101
102
  /**
102
103
  * Register a function to initialise users of the given class name.
@@ -173,6 +174,27 @@ var Worker = /** @class */ (function () {
173
174
  });
174
175
  });
175
176
  };
177
+ /**
178
+ * Register a callback to be called when an event happens.
179
+ */
180
+ Worker.prototype.on = function (event, callback) {
181
+ if (!this.callbacks[event]) {
182
+ this.callbacks[event] = [];
183
+ }
184
+ this.callbacks[event].push(callback);
185
+ };
186
+ /**
187
+ * Register a callback to be called when a user starts.
188
+ */
189
+ Worker.prototype.onUserStart = function (callback) {
190
+ this.on('user.start', callback);
191
+ };
192
+ /**
193
+ * Register a callback to be called when a user stops.
194
+ */
195
+ Worker.prototype.onUserStop = function (callback) {
196
+ this.on('user.stop', callback);
197
+ };
176
198
  /**
177
199
  * Send a protocol message to the Locust master.
178
200
  */
@@ -300,6 +322,7 @@ var Worker = /** @class */ (function () {
300
322
  var user = userFn();
301
323
  user.start();
302
324
  this.users[userClass].push(user);
325
+ this.emit('user.start', { userClass: userClass });
303
326
  }
304
327
  catch (err) {
305
328
  this.logException("Error initialising " + userClass + " user: " + err);
@@ -321,6 +344,7 @@ var Worker = /** @class */ (function () {
321
344
  var user = this.users[userClass].pop();
322
345
  if (user !== undefined) {
323
346
  user.stop();
347
+ this.emit('user.stop', { userClass: userClass });
324
348
  }
325
349
  }
326
350
  };
@@ -394,6 +418,19 @@ var Worker = /** @class */ (function () {
394
418
  user_count: Object.values(this.users).reduce(function (sum, users) { return sum + users.length; }, 0),
395
419
  };
396
420
  };
421
+ /**
422
+ * Invoke all callbacks for the given event with the given data.
423
+ */
424
+ Worker.prototype.emit = function (event, data) {
425
+ var callbacks = this.callbacks[event];
426
+ if (!callbacks) {
427
+ return;
428
+ }
429
+ for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {
430
+ var callback = callbacks_1[_i];
431
+ callback(data);
432
+ }
433
+ };
397
434
  return Worker;
398
435
  }());
399
436
  exports.Worker = Worker;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ably-labs/locust",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "A JavaScript load generator for Locust.io.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",