eimer 0.1.1 → 0.2.0

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 (156) hide show
  1. package/README.md +12 -6
  2. package/dist/cjs/eimer/Eimer.d.ts +9 -5
  3. package/dist/cjs/eimer/Eimer.d.ts.map +1 -1
  4. package/dist/cjs/eimer/Eimer.js +28 -10
  5. package/dist/cjs/eimer/Eimer.js.map +1 -1
  6. package/dist/cjs/eimer/EimerDependencies.d.ts +2 -0
  7. package/dist/cjs/eimer/EimerDependencies.d.ts.map +1 -1
  8. package/dist/cjs/eimer/EimerDependencies.js.map +1 -1
  9. package/dist/cjs/eimer/EimerMessage.d.ts +4 -1
  10. package/dist/cjs/eimer/EimerMessage.d.ts.map +1 -1
  11. package/dist/cjs/eimer/EimerMessage.js +3 -1
  12. package/dist/cjs/eimer/EimerMessage.js.map +1 -1
  13. package/dist/cjs/eimer/EimerMessageMeta.d.ts +17 -0
  14. package/dist/cjs/eimer/EimerMessageMeta.d.ts.map +1 -0
  15. package/dist/cjs/eimer/EimerMessageMeta.js +3 -0
  16. package/dist/cjs/eimer/EimerMessageMeta.js.map +1 -0
  17. package/dist/cjs/eimer/PayloadHandler.d.ts +2 -1
  18. package/dist/cjs/eimer/PayloadHandler.d.ts.map +1 -1
  19. package/dist/cjs/eimer/RpcHandler.d.ts +2 -1
  20. package/dist/cjs/eimer/RpcHandler.d.ts.map +1 -1
  21. package/dist/cjs/eimer/RpcManager.d.ts +4 -2
  22. package/dist/cjs/eimer/RpcManager.d.ts.map +1 -1
  23. package/dist/cjs/eimer/TraceContext.d.ts +13 -0
  24. package/dist/cjs/eimer/TraceContext.d.ts.map +1 -0
  25. package/dist/cjs/eimer/TraceContext.js +3 -0
  26. package/dist/cjs/eimer/TraceContext.js.map +1 -0
  27. package/dist/cjs/eimer/TraceSpan.d.ts +14 -0
  28. package/dist/cjs/eimer/TraceSpan.d.ts.map +1 -0
  29. package/dist/cjs/eimer/TraceSpan.js +3 -0
  30. package/dist/cjs/eimer/TraceSpan.js.map +1 -0
  31. package/dist/cjs/eimer/Tracer.d.ts +34 -0
  32. package/dist/cjs/eimer/Tracer.d.ts.map +1 -0
  33. package/dist/cjs/eimer/Tracer.js +3 -0
  34. package/dist/cjs/eimer/Tracer.js.map +1 -0
  35. package/dist/cjs/eimer/TracerBackend.d.ts +21 -0
  36. package/dist/cjs/eimer/TracerBackend.d.ts.map +1 -0
  37. package/dist/cjs/eimer/TracerBackend.js +3 -0
  38. package/dist/cjs/eimer/TracerBackend.js.map +1 -0
  39. package/dist/cjs/eimer/index.d.ts +5 -0
  40. package/dist/cjs/eimer/index.d.ts.map +1 -1
  41. package/dist/cjs/eimer/index.js +5 -0
  42. package/dist/cjs/eimer/index.js.map +1 -1
  43. package/dist/cjs/eimer/now.d.ts +12 -0
  44. package/dist/cjs/eimer/now.d.ts.map +1 -0
  45. package/dist/cjs/eimer/now.js +17 -0
  46. package/dist/cjs/eimer/now.js.map +1 -0
  47. package/dist/cjs/message-bus/EimerMessageBus.d.ts +3 -2
  48. package/dist/cjs/message-bus/EimerMessageBus.d.ts.map +1 -1
  49. package/dist/cjs/message-bus/EimerMessageBus.js +21 -3
  50. package/dist/cjs/message-bus/EimerMessageBus.js.map +1 -1
  51. package/dist/cjs/rpc/EimerRpcManager.d.ts +9 -6
  52. package/dist/cjs/rpc/EimerRpcManager.d.ts.map +1 -1
  53. package/dist/cjs/rpc/EimerRpcManager.js +31 -9
  54. package/dist/cjs/rpc/EimerRpcManager.js.map +1 -1
  55. package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts +2 -1
  56. package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts.map +1 -1
  57. package/dist/cjs/rpc/EimerRpcRequestMessage.js +2 -2
  58. package/dist/cjs/rpc/EimerRpcRequestMessage.js.map +1 -1
  59. package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts +2 -1
  60. package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts.map +1 -1
  61. package/dist/cjs/rpc/EimerRpcResponseMessage.js +2 -2
  62. package/dist/cjs/rpc/EimerRpcResponseMessage.js.map +1 -1
  63. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.d.ts +53 -0
  64. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.d.ts.map +1 -0
  65. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.js +113 -0
  66. package/dist/cjs/tracing/ConsoleLoggingTracerBackend.js.map +1 -0
  67. package/dist/cjs/tracing/EimerLoggerTracerBackend.d.ts +12 -0
  68. package/dist/cjs/tracing/EimerLoggerTracerBackend.d.ts.map +1 -0
  69. package/dist/cjs/tracing/EimerLoggerTracerBackend.js +18 -0
  70. package/dist/cjs/tracing/EimerLoggerTracerBackend.js.map +1 -0
  71. package/dist/cjs/tracing/EimerNoopTracer.d.ts +17 -0
  72. package/dist/cjs/tracing/EimerNoopTracer.d.ts.map +1 -0
  73. package/dist/cjs/tracing/EimerNoopTracer.js +27 -0
  74. package/dist/cjs/tracing/EimerNoopTracer.js.map +1 -0
  75. package/dist/cjs/tracing/EimerPublishingTracerBackend.d.ts +17 -0
  76. package/dist/cjs/tracing/EimerPublishingTracerBackend.d.ts.map +1 -0
  77. package/dist/cjs/tracing/EimerPublishingTracerBackend.js +20 -0
  78. package/dist/cjs/tracing/EimerPublishingTracerBackend.js.map +1 -0
  79. package/dist/cjs/tracing/EimerTraceSubscriber.d.ts +17 -0
  80. package/dist/cjs/tracing/EimerTraceSubscriber.d.ts.map +1 -0
  81. package/dist/cjs/tracing/EimerTraceSubscriber.js +23 -0
  82. package/dist/cjs/tracing/EimerTraceSubscriber.js.map +1 -0
  83. package/dist/cjs/tracing/EimerTracer.d.ts +21 -0
  84. package/dist/cjs/tracing/EimerTracer.d.ts.map +1 -0
  85. package/dist/cjs/tracing/EimerTracer.js +59 -0
  86. package/dist/cjs/tracing/EimerTracer.js.map +1 -0
  87. package/dist/cjs/tracing/MemoryTracerBackend.d.ts +14 -0
  88. package/dist/cjs/tracing/MemoryTracerBackend.d.ts.map +1 -0
  89. package/dist/cjs/tracing/MemoryTracerBackend.js +24 -0
  90. package/dist/cjs/tracing/MemoryTracerBackend.js.map +1 -0
  91. package/dist/cjs/tracing/NoopTracer.d.ts +16 -0
  92. package/dist/cjs/tracing/NoopTracer.d.ts.map +1 -0
  93. package/dist/cjs/tracing/NoopTracer.js +27 -0
  94. package/dist/cjs/tracing/NoopTracer.js.map +1 -0
  95. package/dist/cjs/tracing/index.d.ts +9 -0
  96. package/dist/cjs/tracing/index.d.ts.map +1 -0
  97. package/dist/cjs/tracing/index.js +25 -0
  98. package/dist/cjs/tracing/index.js.map +1 -0
  99. package/dist/cjs/tracing/now.d.ts +9 -0
  100. package/dist/cjs/tracing/now.d.ts.map +1 -0
  101. package/dist/cjs/tracing/now.js +14 -0
  102. package/dist/cjs/tracing/now.js.map +1 -0
  103. package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts +5 -2
  104. package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts.map +1 -1
  105. package/dist/cjs/transports/EimerUtilityProcessTransport.js +29 -1
  106. package/dist/cjs/transports/EimerUtilityProcessTransport.js.map +1 -1
  107. package/dist/esm/eimer/Eimer.js +28 -10
  108. package/dist/esm/eimer/Eimer.js.map +1 -1
  109. package/dist/esm/eimer/EimerDependencies.js.map +1 -1
  110. package/dist/esm/eimer/EimerMessage.js +3 -1
  111. package/dist/esm/eimer/EimerMessage.js.map +1 -1
  112. package/dist/esm/eimer/EimerMessageMeta.js +2 -0
  113. package/dist/esm/eimer/EimerMessageMeta.js.map +1 -0
  114. package/dist/esm/eimer/TraceContext.js +2 -0
  115. package/dist/esm/eimer/TraceContext.js.map +1 -0
  116. package/dist/esm/eimer/TraceSpan.js +2 -0
  117. package/dist/esm/eimer/TraceSpan.js.map +1 -0
  118. package/dist/esm/eimer/Tracer.js +2 -0
  119. package/dist/esm/eimer/Tracer.js.map +1 -0
  120. package/dist/esm/eimer/TracerBackend.js +2 -0
  121. package/dist/esm/eimer/TracerBackend.js.map +1 -0
  122. package/dist/esm/eimer/index.js +5 -0
  123. package/dist/esm/eimer/index.js.map +1 -1
  124. package/dist/esm/eimer/now.js +14 -0
  125. package/dist/esm/eimer/now.js.map +1 -0
  126. package/dist/esm/message-bus/EimerMessageBus.js +21 -3
  127. package/dist/esm/message-bus/EimerMessageBus.js.map +1 -1
  128. package/dist/esm/rpc/EimerRpcManager.js +31 -9
  129. package/dist/esm/rpc/EimerRpcManager.js.map +1 -1
  130. package/dist/esm/rpc/EimerRpcRequestMessage.js +2 -2
  131. package/dist/esm/rpc/EimerRpcRequestMessage.js.map +1 -1
  132. package/dist/esm/rpc/EimerRpcResponseMessage.js +2 -2
  133. package/dist/esm/rpc/EimerRpcResponseMessage.js.map +1 -1
  134. package/dist/esm/tracing/ConsoleLoggingTracerBackend.js +109 -0
  135. package/dist/esm/tracing/ConsoleLoggingTracerBackend.js.map +1 -0
  136. package/dist/esm/tracing/EimerLoggerTracerBackend.js +14 -0
  137. package/dist/esm/tracing/EimerLoggerTracerBackend.js.map +1 -0
  138. package/dist/esm/tracing/EimerNoopTracer.js +23 -0
  139. package/dist/esm/tracing/EimerNoopTracer.js.map +1 -0
  140. package/dist/esm/tracing/EimerPublishingTracerBackend.js +16 -0
  141. package/dist/esm/tracing/EimerPublishingTracerBackend.js.map +1 -0
  142. package/dist/esm/tracing/EimerTraceSubscriber.js +19 -0
  143. package/dist/esm/tracing/EimerTraceSubscriber.js.map +1 -0
  144. package/dist/esm/tracing/EimerTracer.js +55 -0
  145. package/dist/esm/tracing/EimerTracer.js.map +1 -0
  146. package/dist/esm/tracing/MemoryTracerBackend.js +20 -0
  147. package/dist/esm/tracing/MemoryTracerBackend.js.map +1 -0
  148. package/dist/esm/tracing/NoopTracer.js +30 -0
  149. package/dist/esm/tracing/NoopTracer.js.map +1 -0
  150. package/dist/esm/tracing/index.js +9 -0
  151. package/dist/esm/tracing/index.js.map +1 -0
  152. package/dist/esm/tracing/now.js +11 -0
  153. package/dist/esm/tracing/now.js.map +1 -0
  154. package/dist/esm/transports/EimerUtilityProcessTransport.js +29 -1
  155. package/dist/esm/transports/EimerUtilityProcessTransport.js.map +1 -1
  156. package/package.json +15 -1
