redis-smq-benchmarks 9.0.9-next.2 → 9.0.9-next.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.
Files changed (30) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/esm/src/common/base-benchmark.d.ts +4 -16
  3. package/dist/esm/src/common/base-benchmark.d.ts.map +1 -1
  4. package/dist/esm/src/common/base-benchmark.js +15 -19
  5. package/dist/esm/src/common/base-benchmark.js.map +1 -1
  6. package/dist/esm/src/consumer-benchmark.d.ts.map +1 -1
  7. package/dist/esm/src/consumer-benchmark.js +9 -13
  8. package/dist/esm/src/consumer-benchmark.js.map +1 -1
  9. package/dist/esm/src/e2e-benchmark.d.ts.map +1 -1
  10. package/dist/esm/src/e2e-benchmark.js +38 -56
  11. package/dist/esm/src/e2e-benchmark.js.map +1 -1
  12. package/dist/esm/src/helpers/calculate-benchmark-result.d.ts +3 -0
  13. package/dist/esm/src/helpers/calculate-benchmark-result.d.ts.map +1 -0
  14. package/dist/esm/src/helpers/calculate-benchmark-result.js +16 -0
  15. package/dist/esm/src/helpers/calculate-benchmark-result.js.map +1 -0
  16. package/dist/esm/src/helpers/create-worker.d.ts +2 -2
  17. package/dist/esm/src/helpers/timing.d.ts +9 -0
  18. package/dist/esm/src/helpers/timing.d.ts.map +1 -0
  19. package/dist/esm/src/helpers/timing.js +29 -0
  20. package/dist/esm/src/helpers/timing.js.map +1 -0
  21. package/dist/esm/src/producer-benchmark.d.ts.map +1 -1
  22. package/dist/esm/src/producer-benchmark.js +9 -13
  23. package/dist/esm/src/producer-benchmark.js.map +1 -1
  24. package/dist/esm/src/threads/consumer-worker-thread.js +11 -8
  25. package/dist/esm/src/threads/consumer-worker-thread.js.map +1 -1
  26. package/dist/esm/src/threads/producer-worker-thread.js +7 -5
  27. package/dist/esm/src/threads/producer-worker-thread.js.map +1 -1
  28. package/dist/esm/src/types/index.d.ts +24 -14
  29. package/dist/esm/src/types/index.d.ts.map +1 -1
  30. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [9.0.9-next.4](https://github.com/weyoss/redis-smq/compare/v9.0.9-next.3...v9.0.9-next.4) (2026-01-09)
7
+
8
+ ### 🐛 Bug Fixes
9
+
10
+ - **redis-smq-benchmarks:** correct worker ID to be zero-based ([4743b02](https://github.com/weyoss/redis-smq/commit/4743b028054e0865a6a12c7d674d158fd4a3bbea))
11
+
12
+ ## [9.0.9-next.3](https://github.com/weyoss/redis-smq/compare/v9.0.9-next.2...v9.0.9-next.3) (2026-01-09)
13
+
14
+ ### ♻️ Code Refactoring
15
+
16
+ - **redis-smq-benchmarks:** improve throughput calculation and benchmark result reporting ([06c7f23](https://github.com/weyoss/redis-smq/commit/06c7f23987943a3993335fe19d612d2abebd5859))
17
+ - **redis-smq-benchmarks:** provide nanosecond-precision throughput measurements ([776f35a](https://github.com/weyoss/redis-smq/commit/776f35a583358b5799e2064f80fe17d067ed51a2))
18
+ - **redis-smq-benchmarks:** use strong typing for thread messages, clean up ([a74baf7](https://github.com/weyoss/redis-smq/commit/a74baf7de3bc63d15d52e656596a336336eb8e2d))
19
+
6
20
  ## [9.0.9-next.2](https://github.com/weyoss/redis-smq/compare/v9.0.9-next.1...v9.0.9-next.2) (2026-01-08)
7
21
 
8
22
  ### 🐛 Bug Fixes
@@ -1,17 +1,7 @@
1
1
  import { IQueueParams } from 'redis-smq';
2
2
  import { ICallback, IRedisConfig } from 'redis-smq-common';
3
- import { EWorkerMessageType, IBenchmarkConfig, IBenchmarkResult } from '../types/index.js';
3
+ import { IBenchmarkConfig, IBenchmarkResult, IWorkerCompleteMessage, TWorkerMessageHandler } from '../types/index.js';
4
4
  import { Worker } from 'worker_threads';
5
- export interface IWorkerMessage {
6
- type: EWorkerMessageType;
7
- data: {
8
- workerId: number;
9
- processed?: number;
10
- timeTaken?: number;
11
- expected?: number;
12
- };
13
- }
14
- export type MessageHandler = (msg: IWorkerMessage) => void;
15
5
  export declare abstract class BaseBenchmark {
16
6
  protected showProgress: boolean;
17
7
  protected redisConfig: IRedisConfig;
@@ -21,18 +11,16 @@ export declare abstract class BaseBenchmark {
21
11
  protected workerPath: string;
22
12
  protected workerLabel: string;
23
13
  protected workers: Worker[];
14
+ protected workerResults: IWorkerCompleteMessage['data'][];
24
15
  protected completedWorkers: number;
25
- protected totalProcessed: number;
26
- protected totalProcessingTime: number;
27
- protected startTime: number;
28
16
  constructor(config: IBenchmarkConfig);
29
17
  protected abstract ensureQueue(): Promise<void> | void;
30
18
  protected calculateMessageDistribution(): {
31
19
  count: number;
32
20
  remainder: number;
33
21
  };
34
- protected createMessageHandler(onComplete: (result: IBenchmarkResult) => void): MessageHandler;
35
- protected createWorkers(onMessage: MessageHandler): Promise<void>;
22
+ protected createMessageHandler(onComplete: (r: IBenchmarkResult) => void): TWorkerMessageHandler;
23
+ protected createWorkers(onMessage: TWorkerMessageHandler): Promise<void>;
36
24
  protected shutdownWorkers(): Promise<void>;
37
25
  abstract run(cb: ICallback<IBenchmarkResult>): void;
38
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-benchmark.d.ts","sourceRoot":"","sources":["../../../../src/common/base-benchmark.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;AAE3D,8BAAsB,aAAa;IACjC,SAAS,CAAC,YAAY,UAAS;IAC/B,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAC9B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,gBAAgB,SAAK;IAC/B,SAAS,CAAC,cAAc,SAAK;IAC7B,SAAS,CAAC,mBAAmB,SAAK;IAClC,SAAS,CAAC,SAAS,SAAK;gBAEZ,MAAM,EAAE,gBAAgB;IAUpC,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAEtD,SAAS,CAAC,4BAA4B,IAAI;QACxC,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB;IAMD,SAAS,CAAC,oBAAoB,CAC5B,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAC7C,cAAc;cAiCD,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;cAgCvD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;aAShC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAC3D"}
1
+ {"version":3,"file":"base-benchmark.d.ts","sourceRoot":"","sources":["../../../../src/common/base-benchmark.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAEL,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EAEtB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,8BAAsB,aAAa;IACjC,SAAS,CAAC,YAAY,UAAS;IAC/B,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;IAC9B,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,aAAa,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAM;IAC/D,SAAS,CAAC,gBAAgB,SAAK;gBAEnB,MAAM,EAAE,gBAAgB;IAUpC,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAEtD,SAAS,CAAC,4BAA4B,IAAI;QACxC,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB;IAMD,SAAS,CAAC,oBAAoB,CAC5B,UAAU,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,GACxC,qBAAqB;cA+BR,aAAa,CAC3B,SAAS,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC;cA8BA,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;aAShC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAC3D"}
@@ -1,5 +1,7 @@
1
1
  import { EWorkerMessageType, } from '../types/index.js';
2
2
  import { createWorker } from '../helpers/create-worker.js';
3
+ import { HighResTimer } from '../helpers/timing.js';
4
+ import { calculateBenchmarkResult } from '../helpers/calculate-benchmark-result.js';
3
5
  export class BaseBenchmark {
4
6
  showProgress = false;
5
7
  redisConfig;
@@ -9,10 +11,8 @@ export class BaseBenchmark {
9
11
  workerPath;
10
12
  workerLabel;
11
13
  workers = [];
14
+ workerResults = [];
12
15
  completedWorkers = 0;
13
- totalProcessed = 0;
14
- totalProcessingTime = 0;
15
- startTime = 0;
16
16
  constructor(config) {
17
17
  this.redisConfig = config.redisConfig;
18
18
  this.queue = config.queue;
@@ -31,37 +31,33 @@ export class BaseBenchmark {
31
31
  return (msg) => {
32
32
  if (msg.type === EWorkerMessageType.COMPLETED) {
33
33
  this.completedWorkers++;
34
+ this.workerResults.push(msg.data);
34
35
  const { workerId, processed, timeTaken } = msg.data;
35
- this.totalProcessed += Number(processed);
36
- this.totalProcessingTime += Number(timeTaken);
37
- console.log(`${this.workerLabel} ${workerId} completed: ${processed} messages in ${(Number(timeTaken) / 1000).toFixed(2)}s (${(Number(processed) / (Number(timeTaken) / 1000)).toFixed(0)} msg/s)`);
38
- if (this.completedWorkers === this.workerCount) {
39
- const totalTime = Date.now() - this.startTime;
40
- onComplete({
41
- totalTime,
42
- totalWorkerTime: this.totalProcessingTime,
43
- total: this.totalProcessed,
44
- workerCount: this.workerCount,
45
- });
46
- }
36
+ console.log(`${this.workerLabel} ${workerId} completed: ${processed} messages in ${HighResTimer.format(timeTaken)} (${(processed / HighResTimer.toSeconds(timeTaken)).toFixed(0)} msg/s)`);
37
+ if (this.completedWorkers === this.workerCount)
38
+ this.shutdownWorkers()
39
+ .then(() => {
40
+ const r = calculateBenchmarkResult(this.workerResults);
41
+ onComplete(r);
42
+ })
43
+ .catch(() => void 0);
47
44
  }
48
45
  else if (msg.type === EWorkerMessageType.PROGRESS &&
49
46
  this.showProgress) {
50
- const { workerId, processed } = msg.data;
51
- console.log(`${this.workerLabel} ${workerId} progress: ${processed} messages`);
47
+ const { workerId, progress } = msg.data;
48
+ console.log(`${this.workerLabel} ${workerId} progress: ${progress} messages`);
52
49
  }
53
50
  };
54
51
  }
55
52
  async createWorkers(onMessage) {
56
53
  const { count: messagesPerWorker, remainder: remainingMessages } = this.calculateMessageDistribution();
57
54
  console.log(`Messages per ${this.workerLabel} (approx): ${messagesPerWorker}`);
58
- this.startTime = Date.now();
59
55
  for (let i = 0; i < this.workerCount; i++) {
60
56
  let workerMessageCount = messagesPerWorker;
61
57
  if (i < remainingMessages) {
62
58
  workerMessageCount += 1;
63
59
  }
64
- console.log(`${this.workerLabel} ${i + 1} will handle ${workerMessageCount} messages`);
60
+ console.log(`${this.workerLabel} ${i} will handle ${workerMessageCount} messages`);
65
61
  const worker = createWorker({
66
62
  redisConfig: this.redisConfig,
67
63
  workerPath: this.workerPath,
@@ -1 +1 @@
1
- {"version":3,"file":"base-benchmark.js","sourceRoot":"","sources":["../../../../src/common/base-benchmark.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-benchmark.js","sourceRoot":"","sources":["../../../../src/common/base-benchmark.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"consumer-benchmark.d.ts","sourceRoot":"","sources":["../../../src/consumer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,qBAAa,iBAAkB,SAAQ,aAAa;cAClC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;cAS5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAStC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI;CA6ClD"}
1
+ {"version":3,"file":"consumer-benchmark.d.ts","sourceRoot":"","sources":["../../../src/consumer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,qBAAa,iBAAkB,SAAQ,aAAa;cAClC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;cAS5B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAStC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAqClD"}
@@ -2,6 +2,7 @@ import { async } from 'redis-smq-common';
2
2
  import { ensureQueue } from './helpers/ensure-queue.js';
3
3
  import { prefillQueue } from './helpers/prefill-queue.js';
4
4
  import { BaseBenchmark } from './common/base-benchmark.js';
5
+ import { HighResTimer } from './helpers/timing.js';
5
6
  export class ConsumerBenchmark extends BaseBenchmark {
6
7
  async ensureQueue() {
7
8
  return new Promise((resolve, reject) => {
@@ -26,20 +27,14 @@ export class ConsumerBenchmark extends BaseBenchmark {
26
27
  run(cb) {
27
28
  console.log('Starting consumer throughput benchmark...');
28
29
  console.log(`Queue: ${this.queue.ns}/${this.queue.name} | Messages: ${this.totalMessages} | Consumers: ${this.workerCount}`);
29
- const onComplete = (result) => {
30
- this.shutdownWorkers()
31
- .then(() => {
32
- const totalTime = Date.now() - this.startTime;
33
- console.log('\n========== BENCHMARK COMPLETE ==========');
34
- console.log(`Total messages consumed: ${result.total}`);
35
- console.log(`Total time: ${(totalTime / 1000).toFixed(2)}s`);
36
- console.log(`Overall throughput: ${(result.total / (totalTime / 1000)).toFixed(0)} messages/second`);
37
- console.log('========================================\n');
38
- cb(null, result);
39
- })
40
- .catch((err) => cb(err));
30
+ const onComplete = (r) => {
31
+ console.log('\n========== BENCHMARK COMPLETE ==========');
32
+ console.log(`Total messages consumed: ${r.totalMessages}`);
33
+ console.log(`Total time: ${HighResTimer.format(r.totalTimeNs)}`);
34
+ console.log(`Overall throughput: ${r.throughput} messages/second`);
35
+ console.log('========================================\n');
36
+ cb();
41
37
  };
42
- const messageHandler = this.createMessageHandler(onComplete);
43
38
  async.series([
44
39
  (cb) => this.ensureQueue()
45
40
  .then(() => cb())
@@ -48,6 +43,7 @@ export class ConsumerBenchmark extends BaseBenchmark {
48
43
  .then(() => cb())
49
44
  .catch(cb),
50
45
  (cb) => {
46
+ const messageHandler = this.createMessageHandler(onComplete);
51
47
  this.createWorkers(messageHandler)
52
48
  .then(() => cb())
53
49
  .catch(cb);
@@ -1 +1 @@
1
- {"version":3,"file":"consumer-benchmark.js","sourceRoot":"","sources":["../../../src/consumer-benchmark.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consumer-benchmark.js","sourceRoot":"","sources":["../../../src/consumer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACxC,KAAK,CAAC,WAAW;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,YAAY;QAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnD,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAC,EAA+B;QACxC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CACT,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,IAAI,CAAC,aAAa,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAChH,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,EAAE;YACzC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,UAAU,kBAAkB,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,EAAE,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,KAAK,CAAC,MAAM,CACV;YACE,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,CAAC,WAAW,EAAE;iBACf,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;iBAChB,KAAK,CAAC,EAAE,CAAC;YACd,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,CAAC,YAAY,EAAE;iBAChB,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;iBAChB,KAAK,CAAC,EAAE,CAAC;YACd,CAAC,EAAE,EAAE,EAAE;gBACL,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBAC7D,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;qBAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;qBAChB,KAAK,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;SACF,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,GAAG;gBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"e2e-benchmark.d.ts","sourceRoot":"","sources":["../../../src/e2e-benchmark.ts"],"names":[],"mappings":"AAUA,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAiB1B,wBAAgB,eAAe,CAC7B,MAAM,EAAE,mBAAmB,EAC3B,EAAE,EAAE,SAAS,CAAC,mBAAmB,CAAC,QAuOnC"}
1
+ {"version":3,"file":"e2e-benchmark.d.ts","sourceRoot":"","sources":["../../../src/e2e-benchmark.ts"],"names":[],"mappings":"AAUA,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,kBAAkB,CAAC;AAkB1B,wBAAgB,eAAe,CAC7B,MAAM,EAAE,mBAAmB,EAC3B,EAAE,EAAE,SAAS,CAAC,mBAAmB,CAAC,QA8MnC"}
@@ -2,94 +2,79 @@ import { ensureQueue } from './helpers/ensure-queue.js';
2
2
  import { async } from 'redis-smq-common';
3
3
  import { EWorkerMessageType, } from './types/index.js';
4
4
  import { createWorker } from './helpers/create-worker.js';
5
+ import { HighResTimer } from './helpers/timing.js';
6
+ import { calculateBenchmarkResult } from './helpers/calculate-benchmark-result.js';
5
7
  export function runE2EBenchmark(config, cb) {
6
8
  const { redisConfig, queue, totalMessages, producerWorkerPath, consumerWorkerPath, producerCount, consumerCount, showProgress, } = config;
7
9
  console.log('Starting end-to-end throughput benchmark...');
8
10
  console.log(`Queue: ${queue.ns}/${queue.name} | Messages: ${totalMessages} | Producers: ${producerCount} | Consumers: ${consumerCount}`);
9
11
  const allWorkers = [];
12
+ const consumerWorkerResults = [];
13
+ const producerWorkerResults = [];
10
14
  let completedProducers = 0;
11
15
  let completedConsumers = 0;
12
- let totalProduced = 0;
13
- let totalConsumed = 0;
14
- let totalProductionTime = 0;
15
- let totalConsumptionTime = 0;
16
- let productionStartTime = 0;
17
- let consumptionStartTime = 0;
18
- let productionEndTime = 0;
19
- let consumptionEndTime = 0;
20
- let benchmarkStartTime = 0;
21
- let benchmarkEndTime = 0;
22
16
  const onProducerMessage = (msg) => {
23
17
  if (msg.type === EWorkerMessageType.COMPLETED) {
24
18
  completedProducers++;
19
+ producerWorkerResults.push(msg.data);
25
20
  const { workerId, processed, timeTaken } = msg.data;
26
- totalProduced += Number(processed);
27
- totalProductionTime += Number(timeTaken);
28
- productionEndTime = Date.now();
29
- console.log(`Producer ${workerId} completed: ${processed} messages in ${(Number(timeTaken) / 1000).toFixed(2)}s (${(Number(processed) / (Number(timeTaken) / 1000)).toFixed(0)} msg/s)`);
21
+ console.log(`Producer ${workerId} completed: ${processed} messages in ${HighResTimer.format(timeTaken)} (${(processed / HighResTimer.toSeconds(timeTaken)).toFixed(0)} msg/s)`);
30
22
  checkBenchmarkCompletion();
31
23
  }
32
24
  else if (msg.type === EWorkerMessageType.PROGRESS && showProgress) {
33
- const { workerId, processed } = msg.data;
34
- console.log(`Producer ${workerId} progress: ${processed} messages`);
25
+ const { workerId, progress } = msg.data;
26
+ console.log(`Producer ${workerId} progress: ${progress} messages`);
35
27
  }
36
28
  };
37
29
  const onConsumerMessage = (msg) => {
38
30
  if (msg.type === EWorkerMessageType.COMPLETED) {
39
31
  completedConsumers++;
32
+ consumerWorkerResults.push(msg.data);
40
33
  const { workerId, processed, timeTaken } = msg.data;
41
- totalConsumed += Number(processed);
42
- totalConsumptionTime += Number(timeTaken);
43
- consumptionEndTime = Date.now();
44
- console.log(`Consumer ${workerId} completed: ${processed} messages in ${(Number(timeTaken) / 1000).toFixed(2)}s (${(Number(processed) / (Number(timeTaken) / 1000)).toFixed(0)} msg/s)`);
34
+ console.log(`Consumer ${workerId} completed: ${processed} messages in ${HighResTimer.format(timeTaken)} (${(processed / HighResTimer.toSeconds(timeTaken)).toFixed(0)} msg/s)`);
45
35
  checkBenchmarkCompletion();
46
36
  }
47
37
  else if (msg.type === EWorkerMessageType.PROGRESS && showProgress) {
48
- const { workerId, processed } = msg.data;
49
- console.log(`Consumer ${workerId} progress: ${processed} messages`);
38
+ const { workerId, progress } = msg.data;
39
+ console.log(`Consumer ${workerId} progress: ${progress} messages`);
50
40
  }
51
41
  };
52
42
  const checkBenchmarkCompletion = () => {
53
43
  if (completedProducers === producerCount &&
54
44
  completedConsumers === consumerCount) {
55
- benchmarkEndTime = Date.now();
56
- const totalTime = benchmarkEndTime - benchmarkStartTime;
57
- const productionTime = productionEndTime - productionStartTime;
58
- const consumptionTime = consumptionEndTime - consumptionStartTime;
59
- const productionThroughput = totalProduced / (productionTime / 1000);
60
- const consumptionThroughput = totalConsumed / (consumptionTime / 1000);
61
45
  console.log('\n========== E2E BENCHMARK COMPLETE ==========');
46
+ const pResult = calculateBenchmarkResult(producerWorkerResults);
47
+ const cResult = calculateBenchmarkResult(consumerWorkerResults);
48
+ const result = {
49
+ totalTime: Math.max(pResult.totalTimeNs, cResult.totalTimeNs),
50
+ totalMessages: pResult.totalMessages + cResult.totalMessages,
51
+ workerCount: producerCount + consumerCount,
52
+ productionTime: pResult.totalTimeNs,
53
+ consumptionTime: cResult.totalTimeNs,
54
+ messagesProduced: pResult.totalMessages,
55
+ messagesConsumed: cResult.totalMessages,
56
+ productionThroughput: pResult.throughput,
57
+ consumptionThroughput: cResult.throughput,
58
+ };
62
59
  console.log(`Production Phase:`);
63
- console.log(` Total produced: ${totalProduced}`);
64
- console.log(` Production time: ${(productionTime / 1000).toFixed(2)}s`);
65
- console.log(` Production throughput: ${productionThroughput.toFixed(0)} msg/s`);
60
+ console.log(` Total produced: ${result.messagesProduced}`);
61
+ console.log(` Production time: ${HighResTimer.format(result.productionTime)}`);
62
+ console.log(` Production throughput: ${result.productionThroughput} msg/s`);
66
63
  console.log(`\nConsumption Phase:`);
67
- console.log(` Total consumed: ${totalConsumed}`);
68
- console.log(` Consumption time: ${(consumptionTime / 1000).toFixed(2)}s`);
69
- console.log(` Consumption throughput: ${consumptionThroughput.toFixed(0)} msg/s`);
64
+ console.log(` Total consumed: ${result.messagesConsumed}`);
65
+ console.log(` Consumption time: ${HighResTimer.format(result.consumptionTime)}`);
66
+ console.log(` Consumption throughput: ${result.consumptionThroughput} msg/s`);
70
67
  console.log(`\nEnd-to-End:`);
71
- console.log(` Total time: ${(totalTime / 1000).toFixed(2)}s`);
72
- console.log(` Overall throughput: ${(totalProduced / (totalTime / 1000)).toFixed(0)} msg/s`);
73
- console.log(` System backlog: ${totalProduced - totalConsumed} messages`);
74
- if (totalProduced === totalConsumed) {
68
+ console.log(` Total time: ${HighResTimer.format(result.totalTime)}`);
69
+ console.log(` Overall throughput: ${(result.messagesProduced / HighResTimer.toSeconds(result.totalTime)).toFixed(0)} msg/s`);
70
+ console.log(` System backlog: ${result.messagesProduced - result.messagesConsumed} messages`);
71
+ if (result.messagesProduced === result.messagesConsumed) {
75
72
  console.log(` Status: All messages processed successfully ✓`);
76
73
  }
77
74
  else {
78
- console.log(` Status: ${totalProduced - totalConsumed} messages not consumed ⚠️`);
75
+ console.log(` Status: ${result.messagesProduced - result.messagesConsumed} messages not consumed ⚠️`);
79
76
  }
80
77
  console.log('============================================\n');
81
- const result = {
82
- totalTime,
83
- totalWorkerTime: totalProductionTime + totalConsumptionTime,
84
- total: totalProduced + totalConsumed,
85
- workerCount: producerCount + consumerCount,
86
- productionTime,
87
- consumptionTime,
88
- messagesProduced: totalProduced,
89
- messagesConsumed: totalConsumed,
90
- productionThroughput,
91
- consumptionThroughput,
92
- };
93
78
  const shutdownPromises = Promise.all(allWorkers.map((worker) => {
94
79
  worker.removeAllListeners();
95
80
  return worker.terminate();
@@ -107,16 +92,13 @@ export function runE2EBenchmark(config, cb) {
107
92
  const remainingConsumers = totalMessages % consumerCount;
108
93
  console.log(`Messages per producer (approx): ${messagesPerProducer}`);
109
94
  console.log(`Messages per consumer (approx): ${messagesPerConsumer}`);
110
- benchmarkStartTime = Date.now();
111
- productionStartTime = Date.now();
112
- consumptionStartTime = Date.now();
113
95
  try {
114
96
  for (let i = 0; i < producerCount; i++) {
115
97
  let producerMessageCount = messagesPerProducer;
116
98
  if (i < remainingProducers) {
117
99
  producerMessageCount += 1;
118
100
  }
119
- console.log(`Producer ${i + 1} will produce ${producerMessageCount} messages`);
101
+ console.log(`Producer ${i} will produce ${producerMessageCount} messages`);
120
102
  const producer = createWorker({
121
103
  workerPath: producerWorkerPath,
122
104
  workerId: i,
@@ -132,7 +114,7 @@ export function runE2EBenchmark(config, cb) {
132
114
  if (i < remainingConsumers) {
133
115
  consumerMessageCount += 1;
134
116
  }
135
- console.log(`Consumer ${i + 1} will consume ${consumerMessageCount} messages`);
117
+ console.log(`Consumer ${i} will consume ${consumerMessageCount} messages`);
136
118
  const consumer = createWorker({
137
119
  workerPath: consumerWorkerPath,
138
120
  workerId: i,
@@ -1 +1 @@
1
- {"version":3,"file":"e2e-benchmark.js","sourceRoot":"","sources":["../../../src/e2e-benchmark.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"e2e-benchmark.js","sourceRoot":"","sources":["../../../src/e2e-benchmark.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAa,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,kBAAkB,GAKnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAcnF,MAAM,UAAU,eAAe,CAC7B,MAA2B,EAC3B,EAAkC;IAElC,MAAM,EACJ,WAAW,EACX,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,YAAY,GACb,GAAG,MAAM,CAAC;IAEX,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CACT,UAAU,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,gBAAgB,aAAa,iBAAiB,aAAa,iBAAiB,aAAa,EAAE,CAC5H,CAAC;IAEF,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,qBAAqB,GAAqC,EAAE,CAAC;IACnE,MAAM,qBAAqB,GAAqC,EAAE,CAAC;IAEnE,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,MAAM,iBAAiB,GAA0B,CAAC,GAAG,EAAE,EAAE;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,SAAS,EAAE,CAAC;YAC9C,kBAAkB,EAAE,CAAC;YACrB,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAEpD,OAAO,CAAC,GAAG,CACT,YAAY,QAAQ,eAAe,SAAS,gBAAgB,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CACnK,CAAC;YAEF,wBAAwB,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,cAAc,QAAQ,WAAW,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAA0B,CAAC,GAAG,EAAE,EAAE;QACvD,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,SAAS,EAAE,CAAC;YAC9C,kBAAkB,EAAE,CAAC;YACrB,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAEpD,OAAO,CAAC,GAAG,CACT,YAAY,QAAQ,eAAe,SAAS,gBAAgB,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CACnK,CAAC;YAEF,wBAAwB,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,cAAc,QAAQ,WAAW,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,wBAAwB,GAAG,GAAG,EAAE;QAEpC,IACE,kBAAkB,KAAK,aAAa;YACpC,kBAAkB,KAAK,aAAa,EACpC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC9D,MAAM,OAAO,GAAG,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,wBAAwB,CAAC,qBAAqB,CAAC,CAAC;YAChE,MAAM,MAAM,GAAwB;gBAClC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC;gBAC7D,aAAa,EAAE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa;gBAC5D,WAAW,EAAE,aAAa,GAAG,aAAa;gBAC1C,cAAc,EAAE,OAAO,CAAC,WAAW;gBACnC,eAAe,EAAE,OAAO,CAAC,WAAW;gBACpC,gBAAgB,EAAE,OAAO,CAAC,aAAa;gBACvC,gBAAgB,EAAE,OAAO,CAAC,aAAa;gBACvC,oBAAoB,EAAE,OAAO,CAAC,UAAU;gBACxC,qBAAqB,EAAE,OAAO,CAAC,UAAU;aAC1C,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CACT,sBAAsB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CACnE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,4BAA4B,MAAM,CAAC,oBAAoB,QAAQ,CAChE,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CACT,uBAAuB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CACrE,CAAC;YACF,OAAO,CAAC,GAAG,CACT,6BAA6B,MAAM,CAAC,qBAAqB,QAAQ,CAClE,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,iBAAiB,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CACT,yBAAyB,CAAC,MAAM,CAAC,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CACjH,CAAC;YACF,OAAO,CAAC,GAAG,CACT,qBAAqB,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,WAAW,CAClF,CAAC;YAEF,IAAI,MAAM,CAAC,gBAAgB,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,aAAa,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,2BAA2B,CAC1F,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAG9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAClC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC,CAAC,CACH,CAAC;YACF,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,MAAM,CACV;QACE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9B,CAAC,EAAE,EAAE,EAAE;YACL,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YAGrD,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC;YACtE,MAAM,kBAAkB,GAAG,aAAa,GAAG,aAAa,CAAC;YAEzD,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC;YACtE,MAAM,kBAAkB,GAAG,aAAa,GAAG,aAAa,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,mCAAmC,mBAAmB,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,mCAAmC,mBAAmB,EAAE,CAAC,CAAC;YAEtE,IAAI,CAAC;gBAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,oBAAoB,GAAG,mBAAmB,CAAC;oBAC/C,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC;wBAC3B,oBAAoB,IAAI,CAAC,CAAC;oBAC5B,CAAC;oBAED,OAAO,CAAC,GAAG,CACT,YAAY,CAAC,iBAAiB,oBAAoB,WAAW,CAC9D,CAAC;oBAEF,MAAM,QAAQ,GAAG,YAAY,CAAC;wBAC5B,UAAU,EAAE,kBAAkB;wBAC9B,QAAQ,EAAE,CAAC;wBACX,gBAAgB,EAAE,oBAAoB;wBACtC,WAAW;wBACX,KAAK;wBACL,SAAS,EAAE,iBAAiB;qBAC7B,CAAC,CAAC;oBAEH,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;gBAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;oBACvC,IAAI,oBAAoB,GAAG,mBAAmB,CAAC;oBAC/C,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC;wBAC3B,oBAAoB,IAAI,CAAC,CAAC;oBAC5B,CAAC;oBAED,OAAO,CAAC,GAAG,CACT,YAAY,CAAC,iBAAiB,oBAAoB,WAAW,CAC9D,CAAC;oBAEF,MAAM,QAAQ,GAAG,YAAY,CAAC;wBAC5B,UAAU,EAAE,kBAAkB;wBAC9B,QAAQ,EAAE,CAAC;wBACX,gBAAgB,EAAE,oBAAoB;wBACtC,WAAW;wBACX,KAAK;wBACL,SAAS,EAAE,iBAAiB;qBAC7B,CAAC,CAAC;oBAEH,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;gBAED,EAAE,EAAE,CAAC;YACP,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;KACF,EACD,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YAE9C,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CACjE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IBenchmarkResult, IWorkerCompleteMessage } from '../types/index.js';
2
+ export declare function calculateBenchmarkResult(resultData: IWorkerCompleteMessage['data'][]): IBenchmarkResult;
3
+ //# sourceMappingURL=calculate-benchmark-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-benchmark-result.d.ts","sourceRoot":"","sources":["../../../../src/helpers/calculate-benchmark-result.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG7E,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAAE,GAC3C,gBAAgB,CAalB"}
@@ -0,0 +1,16 @@
1
+ import { HighResTimer } from './timing.js';
2
+ export function calculateBenchmarkResult(resultData) {
3
+ const totalMessages = resultData.reduce((sum, c) => sum + c.processed, 0);
4
+ const maxTimeNs = Math.max(...resultData.map((c) => c.timeTaken));
5
+ let throughput = 0;
6
+ if (maxTimeNs) {
7
+ const maxTimeSeconds = HighResTimer.toSeconds(maxTimeNs);
8
+ throughput = Number((totalMessages / maxTimeSeconds).toFixed(0));
9
+ }
10
+ return {
11
+ totalMessages,
12
+ totalTimeNs: maxTimeNs,
13
+ throughput,
14
+ };
15
+ }
16
+ //# sourceMappingURL=calculate-benchmark-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-benchmark-result.js","sourceRoot":"","sources":["../../../../src/helpers/calculate-benchmark-result.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,wBAAwB,CACtC,UAA4C;IAE5C,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzD,UAAU,GAAG,MAAM,CAAC,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO;QACL,aAAa;QACb,WAAW,EAAE,SAAS;QACtB,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Worker } from 'worker_threads';
2
- import { IWorkerMessage } from '../types/index.js';
2
+ import { TWorkerMessage } from '../types/index.js';
3
3
  import { IQueueParams } from 'redis-smq';
4
4
  import { IRedisConfig } from 'redis-smq-common';
5
5
  export declare function createWorker(params: {
@@ -8,6 +8,6 @@ export declare function createWorker(params: {
8
8
  queue: IQueueParams;
9
9
  expectedMessages: number;
10
10
  redisConfig: IRedisConfig;
11
- onMessage: (message: IWorkerMessage) => void;
11
+ onMessage: (message: TWorkerMessage) => void;
12
12
  }): Worker;
13
13
  //# sourceMappingURL=create-worker.d.ts.map
@@ -0,0 +1,9 @@
1
+ export declare class HighResTimer {
2
+ static now(): number;
3
+ static since(start: number): number;
4
+ static toMicroseconds(ns: number): number;
5
+ static toMilliseconds(ns: number): number;
6
+ static toSeconds(ns: number): number;
7
+ static format(ns: number): string;
8
+ }
9
+ //# sourceMappingURL=timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../../../src/helpers/timing.ts"],"names":[],"mappings":"AASA,qBAAa,YAAY;IACvB,MAAM,CAAC,GAAG,IAAI,MAAM;IAMpB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKnC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIzC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIzC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAIpC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;CAMlC"}
@@ -0,0 +1,29 @@
1
+ export class HighResTimer {
2
+ static now() {
3
+ const [seconds, nanoseconds] = process.hrtime();
4
+ return seconds * 1e9 + nanoseconds;
5
+ }
6
+ static since(start) {
7
+ const now = this.now();
8
+ return now - start;
9
+ }
10
+ static toMicroseconds(ns) {
11
+ return ns / 1000;
12
+ }
13
+ static toMilliseconds(ns) {
14
+ return ns / 1e6;
15
+ }
16
+ static toSeconds(ns) {
17
+ return ns / 1e9;
18
+ }
19
+ static format(ns) {
20
+ if (ns < 1000)
21
+ return `${ns.toFixed(0)}ns`;
22
+ if (ns < 1e6)
23
+ return `${(ns / 1000).toFixed(2)}µs`;
24
+ if (ns < 1e9)
25
+ return `${(ns / 1e6).toFixed(2)}ms`;
26
+ return `${(ns / 1e9).toFixed(2)}s`;
27
+ }
28
+ }
29
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../../../src/helpers/timing.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,GAAG;QAER,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,OAAO,GAAG,GAAG,GAAG,WAAW,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,EAAU;QAC9B,OAAO,EAAE,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,EAAU;QAC9B,OAAO,EAAE,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,EAAU;QACzB,OAAO,EAAE,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAU;QACtB,IAAI,EAAE,GAAG,IAAI;YAAE,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,IAAI,EAAE,GAAG,GAAG;YAAE,OAAO,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,IAAI,EAAE,GAAG,GAAG;YAAE,OAAO,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,OAAO,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACrC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"producer-benchmark.d.ts","sourceRoot":"","sources":["../../../src/producer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,qBAAa,iBAAkB,SAAQ,aAAa;cAClC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAyClD"}
1
+ {"version":3,"file":"producer-benchmark.d.ts","sourceRoot":"","sources":["../../../src/producer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,qBAAa,iBAAkB,SAAQ,aAAa;cAClC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAiClD"}
@@ -1,6 +1,7 @@
1
1
  import { async } from 'redis-smq-common';
2
2
  import { ensureQueue } from './helpers/ensure-queue.js';
3
3
  import { BaseBenchmark } from './common/base-benchmark.js';
4
+ import { HighResTimer } from './helpers/timing.js';
4
5
  export class ProducerBenchmark extends BaseBenchmark {
5
6
  async ensureQueue() {
6
7
  return new Promise((resolve, reject) => {
@@ -15,25 +16,20 @@ export class ProducerBenchmark extends BaseBenchmark {
15
16
  run(cb) {
16
17
  console.log('Starting producer throughput benchmark...');
17
18
  console.log(`Queue: ${this.queue.ns}/${this.queue.name} | Messages: ${this.totalMessages} | Producers: ${this.workerCount}`);
18
- const onComplete = (result) => {
19
- this.shutdownWorkers()
20
- .then(() => {
21
- const totalTime = Date.now() - this.startTime;
22
- console.log('\n========== BENCHMARK COMPLETE ==========');
23
- console.log(`Total messages produced: ${result.total}`);
24
- console.log(`Total time: ${(totalTime / 1000).toFixed(2)}s`);
25
- console.log(`Overall throughput: ${(result.total / (totalTime / 1000)).toFixed(0)} messages/second`);
26
- console.log('========================================\n');
27
- cb(null, result);
28
- })
29
- .catch((err) => cb(err));
19
+ const onComplete = (r) => {
20
+ console.log('\n========== BENCHMARK COMPLETE ==========');
21
+ console.log(`Total messages produced: ${r.totalMessages}`);
22
+ console.log(`Total time: ${HighResTimer.format(r.totalTimeNs)}`);
23
+ console.log(`Overall throughput: ${r.throughput} messages/second`);
24
+ console.log('========================================\n');
25
+ cb();
30
26
  };
31
- const messageHandler = this.createMessageHandler(onComplete);
32
27
  async.series([
33
28
  (cb) => this.ensureQueue()
34
29
  .then(() => cb())
35
30
  .catch(cb),
36
31
  (cb) => {
32
+ const messageHandler = this.createMessageHandler(onComplete);
37
33
  this.createWorkers(messageHandler)
38
34
  .then(() => cb())
39
35
  .catch(cb);
@@ -1 +1 @@
1
- {"version":3,"file":"producer-benchmark.js","sourceRoot":"","sources":["../../../src/producer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACxC,KAAK,CAAC,WAAW;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAC,EAA+B;QACxC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CACT,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,IAAI,CAAC,aAAa,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAChH,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,MAAwB,EAAE,EAAE;YAC9C,IAAI,CAAC,eAAe,EAAE;iBACnB,IAAI,CAAC,GAAG,EAAE;gBACT,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,4BAA4B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CACT,uBAAuB,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CACxF,CAAC;gBACF,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAE7D,KAAK,CAAC,MAAM,CACV;YACE,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,CAAC,WAAW,EAAE;iBACf,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;iBAChB,KAAK,CAAC,EAAE,CAAC;YACd,CAAC,EAAE,EAAE,EAAE;gBACL,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;qBAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;qBAChB,KAAK,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;SACF,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,GAAG;gBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"producer-benchmark.js","sourceRoot":"","sources":["../../../src/producer-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACxC,KAAK,CAAC,WAAW;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9B,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAC,EAA+B;QACxC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CACT,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,gBAAgB,IAAI,CAAC,aAAa,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAChH,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,EAAE;YACzC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,UAAU,kBAAkB,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,EAAE,EAAE,CAAC;QACP,CAAC,CAAC;QAEF,KAAK,CAAC,MAAM,CACV;YACE,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,CAAC,WAAW,EAAE;iBACf,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;iBAChB,KAAK,CAAC,EAAE,CAAC;YACd,CAAC,EAAE,EAAE,EAAE;gBACL,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBAC7D,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;qBAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;qBAChB,KAAK,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;SACF,EACD,CAAC,GAAG,EAAE,EAAE;YACN,IAAI,GAAG;gBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,7 +1,8 @@
1
1
  import { parentPort, workerData } from 'worker_threads';
2
2
  import { RedisSMQ } from 'redis-smq';
3
3
  import { async } from 'redis-smq-common';
4
- import { EWorkerMessageType } from '../types/index.js';
4
+ import { EWorkerMessageType, } from '../types/index.js';
5
+ import { HighResTimer } from '../helpers/timing.js';
5
6
  const { queue, redisConfig, workerId, expectedMessages } = workerData;
6
7
  let consumedCount = 0;
7
8
  let startTime = 0;
@@ -12,26 +13,27 @@ RedisSMQ.initialize(redisConfig, (err) => {
12
13
  async.series([
13
14
  (cb) => consumer.run(cb),
14
15
  (cb) => {
15
- startTime = Date.now();
16
+ startTime = HighResTimer.now();
16
17
  consumer.consume(queue, (_msg, ack) => {
17
18
  consumedCount++;
18
19
  ack();
19
20
  if (expectedMessages > 0 &&
20
21
  consumedCount % Math.max(1, Math.floor(expectedMessages / 10)) ===
21
22
  0) {
22
- parentPort?.postMessage({
23
+ const message = {
23
24
  type: EWorkerMessageType.PROGRESS,
24
- data: { workerId, processed: consumedCount },
25
- });
25
+ data: { workerId, progress: consumedCount },
26
+ };
27
+ parentPort?.postMessage(message);
26
28
  }
27
29
  if (expectedMessages > 0 && consumedCount >= expectedMessages) {
28
- const timeTaken = Date.now() - startTime;
30
+ const timeTaken = HighResTimer.now() - startTime;
29
31
  consumer.cancel(queue, (err) => {
30
32
  if (err) {
31
33
  console.error(`Worker ${workerId} error cancelling consumer:`, err);
32
34
  return cb(err);
33
35
  }
34
- parentPort?.postMessage({
36
+ const message = {
35
37
  type: EWorkerMessageType.COMPLETED,
36
38
  data: {
37
39
  workerId,
@@ -39,7 +41,8 @@ RedisSMQ.initialize(redisConfig, (err) => {
39
41
  timeTaken,
40
42
  expected: expectedMessages,
41
43
  },
42
- });
44
+ };
45
+ parentPort?.postMessage(message);
43
46
  cb();
44
47
  });
45
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"consumer-worker-thread.js","sourceRoot":"","sources":["../../../../src/threads/consumer-worker-thread.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAe,MAAM,mBAAmB,CAAC;AAEpE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GACtD,UAAyB,CAAC;AAE5B,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;IACvC,IAAI,GAAG;QAAE,MAAM,GAAG,CAAC;IACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAE3C,KAAK,CAAC,MAAM,CACV;QACE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,CAAC,EAAE,EAAE,EAAE;YACL,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,QAAQ,CAAC,OAAO,CACd,KAAK,EACL,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACZ,aAAa,EAAE,CAAC;gBAChB,GAAG,EAAE,CAAC;gBAGN,IACE,gBAAgB,GAAG,CAAC;oBACpB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;wBAC5D,CAAC,EACH,CAAC;oBACD,UAAU,EAAE,WAAW,CAAC;wBACtB,IAAI,EAAE,kBAAkB,CAAC,QAAQ;wBACjC,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE;qBAC7C,CAAC,CAAC;gBACL,CAAC;gBAGD,IAAI,gBAAgB,GAAG,CAAC,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;oBAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACzC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;wBAC7B,IAAI,GAAG,EAAE,CAAC;4BACR,OAAO,CAAC,KAAK,CACX,UAAU,QAAQ,6BAA6B,EAC/C,GAAG,CACJ,CAAC;4BACF,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;wBACjB,CAAC;wBACD,UAAU,EAAE,WAAW,CAAC;4BACtB,IAAI,EAAE,kBAAkB,CAAC,SAAS;4BAClC,IAAI,EAAE;gCACJ,QAAQ;gCACR,SAAS,EAAE,aAAa;gCACxB,SAAS;gCACT,QAAQ,EAAE,gBAAgB;6BAC3B;yBACF,CAAC,CAAC;wBACH,EAAE,EAAE,CAAC;oBACP,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,GAAG;oBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,CACF,CAAC;QACJ,CAAC;KACF,EACD,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,SAAS,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"consumer-worker-thread.js","sourceRoot":"","sources":["../../../../src/threads/consumer-worker-thread.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { parentPort, workerData } from 'worker_threads';
2
2
  import { ProducibleMessage, RedisSMQ } from 'redis-smq';
3
3
  import { async } from 'redis-smq-common';
4
- import { EWorkerMessageType } from '../types/index.js';
4
+ import { EWorkerMessageType, } from '../types/index.js';
5
+ import { HighResTimer } from '../helpers/timing.js';
5
6
  const { queue, redisConfig, workerId, expectedMessages } = workerData;
6
7
  let producedCount = 0;
7
8
  let startTime = 0;
@@ -12,7 +13,7 @@ RedisSMQ.initialize(redisConfig, (err) => {
12
13
  async.series([
13
14
  (cb) => producer.run(cb),
14
15
  (cb) => {
15
- startTime = Date.now();
16
+ startTime = HighResTimer.now();
16
17
  const pump = () => {
17
18
  if (producedCount < expectedMessages) {
18
19
  producedCount++;
@@ -26,8 +27,8 @@ RedisSMQ.initialize(redisConfig, (err) => {
26
27
  });
27
28
  }
28
29
  else if (producedCount >= expectedMessages) {
29
- const timeTaken = Date.now() - startTime;
30
- parentPort?.postMessage({
30
+ const timeTaken = HighResTimer.now() - startTime;
31
+ const message = {
31
32
  type: EWorkerMessageType.COMPLETED,
32
33
  data: {
33
34
  workerId,
@@ -35,7 +36,8 @@ RedisSMQ.initialize(redisConfig, (err) => {
35
36
  timeTaken,
36
37
  expected: expectedMessages,
37
38
  },
38
- });
39
+ };
40
+ parentPort?.postMessage(message);
39
41
  return cb();
40
42
  }
41
43
  else
@@ -1 +1 @@
1
- {"version":3,"file":"producer-worker-thread.js","sourceRoot":"","sources":["../../../../src/threads/producer-worker-thread.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAe,MAAM,mBAAmB,CAAC;AAEpE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GACtD,UAAyB,CAAC;AAE5B,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;IACvC,IAAI,GAAG;QAAE,MAAM,GAAG,CAAC;IACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAE3C,KAAK,CAAC,MAAM,CACV;QACE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,CAAC,EAAE,EAAE,EAAE;YACL,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,IAAI,aAAa,GAAG,gBAAgB,EAAE,CAAC;oBACrC,aAAa,EAAE,CAAC;oBAChB,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAAE;yBAChC,QAAQ,CAAC,KAAK,CAAC;yBACf,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;oBAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;wBAC7B,IAAI,IAAI;4BAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;wBAC1B,IAAI,EAAE,CAAC;oBACT,CAAC,CAAC,CAAC;gBACL,CAAC;qBAGI,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;oBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACzC,UAAU,EAAE,WAAW,CAAC;wBACtB,IAAI,EAAE,kBAAkB,CAAC,SAAS;wBAClC,IAAI,EAAE;4BACJ,QAAQ;4BACR,SAAS,EAAE,aAAa;4BACxB,SAAS;4BACT,QAAQ,EAAE,gBAAgB;yBAC3B;qBACF,CAAC,CAAC;oBACH,OAAO,EAAE,EAAE,CAAC;gBACd,CAAC;;oBAGI,EAAE,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,IAAI,EAAE,CAAC;QACT,CAAC;KACF,EACD,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,SAAS,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"producer-worker-thread.js","sourceRoot":"","sources":["../../../../src/threads/producer-worker-thread.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EACL,kBAAkB,GAGnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GACtD,UAAyB,CAAC;AAE5B,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;IACvC,IAAI,GAAG;QAAE,MAAM,GAAG,CAAC;IACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAE3C,KAAK,CAAC,MAAM,CACV;QACE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,CAAC,EAAE,EAAE,EAAE;YACL,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,IAAI,aAAa,GAAG,gBAAgB,EAAE,CAAC;oBACrC,aAAa,EAAE,CAAC;oBAChB,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAAE;yBAChC,QAAQ,CAAC,KAAK,CAAC;yBACf,OAAO,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;oBAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;wBAC7B,IAAI,IAAI;4BAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;wBAC1B,IAAI,EAAE,CAAC;oBACT,CAAC,CAAC,CAAC;gBACL,CAAC;qBAGI,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;oBAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBACjD,MAAM,OAAO,GAAmB;wBAC9B,IAAI,EAAE,kBAAkB,CAAC,SAAS;wBAClC,IAAI,EAAE;4BACJ,QAAQ;4BACR,SAAS,EAAE,aAAa;4BACxB,SAAS;4BACT,QAAQ,EAAE,gBAAgB;yBAC3B;qBACF,CAAC;oBACF,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;oBACjC,OAAO,EAAE,EAAE,CAAC;gBACd,CAAC;;oBAGI,EAAE,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,IAAI,EAAE,CAAC;QACT,CAAC;KACF,EACD,CAAC,GAAG,EAAE,EAAE;QACN,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,SAAS,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -4,21 +4,29 @@ export declare enum EWorkerMessageType {
4
4
  PROGRESS = "PROGRESS",
5
5
  COMPLETED = "COMPLETED"
6
6
  }
7
- export interface IWorkerMessageData {
8
- workerId: number;
9
- processed: number;
10
- timeTaken: number;
11
- expected: number;
12
- }
13
7
  export interface IWorkerData {
14
8
  queue: IQueueParams;
15
9
  redisConfig: IRedisConfig;
16
10
  workerId: number;
17
11
  expectedMessages: number;
18
12
  }
19
- export interface IWorkerMessage {
20
- type: EWorkerMessageType;
21
- data: IWorkerMessageData;
13
+ export type TWorkerMessage = IWorkerProgressMessage | IWorkerCompleteMessage;
14
+ export type TWorkerMessageHandler = (msg: TWorkerMessage) => void;
15
+ export interface IWorkerCompleteMessage {
16
+ type: EWorkerMessageType.COMPLETED;
17
+ data: {
18
+ workerId: number;
19
+ processed: number;
20
+ timeTaken: number;
21
+ expected: number;
22
+ };
23
+ }
24
+ export interface IWorkerProgressMessage {
25
+ type: EWorkerMessageType.PROGRESS;
26
+ data: {
27
+ workerId: number;
28
+ progress: number;
29
+ };
22
30
  }
23
31
  export interface IBenchmarkConfig {
24
32
  redisConfig: IRedisConfig;
@@ -40,12 +48,14 @@ export interface IE2EBenchmarkConfig {
40
48
  showProgress: boolean;
41
49
  }
42
50
  export interface IBenchmarkResult {
43
- total: number;
44
- totalTime: number;
45
- totalWorkerTime: number;
46
- workerCount: number;
51
+ totalMessages: number;
52
+ totalTimeNs: number;
53
+ throughput: number;
47
54
  }
48
- export interface IE2EBenchmarkResult extends IBenchmarkResult {
55
+ export interface IE2EBenchmarkResult {
56
+ workerCount: number;
57
+ totalMessages: number;
58
+ totalTime: number;
49
59
  productionTime: number;
50
60
  consumptionTime: number;
51
61
  messagesProduced: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,YAAY,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,YAAY,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,YAAY,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;CAC/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,YAAY,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC;IACnC,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC;IAClC,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,YAAY,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,YAAY,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;CAC/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "redis-smq-benchmarks",
3
- "version": "9.0.9-next.2",
3
+ "version": "9.0.9-next.4",
4
4
  "description": "Benchmarking tool for RedisSMQ to assess performance and throughput in your application environment.",
5
5
  "author": "Weyoss <weyoss@outlook.com>",
6
6
  "license": "MIT",
@@ -50,8 +50,8 @@
50
50
  }
51
51
  },
52
52
  "peerDependencies": {
53
- "redis-smq": "^9.0.9-next.2",
54
- "redis-smq-common": "^9.0.9-next.2"
53
+ "redis-smq": "^9.0.9-next.4",
54
+ "redis-smq-common": "^9.0.9-next.4"
55
55
  },
56
56
  "dependencies": {
57
57
  "ioredis": "^5"