@@ -0,0 +1,12 @@
1
+ /**
2
+ * A timestamp (milliseconds since the Unix epoch) suitable for hop/span
3
+ * timing: `performance.now()` is monotonic and higher-resolution than
4
+ * `Date.now()` (important for sub-millisecond IPC hops), and unaffected by
5
+ * wall-clock adjustments (NTP sync, sleep/resume) that can otherwise produce
6
+ * negative durations - but it's relative to each process's own start, so
7
+ * `performance.timeOrigin` is added back in to make it comparable across
8
+ * processes. `performance` is available as a global in the browser, and in
9
+ * Node (backed by `node:perf_hooks`) since Node 16 - no import needed.
10
+ */
11
+ export declare function now(): number;
12
+ //# sourceMappingURL=now.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"now.d.ts","sourceRoot":"","sources":["../../../src/eimer/now.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,GAAG,IAAI,MAAM,CAE5B"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.now = now;
4
+ /**
5
+ * A timestamp (milliseconds since the Unix epoch) suitable for hop/span
6
+ * timing: `performance.now()` is monotonic and higher-resolution than
7
+ * `Date.now()` (important for sub-millisecond IPC hops), and unaffected by
8
+ * wall-clock adjustments (NTP sync, sleep/resume) that can otherwise produce
9
+ * negative durations - but it's relative to each process's own start, so
10
+ * `performance.timeOrigin` is added back in to make it comparable across
11
+ * processes. `performance` is available as a global in the browser, and in
12
+ * Node (backed by `node:perf_hooks`) since Node 16 - no import needed.
13
+ */
14
+ function now() {
15
+ return performance.timeOrigin + performance.now();
16
+ }
17
+ //# sourceMappingURL=now.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"now.js","sourceRoot":"","sources":["../../../src/eimer/now.ts"],"names":[],"mappings":";;AAUA,kBAEC;AAZD;;;;;;;;;GASG;AACH,SAAgB,GAAG;IACf,OAAO,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC"}
@@ -1,5 +1,5 @@
1
- import { EimerMessage } from '../eimer/EimerMessage';
2
1
  import type { EimerDependencies } from '../eimer/EimerDependencies';
2
+ import type { EimerMessage } from '../eimer/EimerMessage';
3
3
  import type { EimerOptions } from '../eimer/EimerOptions';
4
4
  import type { MessageBus } from '../eimer/MessageBus';
5
5
  import type { MessageHandler } from '../eimer/MessageHandler';
@@ -8,11 +8,12 @@ import type { Topic } from '../eimer/Topic';
8
8
  import type { Transport } from '../eimer/Transport';
9
9
  export interface EimerMessageBusOptions extends Pick<EimerOptions, "logLevel" | "logModuleName"> {
10
10
  }
11
- export interface EimerMessageBusDependencies extends Pick<EimerDependencies, "logger"> {
11
+ export interface EimerMessageBusDependencies extends Pick<EimerDependencies, "logger" | "tracer"> {
12
12
  }
13
13
  export declare class EimerMessageBus implements MessageBus {
14
14
  private readonly nodeId;
15
15
  private logger;
16
+ private readonly tracer;
16
17
  private readonly handlers;
17
18
  private readonly transports;
18
19
  private readonly seenMessages;
@@ -1 +1 @@
1
- {"version":3,"file":"EimerMessageBus.d.ts","sourceRoot":"","sources":["../../../src/message-bus/EimerMessageBus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;CAC/F;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;CACrF;AAED,qBAAa,eAAgB,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;gBAE9C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAC,sBAAsB,EAAE,YAAY,CAAC,EAAE,2BAA2B;IAKvG,gBAAgB,CAAC,SAAS,EAAE,SAAS;IASrC,mBAAmB,CAAC,SAAS,EAAE,SAAS;IAMxC,OAAO,CAAC,OAAO,EAAE,YAAY;IAwB7B,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI;IAW5D,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAWxD,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKlC,QAAQ,IAAI,IAAI;IAUhB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,sBAAsB;CAkBjC"}
1
+ {"version":3,"file":"EimerMessageBus.d.ts","sourceRoot":"","sources":["../../../src/message-bus/EimerMessageBus.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;CAC/F;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChG;AAED,qBAAa,eAAgB,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;gBAE9C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAC,sBAAsB,EAAE,YAAY,CAAC,EAAE,2BAA2B;IAMvG,gBAAgB,CAAC,SAAS,EAAE,SAAS;IASrC,mBAAmB,CAAC,SAAS,EAAE,SAAS;IAMxC,OAAO,CAAC,OAAO,EAAE,YAAY;IAwB7B,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,IAAI;IAW5D,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAWxD,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKlC,QAAQ,IAAI,IAAI;IAUhB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,sBAAsB;CA0CjC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EimerMessageBus = void 0;
4
4
  const LogLevel_1 = require("../eimer/LogLevel");
5
5
  const EimerLogger_1 = require("../logger/EimerLogger");
6
+ const EimerNoopTracer_1 = require("../tracing/EimerNoopTracer");
6
7
  class EimerMessageBus {
7
8
  constructor(nodeId, options, dependencies) {
8
9
  this.handlers = new Map();
@@ -10,6 +11,7 @@ class EimerMessageBus {
10
11
  this.seenMessages = new Set(); // @todo: only store the last X message ids and purge the rest
11
12
  this.nodeId = nodeId;
12
13
  this.logger = dependencies?.logger ?? new EimerLogger_1.EimerLogger(options?.logLevel ?? LogLevel_1.LogLevel.DEBUG, options?.logModuleName ?? 'MessageBus', this.nodeId);
14
+ this.tracer = dependencies?.tracer ?? new EimerNoopTracer_1.EimerNoopTracer();
13
15
  }
14
16
  connectTransport(transport) {
15
17
  this.logger.debug('Connecting transport', { transport });
@@ -32,7 +34,7 @@ class EimerMessageBus {
32
34
  });
33
35
  // Handle locally first
34
36
  this.handleMessage(message);
35
- // Forward to all transports
37
+ // Forward to all transports
36
38
  this.transports.forEach(transport => {
37
39
  try {
38
40
  transport.send(message);
@@ -106,14 +108,30 @@ class EimerMessageBus {
106
108
  // Handle locally first (handleMessage will add to seenMessages)
107
109
  this.handleMessage(message);
108
110
  // Forward to all other transports (excluding the source transport to prevent loops)
109
- Array.from(this.transports).filter(otherTransport => otherTransport !== sourceTransport).forEach(otherTransport => {
111
+ const otherTransports = Array.from(this.transports).filter(otherTransport => otherTransport !== sourceTransport);
112
+ if (otherTransports.length === 0) {
113
+ return;
114
+ }
115
+ let forwardMessage = message;
116
+ if (message.meta?.collectEimerTraces && message.meta?.trace) {
117
+ const relayTrace = this.tracer.startSpan(message.topic, { isEimerTrace: true, node: this.nodeId, component: 'Eimer', op: 'forward' }, message.meta.trace);
118
+ // clone message before forwarding so trace data is kept independent
119
+ forwardMessage = {
120
+ ...message,
121
+ meta: { ...message.meta, trace: relayTrace }
122
+ };
123
+ }
124
+ otherTransports.forEach(otherTransport => {
110
125
  try {
111
- otherTransport.send(message);
126
+ otherTransport.send(forwardMessage);
112
127
  }
113
128
  catch (error) {
114
129
  this.logger.error('Error forwarding message through transport', { error });
115
130
  }
116
131
  });
132
+ if (message.meta?.collectEimerTraces && message.meta?.trace) {
133
+ this.tracer.endSpan(forwardMessage.meta?.trace?.spanId);
134
+ }
117
135
  }
118
136
  }
119
137
  exports.EimerMessageBus = EimerMessageBus;
@@ -1 +1 @@
1
- {"version":3,"file":"EimerMessageBus.js","sourceRoot":"","sources":["../../../src/message-bus/EimerMessageBus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EimerMessageBus.js","sourceRoot":"","sources":["../../../src/message-bus/EimerMessageBus.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { EimerDependencies } from '../eimer/EimerDependencies';
2
+ import type { EimerMessageMeta } from '../eimer/EimerMessageMeta';
2
3
  import type { EimerOptions } from '../eimer/EimerOptions';
3
4
  import type { MessageBus } from '../eimer/MessageBus';
4
5
  import type { NodeId } from '../eimer/NodeId';
@@ -7,12 +8,12 @@ import type { RpcManager } from '../eimer/RpcManager';
7
8
  import type { RpcMethod } from '../eimer/RpcMethod';
8
9
  export interface EimerRpcManagerOptions extends Pick<EimerOptions, "logLevel" | "logModuleName"> {
9
10
  /**
10
- * timeout (in milliseconds) after which RPC calls are rejected
11
+ * timeout, in milliseconds, after which RPC calls are rejected
11
12
  * can be overriden for individual RPC calls
12
13
  */
13
- timeout?: number;
14
+ timeoutMs?: number;
14
15
  }
15
- export interface EimerRpcManagerDependencies extends Pick<EimerDependencies, "logger" | "idGenerator"> {
16
+ export interface EimerRpcManagerDependencies extends Pick<EimerDependencies, "logger" | "idGenerator" | "tracer"> {
16
17
  }
17
18
  /**
18
19
  * Reference Implementation of `RpcManager`
@@ -22,10 +23,11 @@ export declare class EimerRpcManager implements RpcManager {
22
23
  private readonly idGenerator;
23
24
  private readonly messageBus;
24
25
  private readonly logger;
26
+ private readonly tracer;
25
27
  private readonly pendingRequests;
26
28
  private readonly handlers;
27
29
  private readonly unsubscriberFunctions;
28
- private timeout;
30
+ private timeoutMs;
29
31
  private isSubscribedToResponses;
30
32
  /**
31
33
  *
@@ -43,10 +45,11 @@ export declare class EimerRpcManager implements RpcManager {
43
45
  * Call a remote method and await the response (or error)
44
46
  * @param method method name
45
47
  * @param params parameters for call
46
- * @param timeout timeout for call (in ms)
48
+ * @param timeoutMs timeout for call, in milliseconds
49
+ * @param meta optional metadata
47
50
  * @returns
48
51
  */
49
- call<T>(method: RpcMethod, params?: unknown, timeout?: number): Promise<T>;
52
+ call<T>(method: RpcMethod, params?: unknown, timeoutMs?: number, meta?: EimerMessageMeta): Promise<T>;
50
53
  /**
51
54
  * Unregister a handler that was previously registered
52
55
  * @param method method name
@@ -1 +1 @@
1
- {"version":3,"file":"EimerRpcManager.d.ts","sourceRoot":"","sources":["../../../src/rpc/EimerRpcManager.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;IAC5F;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,aAAa,CAAC;CACrG;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAGhC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAIjB;IAGf,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAGlE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAyC;IAG/E,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,uBAAuB,CAAkB;IAEjD;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,2BAA2B;IAQhI;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAO7D;;;;;;OAMG;IACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAmChF;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAU1C;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAUhB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;;;;OAKG;YACW,oBAAoB;CA0CrC"}
1
+ {"version":3,"file":"EimerRpcManager.d.ts","sourceRoot":"","sources":["../../../src/rpc/EimerRpcManager.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,eAAe,CAAC;IAC5F;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,2BAA4B,SAAQ,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;CAChH;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAGhC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAMjB;IAGf,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAGlE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAyC;IAG/E,OAAO,CAAC,SAAS,CAAiB;IAElC,OAAO,CAAC,uBAAuB,CAAkB;IAEjD;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,sBAAsB,EAAE,YAAY,CAAC,EAAE,2BAA2B;IAShI;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAO7D;;;;;;;OAOG;IACG,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IA+C3G;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAU1C;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAahB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;;;;OAKG;YACW,oBAAoB;CAwDrC"}
@@ -8,6 +8,7 @@ const EimerRpcResponsePayload_1 = require("./EimerRpcResponsePayload");
8
8
  const LogLevel_1 = require("../eimer/LogLevel");
9
9
  const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
10
10
  const EimerLogger_1 = require("../logger/EimerLogger");
11
+ const EimerNoopTracer_1 = require("../tracing/EimerNoopTracer");
11
12
  /**
12
13
  * Reference Implementation of `RpcManager`
13
14
  */
@@ -25,13 +26,14 @@ class EimerRpcManager {
25
26
  // Stores unsubscriber functions of RPC Handlers, indexed by RPC method name
26
27
  this.unsubscriberFunctions = new Map();
27
28
  // Timeout for RPC calls, in milliseconds
28
- this.timeout = 1000;
29
+ this.timeoutMs = 1000;
29
30
  this.isSubscribedToResponses = false;
30
31
  this.nodeId = nodeId;
31
32
  this.messageBus = messageBus;
32
- this.timeout = (options?.timeout !== null && options?.timeout !== undefined) ? options?.timeout : 1000;
33
+ this.timeoutMs = (options?.timeoutMs !== null && options?.timeoutMs !== undefined) ? options?.timeoutMs : 1000;
33
34
  this.idGenerator = dependencies?.idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
34
35
  this.logger = dependencies?.logger ?? new EimerLogger_1.EimerLogger(options?.logLevel ?? LogLevel_1.LogLevel.DEBUG, options?.logModuleName ?? 'RpcManager', this.nodeId);
36
+ this.tracer = dependencies?.tracer ?? new EimerNoopTracer_1.EimerNoopTracer();
35
37
  }
36
38
  /**
37
39
  * Register a handler for an RPC method call
@@ -48,26 +50,33 @@ class EimerRpcManager {
48
50
  * Call a remote method and await the response (or error)
49
51
  * @param method method name
50
52
  * @param params parameters for call
51
- * @param timeout timeout for call (in ms)
53
+ * @param timeoutMs timeout for call, in milliseconds
54
+ * @param meta optional metadata
52
55
  * @returns
53
56
  */
54
- async call(method, params, timeout) {
57
+ async call(method, params, timeoutMs, meta) {
55
58
  if (!this.isSubscribedToResponses) {
56
59
  this.messageBus.subscribe(EimerRpcResponseMessage_1.EimerRpcResponseMessage.TOPIC_PREFIX, this.handleResponseMessage.bind(this));
57
60
  this.isSubscribedToResponses = true;
58
61
  }
59
62
  return new Promise((resolve, reject) => {
60
63
  const requestId = method + ':' + this.idGenerator.generateId();
64
+ if (meta?.collectEimerTraces && meta?.trace) {
65
+ meta.trace = this.tracer.startSpan(method, { isEimerTrace: true, node: this.nodeId, component: 'EimerRpcManager', op: 'call' }, meta.trace);
66
+ }
61
67
  const timeoutId = setTimeout(() => {
62
68
  this.pendingRequests.delete(requestId);
69
+ this.tracer.endSpan(meta?.trace?.spanId, { eimerRpcTimeout: true });
63
70
  reject(new Error(`RPC call of ${method} timed out`));
64
- }, timeout || this.timeout);
71
+ }, timeoutMs || this.timeoutMs);
65
72
  this.pendingRequests.set(requestId, {
66
73
  resolve: resolve,
67
74
  reject,
68
- timeout: timeoutId
75
+ timeout: timeoutId,
76
+ method,
77
+ meta
69
78
  });
70
- const requestMessage = new EimerRpcRequestMessage_1.EimerRpcRequestMessage(this.idGenerator.generateId(), this.nodeId, `${EimerRpcRequestMessage_1.EimerRpcRequestMessage.TOPIC_PREFIX}.${method}`, new EimerRpcRequestPayload_1.EimerRpcRequestPayload(requestId, method, params));
79
+ const requestMessage = new EimerRpcRequestMessage_1.EimerRpcRequestMessage(this.idGenerator.generateId(), this.nodeId, `${EimerRpcRequestMessage_1.EimerRpcRequestMessage.TOPIC_PREFIX}.${method}`, new EimerRpcRequestPayload_1.EimerRpcRequestPayload(requestId, method, params), meta);
71
80
  this.logger.debug('Publishing RPC request', { requestId, method, params, requestMessage });
72
81
  this.messageBus.publish(requestMessage);
73
82
  });
@@ -96,6 +105,9 @@ class EimerRpcManager {
96
105
  }
97
106
  for (const request of this.pendingRequests.values()) {
98
107
  request.reject('RPC Manager shutdown');
108
+ if (request?.meta?.collectEimerTraces && request?.meta?.trace) {
109
+ this.tracer.endSpan(request.meta?.trace?.spanId, { eimerRpcShutdown: true });
110
+ }
99
111
  }
100
112
  this.messageBus.shutdown();
101
113
  }
@@ -118,6 +130,7 @@ class EimerRpcManager {
118
130
  }
119
131
  clearTimeout(pendingRequest.timeout);
120
132
  this.pendingRequests.delete(payload.requestId);
133
+ this.tracer.endSpan(pendingRequest.meta?.trace?.spanId);
121
134
  if (payload.error) {
122
135
  this.logger.debug('Rejecting RPC response', { payload });
123
136
  pendingRequest.reject(payload.error);
@@ -143,17 +156,26 @@ class EimerRpcManager {
143
156
  this.logger.warn('RPC Callback was called for non-existing handler', { requestId: requestPayload.requestId, method: requestPayload.method });
144
157
  return;
145
158
  }
159
+ let trace = requestMessage.meta?.trace;
160
+ if (requestMessage.meta?.collectEimerTraces && trace) {
161
+ trace = this.tracer.startSpan(requestPayload.method, { isEimerTrace: true, node: this.nodeId, component: 'EimerRpcManager', op: 'handleRequestMessage' }, trace);
162
+ }
146
163
  let responsePayload;
147
164
  try {
148
165
  this.logger.debug('Calling RPC Handler', { requestId: requestPayload.requestId, method: requestPayload.method, params: requestPayload.params });
149
- const result = await handler(requestPayload.params);
166
+ const result = await handler(requestPayload.params, trace ? { ...requestMessage.meta, trace } : requestMessage.meta);
150
167
  responsePayload = new EimerRpcResponsePayload_1.EimerRpcResponsePayload(requestPayload.requestId, undefined, result);
151
168
  }
152
169
  catch (error) {
153
170
  this.logger.warn('RPC Handler threw error', { requestId: requestPayload.requestId, method: requestPayload.method, error });
154
171
  responsePayload = new EimerRpcResponsePayload_1.EimerRpcResponsePayload(requestPayload.requestId, error, undefined);
155
172
  }
156
- const responseMessage = new EimerRpcResponseMessage_1.EimerRpcResponseMessage(this.idGenerator.generateId(), this.nodeId, EimerRpcResponseMessage_1.EimerRpcResponseMessage.TOPIC_PREFIX, responsePayload);
173
+ finally {
174
+ if (requestMessage.meta?.collectEimerTraces && trace) {
175
+ this.tracer.endSpan(trace?.spanId);
176
+ }
177
+ }
178
+ const responseMessage = new EimerRpcResponseMessage_1.EimerRpcResponseMessage(this.idGenerator.generateId(), this.nodeId, EimerRpcResponseMessage_1.EimerRpcResponseMessage.TOPIC_PREFIX, responsePayload, trace ? { ...requestMessage.meta, trace } : requestMessage.meta);
157
179
  this.logger.debug('Publishing RPC Response', { requestId: requestPayload.requestId, method: requestPayload.method, responseMessage });
158
180
  this.messageBus.publish(responseMessage);
159
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EimerRpcManager.js","sourceRoot":"","sources":["../../../src/rpc/EimerRpcManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EimerRpcManager.js","sourceRoot":"","sources":["../../../src/rpc/EimerRpcManager.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { EimerMessage } from '../eimer/EimerMessage';
3
3
  import type { MessageId } from '../eimer/MessageId';
4
4
  import type { NodeId } from '../eimer/NodeId';
5
5
  import type { Topic } from '../eimer/Topic';
6
+ import type { EimerMessageMeta } from '../eimer/EimerMessageMeta';
6
7
  /**
7
8
  * RPC Request Message
8
9
  *
@@ -16,7 +17,7 @@ export declare class EimerRpcRequestMessage extends EimerMessage {
16
17
  */
17
18
  static TOPIC_PREFIX: Topic;
18
19
  readonly payload: EimerRpcRequestPayload;
19
- constructor(id: MessageId, from: NodeId, topic: Topic, payload: EimerRpcRequestPayload);
20
+ constructor(id: MessageId, from: NodeId, topic: Topic, payload: EimerRpcRequestPayload, meta?: EimerMessageMeta);
20
21
  /**
21
22
  * User-defined Type Guard to ensure the message is an RPC Request
22
23
  * Similar to Array.isArray(), this static method can be used to check if a Message is an EimerRpcRequestMessage
@@ -1 +1 @@
1
- {"version":3,"file":"EimerRpcRequestMessage.d.ts","sourceRoot":"","sources":["../../../src/rpc/EimerRpcRequestMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAC,KAAK,CAAuB;IAEhD,SAAyB,OAAO,EAAG,sBAAsB,CAAC;gBAGtD,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,sBAAsB;IAKnC;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,sBAAsB;CAS5F"}
1
+ {"version":3,"file":"EimerRpcRequestMessage.d.ts","sourceRoot":"","sources":["../../../src/rpc/EimerRpcRequestMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,YAAY;IACpD;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAC,KAAK,CAAuB;IAEhD,SAAyB,OAAO,EAAG,sBAAsB,CAAC;gBAGtD,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,sBAAsB,EAC/B,IAAI,CAAC,EAAE,gBAAgB;IAK3B;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,sBAAsB;CAS5F"}
@@ -10,8 +10,8 @@ const EimerMessage_1 = require("../eimer/EimerMessage");
10
10
  * with its parameters/arguments.
11
11
  */
12
12
  class EimerRpcRequestMessage extends EimerMessage_1.EimerMessage {
13
- constructor(id, from, topic, payload) {
14
- super(id, from, topic, payload);
13
+ constructor(id, from, topic, payload, meta) {
14
+ super(id, from, topic, payload, meta);
15
15
  }
16
16
  /**
17
17
  * User-defined Type Guard to ensure the message is an RPC Request
@@ -1 +1 @@
1
- {"version":3,"file":"EimerRpcRequestMessage.js","sourceRoot":"","sources":["../../../src/rpc/EimerRpcRequestMessage.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAElE,wDAAqD;AAMrD;;;;;GAKG;AACH,MAAa,sBAAuB,SAAQ,2BAAY;IASpD,YACI,EAAa,EACb,IAAY,EACZ,KAAY,EACZ,OAA+B;QAE/B,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAqB;QACjD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,+CAAsB,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/F,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AAhCL,wDAiCC;AAhCG;;;GAGG;AACI,mCAAY,GAAS,mBAAmB,CAAC"}
1
+ {"version":3,"file":"EimerRpcRequestMessage.js","sourceRoot":"","sources":["../../../src/rpc/EimerRpcRequestMessage.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAElE,wDAAqD;AAOrD;;;;;GAKG;AACH,MAAa,sBAAuB,SAAQ,2BAAY;IASpD,YACI,EAAa,EACb,IAAY,EACZ,KAAY,EACZ,OAA+B,EAC/B,IAAuB;QAEvB,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,wBAAwB,CAAC,OAAqB;QACjD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,+CAAsB,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/F,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AAjCL,wDAkCC;AAjCG;;;GAGG;AACI,mCAAY,GAAS,mBAAmB,CAAC"}
@@ -3,6 +3,7 @@ import { EimerMessage } from "../eimer/EimerMessage";
3
3
  import type { MessageId } from "../eimer/MessageId";
4
4
  import type { NodeId } from "../eimer/NodeId";
5
5
  import type { Topic } from "../eimer/Topic";
6
+ import type { EimerMessageMeta } from "../eimer/EimerMessageMeta";
6
7
  /**
7
8
  * RPC Response Message
8
9
  *
@@ -18,7 +19,7 @@ export declare class EimerRpcResponseMessage extends EimerMessage {
18
19
  */
19
20
  static TOPIC_PREFIX: string;
20
21
  readonly payload: EimerRpcResponsePayload;
21
- constructor(id: MessageId, from: NodeId, topic: Topic, payload: EimerRpcResponsePayload);
22
+ constructor(id: MessageId, from: NodeId, topic: Topic, payload: EimerRpcResponsePayload, meta?: EimerMessageMeta | undefined);
22
23
  /**
23
24
  * User-defined Type Guard to ensure the message is an RPC Response
24
25
  * Similar to Array.isArray(), this static method can be used to check if a Message is an EimerRpcResponseMessage
@@ -1 +1 @@
1
- {"version":3,"file":"EimerRpcResponseMessage.d.ts","sourceRoot":"","sources":["../../../src/rpc/EimerRpcResponseMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,MAAM,CAAC,YAAY,SAAwB;IAE3C,SAAyB,OAAO,EAAG,uBAAuB,CAAC;gBAGvD,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,uBAAuB;IAKpC;;;;;OAKG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,uBAAuB;CAS9F"}
1
+ {"version":3,"file":"EimerRpcResponseMessage.d.ts","sourceRoot":"","sources":["../../../src/rpc/EimerRpcResponseMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;IACrD;;;;OAIG;IACH,MAAM,CAAC,YAAY,SAAwB;IAE3C,SAAyB,OAAO,EAAG,uBAAuB,CAAC;gBAGvD,EAAE,EAAE,SAAS,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,uBAAuB,EAChC,IAAI,CAAC,EAAE,gBAAgB,GAAG,SAAS;IAKvC;;;;;OAKG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,IAAI,uBAAuB;CAS9F"}
@@ -11,8 +11,8 @@ const EimerMessage_1 = require("../eimer/EimerMessage");
11
11
  * there was one.
12
12
  */
13
13
  class EimerRpcResponseMessage extends EimerMessage_1.EimerMessage {
14
- constructor(id, from, topic, payload) {
15
- super(id, from, topic, payload);
14
+ constructor(id, from, topic, payload, meta) {
15
+ super(id, from, topic, payload, meta);
16
16
  }
17
17
  /**
18
18
  * User-defined Type Guard to ensure the message is an RPC Response
@@ -1 +1 @@
1
- {"version":3,"file":"EimerRpcResponseMessage.js","sourceRoot":"","sources":["../../../src/rpc/EimerRpcResponseMessage.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAEpE,wDAAqD;AAMrD;;;;;;GAMG;AACH,MAAa,uBAAwB,SAAQ,2BAAY;IAUrD,YACI,EAAa,EACb,IAAY,EACZ,KAAY,EACZ,OAAgC;QAEhC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAqB;QAClD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,iDAAuB,CAAC,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjG,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AAjCL,0DAkCC;AAjCG;;;;GAIG;AACI,oCAAY,GAAG,oBAAoB,CAAC"}
1
+ {"version":3,"file":"EimerRpcResponseMessage.js","sourceRoot":"","sources":["../../../src/rpc/EimerRpcResponseMessage.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAEpE,wDAAqD;AAOrD;;;;;;GAMG;AACH,MAAa,uBAAwB,SAAQ,2BAAY;IAUrD,YACI,EAAa,EACb,IAAY,EACZ,KAAY,EACZ,OAAgC,EAChC,IAAmC;QAEnC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,yBAAyB,CAAC,OAAqB;QAClD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,CAAC;YAClE,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,iDAAuB,CAAC,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACjG,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;;AAlCL,0DAmCC;AAlCG;;;;GAIG;AACI,oCAAY,GAAG,oBAAoB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { TracerBackend } from '../eimer/TracerBackend';
2
+ import type { TraceSpan } from '../eimer/TraceSpan';
3
+ /**
4
+ * Subset of the `console` API this backend needs, so a fake can be injected
5
+ * in tests instead of spying on the real global `console`.
6
+ */
7
+ export interface GroupingConsole {
8
+ group(...args: unknown[]): void;
9
+ groupEnd(): void;
10
+ log(...args: unknown[]): void;
11
+ }
12
+ export interface ConsoleLoggingTracerBackendOptions {
13
+ /** milliseconds of inactivity for a `traceId`, measured from the `startedAt` of the last span received for it, before that trace is printed. Default 5000. */
14
+ ttlMs?: number;
15
+ /** how often, in milliseconds, to check for traces that have exceeded `ttlMs`. Default 1000. */
16
+ sweepIntervalMs?: number;
17
+ }
18
+ /**
19
+ * `TracerBackend` that accumulates spans per `traceId` and prints each trace
20
+ * as a nested `console.group()` tree once it goes quiet, rather than logging
21
+ * every span as it arrives. "Quiet" means no new span has been recorded for
22
+ * that `traceId` for `ttlMs`, measured against the `startedAt` of the most
23
+ * recently received span (not wall-clock arrival time), checked on a
24
+ * `sweepIntervalMs` interval.
25
+ *
26
+ * This is a heuristic: a trace that may not be complete but has not received
27
+ * new spans for longer than `ttlMs` will be printed.
28
+ * Any span for it that arrives afterwards is treated as the start of a new trace
29
+ * and printed as its own, separate group once it too goes quiet.
30
+ */
31
+ export declare class ConsoleLoggingTracerBackend implements TracerBackend {
32
+ private readonly ttlMs;
33
+ private readonly sweepIntervalMs;
34
+ private readonly console;
35
+ private readonly pendingSpans;
36
+ private readonly lastStartedAt;
37
+ private sweepTimer;
38
+ constructor(options?: ConsoleLoggingTracerBackendOptions, consoleLike?: GroupingConsole);
39
+ handleSpan(span: TraceSpan): void;
40
+ /**
41
+ * Immediately prints any accumulated traces and stops the sweep timer.
42
+ * Called via `Eimer.shutdown()` -> `Tracer.shutdown()` if this backend is
43
+ * plugged into that node's `Tracer`, so no accumulated spans are
44
+ * silently lost and no timer lingers past shutdown.
45
+ */
46
+ shutdown(): void;
47
+ private ensureSweeping;
48
+ private stopSweeping;
49
+ private sweep;
50
+ private flush;
51
+ private printTrace;
52
+ }
53
+ //# sourceMappingURL=ConsoleLoggingTracerBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleLoggingTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/ConsoleLoggingTracerBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,QAAQ,IAAI,IAAI,CAAC;IACjB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,kCAAkC;IAC/C,8JAA8J;IAC9J,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,2BAA4B,YAAW,aAAa;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAE1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,UAAU,CAA6C;gBAEnD,OAAO,CAAC,EAAE,kCAAkC,EAAE,WAAW,CAAC,EAAE,eAAe;IAMvF,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAQjC;;;;;OAKG;IACH,QAAQ,IAAI,IAAI;IAOhB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,KAAK;IAYb,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,UAAU;CAqCrB"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConsoleLoggingTracerBackend = void 0;
4
+ /**
5
+ * `TracerBackend` that accumulates spans per `traceId` and prints each trace
6
+ * as a nested `console.group()` tree once it goes quiet, rather than logging
7
+ * every span as it arrives. "Quiet" means no new span has been recorded for
8
+ * that `traceId` for `ttlMs`, measured against the `startedAt` of the most
9
+ * recently received span (not wall-clock arrival time), checked on a
10
+ * `sweepIntervalMs` interval.
11
+ *
12
+ * This is a heuristic: a trace that may not be complete but has not received
13
+ * new spans for longer than `ttlMs` will be printed.
14
+ * Any span for it that arrives afterwards is treated as the start of a new trace
15
+ * and printed as its own, separate group once it too goes quiet.
16
+ */
17
+ class ConsoleLoggingTracerBackend {
18
+ constructor(options, consoleLike) {
19
+ this.pendingSpans = new Map();
20
+ this.lastStartedAt = new Map();
21
+ this.ttlMs = options?.ttlMs ?? 5000;
22
+ this.sweepIntervalMs = options?.sweepIntervalMs ?? 1000;
23
+ this.console = consoleLike ?? console;
24
+ }
25
+ handleSpan(span) {
26
+ const spans = this.pendingSpans.get(span.traceId) ?? [];
27
+ spans.push(span);
28
+ this.pendingSpans.set(span.traceId, spans);
29
+ this.lastStartedAt.set(span.traceId, span.startedAt);
30
+ this.ensureSweeping();
31
+ }
32
+ /**
33
+ * Immediately prints any accumulated traces and stops the sweep timer.
34
+ * Called via `Eimer.shutdown()` -> `Tracer.shutdown()` if this backend is
35
+ * plugged into that node's `Tracer`, so no accumulated spans are
36
+ * silently lost and no timer lingers past shutdown.
37
+ */
38
+ shutdown() {
39
+ this.stopSweeping();
40
+ for (const traceId of [...this.pendingSpans.keys()]) {
41
+ this.flush(traceId);
42
+ }
43
+ }
44
+ ensureSweeping() {
45
+ if (this.sweepTimer) {
46
+ return;
47
+ }
48
+ this.sweepTimer = setInterval(() => this.sweep(), this.sweepIntervalMs);
49
+ // Don't let an idle sweep timer keep a Node process alive.
50
+ this.sweepTimer.unref?.();
51
+ }
52
+ stopSweeping() {
53
+ if (this.sweepTimer) {
54
+ clearInterval(this.sweepTimer);
55
+ this.sweepTimer = undefined;
56
+ }
57
+ }
58
+ sweep() {
59
+ const now = Date.now();
60
+ for (const [traceId, startedAt] of this.lastStartedAt) {
61
+ if (now - startedAt >= this.ttlMs) {
62
+ this.flush(traceId);
63
+ }
64
+ }
65
+ if (this.pendingSpans.size === 0) {
66
+ this.stopSweeping();
67
+ }
68
+ }
69
+ flush(traceId) {
70
+ const spans = this.pendingSpans.get(traceId);
71
+ if (!spans) {
72
+ return;
73
+ }
74
+ this.pendingSpans.delete(traceId);
75
+ this.lastStartedAt.delete(traceId);
76
+ this.printTrace(traceId, spans);
77
+ }
78
+ printTrace(traceId, spans) {
79
+ const byParentSpanId = new Map();
80
+ const spanIds = new Set(spans.map(span => span.spanId));
81
+ for (const span of spans) {
82
+ // Parent spans recorded on other nodes may never reach this
83
+ // backend, so fall back to treating such spans as roots rather
84
+ // than dropping them.
85
+ const parentKey = span.parentSpanId && spanIds.has(span.parentSpanId) ? span.parentSpanId : undefined;
86
+ const siblings = byParentSpanId.get(parentKey) ?? [];
87
+ siblings.push(span);
88
+ byParentSpanId.set(parentKey, siblings);
89
+ }
90
+ const byStartedAt = (a, b) => a.startedAt - b.startedAt;
91
+ const printSpan = (span) => {
92
+ const children = (byParentSpanId.get(span.spanId) ?? []).sort(byStartedAt);
93
+ const label = `${span.name} (${span.durationMs.toFixed(2)}ms)`;
94
+ if (children.length === 0) {
95
+ this.console.log(label, span);
96
+ return;
97
+ }
98
+ this.console.group(label, span);
99
+ for (const child of children) {
100
+ printSpan(child);
101
+ }
102
+ this.console.groupEnd();
103
+ };
104
+ const roots = (byParentSpanId.get(undefined) ?? []).sort(byStartedAt);
105
+ this.console.group(`trace ${traceId} (${spans.length} span${spans.length === 1 ? '' : 's'})`);
106
+ for (const root of roots) {
107
+ printSpan(root);
108
+ }
109
+ this.console.groupEnd();
110
+ }
111
+ }
112
+ exports.ConsoleLoggingTracerBackend = ConsoleLoggingTracerBackend;
113
+ //# sourceMappingURL=ConsoleLoggingTracerBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConsoleLoggingTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/ConsoleLoggingTracerBackend.ts"],"names":[],"mappings":"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"}