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.
- package/README.md +12 -6
- package/dist/cjs/eimer/Eimer.d.ts +9 -5
- package/dist/cjs/eimer/Eimer.d.ts.map +1 -1
- package/dist/cjs/eimer/Eimer.js +28 -10
- package/dist/cjs/eimer/Eimer.js.map +1 -1
- package/dist/cjs/eimer/EimerDependencies.d.ts +2 -0
- package/dist/cjs/eimer/EimerDependencies.d.ts.map +1 -1
- package/dist/cjs/eimer/EimerDependencies.js.map +1 -1
- package/dist/cjs/eimer/EimerMessage.d.ts +4 -1
- package/dist/cjs/eimer/EimerMessage.d.ts.map +1 -1
- package/dist/cjs/eimer/EimerMessage.js +3 -1
- package/dist/cjs/eimer/EimerMessage.js.map +1 -1
- package/dist/cjs/eimer/EimerMessageMeta.d.ts +17 -0
- package/dist/cjs/eimer/EimerMessageMeta.d.ts.map +1 -0
- package/dist/cjs/eimer/EimerMessageMeta.js +3 -0
- package/dist/cjs/eimer/EimerMessageMeta.js.map +1 -0
- package/dist/cjs/eimer/PayloadHandler.d.ts +2 -1
- package/dist/cjs/eimer/PayloadHandler.d.ts.map +1 -1
- package/dist/cjs/eimer/RpcHandler.d.ts +2 -1
- package/dist/cjs/eimer/RpcHandler.d.ts.map +1 -1
- package/dist/cjs/eimer/RpcManager.d.ts +4 -2
- package/dist/cjs/eimer/RpcManager.d.ts.map +1 -1
- package/dist/cjs/eimer/TraceContext.d.ts +13 -0
- package/dist/cjs/eimer/TraceContext.d.ts.map +1 -0
- package/dist/cjs/eimer/TraceContext.js +3 -0
- package/dist/cjs/eimer/TraceContext.js.map +1 -0
- package/dist/cjs/eimer/TraceSpan.d.ts +14 -0
- package/dist/cjs/eimer/TraceSpan.d.ts.map +1 -0
- package/dist/cjs/eimer/TraceSpan.js +3 -0
- package/dist/cjs/eimer/TraceSpan.js.map +1 -0
- package/dist/cjs/eimer/Tracer.d.ts +34 -0
- package/dist/cjs/eimer/Tracer.d.ts.map +1 -0
- package/dist/cjs/eimer/Tracer.js +3 -0
- package/dist/cjs/eimer/Tracer.js.map +1 -0
- package/dist/cjs/eimer/TracerBackend.d.ts +21 -0
- package/dist/cjs/eimer/TracerBackend.d.ts.map +1 -0
- package/dist/cjs/eimer/TracerBackend.js +3 -0
- package/dist/cjs/eimer/TracerBackend.js.map +1 -0
- package/dist/cjs/eimer/index.d.ts +5 -0
- package/dist/cjs/eimer/index.d.ts.map +1 -1
- package/dist/cjs/eimer/index.js +5 -0
- package/dist/cjs/eimer/index.js.map +1 -1
- package/dist/cjs/eimer/now.d.ts +12 -0
- package/dist/cjs/eimer/now.d.ts.map +1 -0
- package/dist/cjs/eimer/now.js +17 -0
- package/dist/cjs/eimer/now.js.map +1 -0
- package/dist/cjs/message-bus/EimerMessageBus.d.ts +3 -2
- package/dist/cjs/message-bus/EimerMessageBus.d.ts.map +1 -1
- package/dist/cjs/message-bus/EimerMessageBus.js +21 -3
- package/dist/cjs/message-bus/EimerMessageBus.js.map +1 -1
- package/dist/cjs/rpc/EimerRpcManager.d.ts +9 -6
- package/dist/cjs/rpc/EimerRpcManager.d.ts.map +1 -1
- package/dist/cjs/rpc/EimerRpcManager.js +31 -9
- package/dist/cjs/rpc/EimerRpcManager.js.map +1 -1
- package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts +2 -1
- package/dist/cjs/rpc/EimerRpcRequestMessage.d.ts.map +1 -1
- package/dist/cjs/rpc/EimerRpcRequestMessage.js +2 -2
- package/dist/cjs/rpc/EimerRpcRequestMessage.js.map +1 -1
- package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts +2 -1
- package/dist/cjs/rpc/EimerRpcResponseMessage.d.ts.map +1 -1
- package/dist/cjs/rpc/EimerRpcResponseMessage.js +2 -2
- package/dist/cjs/rpc/EimerRpcResponseMessage.js.map +1 -1
- package/dist/cjs/tracing/ConsoleLoggingTracerBackend.d.ts +53 -0
- package/dist/cjs/tracing/ConsoleLoggingTracerBackend.d.ts.map +1 -0
- package/dist/cjs/tracing/ConsoleLoggingTracerBackend.js +113 -0
- package/dist/cjs/tracing/ConsoleLoggingTracerBackend.js.map +1 -0
- package/dist/cjs/tracing/EimerLoggerTracerBackend.d.ts +12 -0
- package/dist/cjs/tracing/EimerLoggerTracerBackend.d.ts.map +1 -0
- package/dist/cjs/tracing/EimerLoggerTracerBackend.js +18 -0
- package/dist/cjs/tracing/EimerLoggerTracerBackend.js.map +1 -0
- package/dist/cjs/tracing/EimerNoopTracer.d.ts +17 -0
- package/dist/cjs/tracing/EimerNoopTracer.d.ts.map +1 -0
- package/dist/cjs/tracing/EimerNoopTracer.js +27 -0
- package/dist/cjs/tracing/EimerNoopTracer.js.map +1 -0
- package/dist/cjs/tracing/EimerPublishingTracerBackend.d.ts +17 -0
- package/dist/cjs/tracing/EimerPublishingTracerBackend.d.ts.map +1 -0
- package/dist/cjs/tracing/EimerPublishingTracerBackend.js +20 -0
- package/dist/cjs/tracing/EimerPublishingTracerBackend.js.map +1 -0
- package/dist/cjs/tracing/EimerTraceSubscriber.d.ts +17 -0
- package/dist/cjs/tracing/EimerTraceSubscriber.d.ts.map +1 -0
- package/dist/cjs/tracing/EimerTraceSubscriber.js +23 -0
- package/dist/cjs/tracing/EimerTraceSubscriber.js.map +1 -0
- package/dist/cjs/tracing/EimerTracer.d.ts +21 -0
- package/dist/cjs/tracing/EimerTracer.d.ts.map +1 -0
- package/dist/cjs/tracing/EimerTracer.js +59 -0
- package/dist/cjs/tracing/EimerTracer.js.map +1 -0
- package/dist/cjs/tracing/MemoryTracerBackend.d.ts +14 -0
- package/dist/cjs/tracing/MemoryTracerBackend.d.ts.map +1 -0
- package/dist/cjs/tracing/MemoryTracerBackend.js +24 -0
- package/dist/cjs/tracing/MemoryTracerBackend.js.map +1 -0
- package/dist/cjs/tracing/NoopTracer.d.ts +16 -0
- package/dist/cjs/tracing/NoopTracer.d.ts.map +1 -0
- package/dist/cjs/tracing/NoopTracer.js +27 -0
- package/dist/cjs/tracing/NoopTracer.js.map +1 -0
- package/dist/cjs/tracing/index.d.ts +9 -0
- package/dist/cjs/tracing/index.d.ts.map +1 -0
- package/dist/cjs/tracing/index.js +25 -0
- package/dist/cjs/tracing/index.js.map +1 -0
- package/dist/cjs/tracing/now.d.ts +9 -0
- package/dist/cjs/tracing/now.d.ts.map +1 -0
- package/dist/cjs/tracing/now.js +14 -0
- package/dist/cjs/tracing/now.js.map +1 -0
- package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts +5 -2
- package/dist/cjs/transports/EimerUtilityProcessTransport.d.ts.map +1 -1
- package/dist/cjs/transports/EimerUtilityProcessTransport.js +29 -1
- package/dist/cjs/transports/EimerUtilityProcessTransport.js.map +1 -1
- package/dist/esm/eimer/Eimer.js +28 -10
- package/dist/esm/eimer/Eimer.js.map +1 -1
- package/dist/esm/eimer/EimerDependencies.js.map +1 -1
- package/dist/esm/eimer/EimerMessage.js +3 -1
- package/dist/esm/eimer/EimerMessage.js.map +1 -1
- package/dist/esm/eimer/EimerMessageMeta.js +2 -0
- package/dist/esm/eimer/EimerMessageMeta.js.map +1 -0
- package/dist/esm/eimer/TraceContext.js +2 -0
- package/dist/esm/eimer/TraceContext.js.map +1 -0
- package/dist/esm/eimer/TraceSpan.js +2 -0
- package/dist/esm/eimer/TraceSpan.js.map +1 -0
- package/dist/esm/eimer/Tracer.js +2 -0
- package/dist/esm/eimer/Tracer.js.map +1 -0
- package/dist/esm/eimer/TracerBackend.js +2 -0
- package/dist/esm/eimer/TracerBackend.js.map +1 -0
- package/dist/esm/eimer/index.js +5 -0
- package/dist/esm/eimer/index.js.map +1 -1
- package/dist/esm/eimer/now.js +14 -0
- package/dist/esm/eimer/now.js.map +1 -0
- package/dist/esm/message-bus/EimerMessageBus.js +21 -3
- package/dist/esm/message-bus/EimerMessageBus.js.map +1 -1
- package/dist/esm/rpc/EimerRpcManager.js +31 -9
- package/dist/esm/rpc/EimerRpcManager.js.map +1 -1
- package/dist/esm/rpc/EimerRpcRequestMessage.js +2 -2
- package/dist/esm/rpc/EimerRpcRequestMessage.js.map +1 -1
- package/dist/esm/rpc/EimerRpcResponseMessage.js +2 -2
- package/dist/esm/rpc/EimerRpcResponseMessage.js.map +1 -1
- package/dist/esm/tracing/ConsoleLoggingTracerBackend.js +109 -0
- package/dist/esm/tracing/ConsoleLoggingTracerBackend.js.map +1 -0
- package/dist/esm/tracing/EimerLoggerTracerBackend.js +14 -0
- package/dist/esm/tracing/EimerLoggerTracerBackend.js.map +1 -0
- package/dist/esm/tracing/EimerNoopTracer.js +23 -0
- package/dist/esm/tracing/EimerNoopTracer.js.map +1 -0
- package/dist/esm/tracing/EimerPublishingTracerBackend.js +16 -0
- package/dist/esm/tracing/EimerPublishingTracerBackend.js.map +1 -0
- package/dist/esm/tracing/EimerTraceSubscriber.js +19 -0
- package/dist/esm/tracing/EimerTraceSubscriber.js.map +1 -0
- package/dist/esm/tracing/EimerTracer.js +55 -0
- package/dist/esm/tracing/EimerTracer.js.map +1 -0
- package/dist/esm/tracing/MemoryTracerBackend.js +20 -0
- package/dist/esm/tracing/MemoryTracerBackend.js.map +1 -0
- package/dist/esm/tracing/NoopTracer.js +30 -0
- package/dist/esm/tracing/NoopTracer.js.map +1 -0
- package/dist/esm/tracing/index.js +9 -0
- package/dist/esm/tracing/index.js.map +1 -0
- package/dist/esm/tracing/now.js +11 -0
- package/dist/esm/tracing/now.js.map +1 -0
- package/dist/esm/transports/EimerUtilityProcessTransport.js +29 -1
- package/dist/esm/transports/EimerUtilityProcessTransport.js.map +1 -1
- package/package.json +15 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Logger } from '../eimer/Logger';
|
|
2
|
+
import type { TracerBackend } from '../eimer/TracerBackend';
|
|
3
|
+
import type { TraceSpan } from '../eimer/TraceSpan';
|
|
4
|
+
/**
|
|
5
|
+
* A `TracerBackend` that logs every recorded span via `Logger`
|
|
6
|
+
*/
|
|
7
|
+
export declare class EimerLoggerTracerBackend implements TracerBackend {
|
|
8
|
+
private readonly logger;
|
|
9
|
+
constructor(logger?: Logger);
|
|
10
|
+
handleSpan(span: TraceSpan): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=EimerLoggerTracerBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerLoggerTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerLoggerTracerBackend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,qBAAa,wBAAyB,YAAW,aAAa;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,CAAC,EAAE,MAAM;IAI3B,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAGpC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerLoggerTracerBackend = void 0;
|
|
4
|
+
const LogLevel_1 = require("../eimer/LogLevel");
|
|
5
|
+
const EimerLogger_1 = require("../logger/EimerLogger");
|
|
6
|
+
/**
|
|
7
|
+
* A `TracerBackend` that logs every recorded span via `Logger`
|
|
8
|
+
*/
|
|
9
|
+
class EimerLoggerTracerBackend {
|
|
10
|
+
constructor(logger) {
|
|
11
|
+
this.logger = logger ?? new EimerLogger_1.EimerLogger(LogLevel_1.LogLevel.INFO, 'EimerLoggerTracerBackend');
|
|
12
|
+
}
|
|
13
|
+
handleSpan(span) {
|
|
14
|
+
this.logger.info(`${span.name} (${span.durationMs.toFixed(2)}ms)`, span);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.EimerLoggerTracerBackend = EimerLoggerTracerBackend;
|
|
18
|
+
//# sourceMappingURL=EimerLoggerTracerBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerLoggerTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/EimerLoggerTracerBackend.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAC7C,uDAAoD;AAMpD;;GAEG;AACH,MAAa,wBAAwB;IAGjC,YAAY,MAAe;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,yBAAW,CAAC,mBAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;IACvF,CAAC;IAED,UAAU,CAAC,IAAe;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;CACJ;AAVD,4DAUC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TracerBackend } from 'src/eimer';
|
|
2
|
+
import type { IdGenerator } from '../eimer/IdGenerator';
|
|
3
|
+
import type { TraceContext } from '../eimer/TraceContext';
|
|
4
|
+
import type { Tracer } from '../eimer/Tracer';
|
|
5
|
+
/**
|
|
6
|
+
* `Tracer` that does nothing (except id generation)
|
|
7
|
+
* Saves a bunch of if-statements wherever a tracer is optional
|
|
8
|
+
*/
|
|
9
|
+
export declare class EimerNoopTracer implements Tracer {
|
|
10
|
+
private readonly idGenerator;
|
|
11
|
+
constructor(idGenerator?: IdGenerator);
|
|
12
|
+
setBackend(_backend?: TracerBackend): void;
|
|
13
|
+
startSpan(_name: string, _metadata?: Record<string, unknown>, parent?: TraceContext): TraceContext;
|
|
14
|
+
endSpan(_tracedId?: string, _metadata?: Record<string, unknown>): void;
|
|
15
|
+
shutdown(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=EimerNoopTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerNoopTracer.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerNoopTracer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,WAAW,CAAC,EAAE,WAAW;IAIrC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,IAAI;IAI1C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAIlG,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAItE,QAAQ,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerNoopTracer = void 0;
|
|
4
|
+
const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
|
|
5
|
+
/**
|
|
6
|
+
* `Tracer` that does nothing (except id generation)
|
|
7
|
+
* Saves a bunch of if-statements wherever a tracer is optional
|
|
8
|
+
*/
|
|
9
|
+
class EimerNoopTracer {
|
|
10
|
+
constructor(idGenerator) {
|
|
11
|
+
this.idGenerator = idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
|
|
12
|
+
}
|
|
13
|
+
setBackend(_backend) {
|
|
14
|
+
// no-op
|
|
15
|
+
}
|
|
16
|
+
startSpan(_name, _metadata, parent) {
|
|
17
|
+
return { traceId: parent?.traceId ?? this.idGenerator.generateId(), spanId: this.idGenerator.generateId() };
|
|
18
|
+
}
|
|
19
|
+
endSpan(_tracedId, _metadata) {
|
|
20
|
+
// no-op
|
|
21
|
+
}
|
|
22
|
+
shutdown() {
|
|
23
|
+
// no-op
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.EimerNoopTracer = EimerNoopTracer;
|
|
27
|
+
//# sourceMappingURL=EimerNoopTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerNoopTracer.js","sourceRoot":"","sources":["../../../src/tracing/EimerNoopTracer.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAQpE;;;GAGG;AACH,MAAa,eAAe;IAGxB,YAAY,WAAyB;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,mCAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,QAAwB;QAC/B,QAAQ;IACZ,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,SAAmC,EAAE,MAAqB;QAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;IAChH,CAAC;IAED,OAAO,CAAC,SAAkB,EAAE,SAAmC;QAC3D,QAAQ;IACZ,CAAC;IAED,QAAQ;QACJ,QAAQ;IACZ,CAAC;CACJ;AAtBD,0CAsBC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Eimer } from '../eimer/Eimer';
|
|
2
|
+
import type { Topic } from '../eimer/Topic';
|
|
3
|
+
import type { TracerBackend } from '../eimer/TracerBackend';
|
|
4
|
+
import type { TraceSpan } from '../eimer/TraceSpan';
|
|
5
|
+
/**
|
|
6
|
+
* A `TracerBackend` that sends forwards spans through through an Eimer instance
|
|
7
|
+
*
|
|
8
|
+
* This backend only *sends* spans - it should be paired with `EimerTraceSubscriber`
|
|
9
|
+
* elsewhere on the Eimer mesh to *receive* and process the spans.
|
|
10
|
+
*/
|
|
11
|
+
export declare class EimerPublishingTracerBackend implements TracerBackend {
|
|
12
|
+
private readonly eimer;
|
|
13
|
+
private readonly topic;
|
|
14
|
+
constructor(eimer: Eimer, topic?: Topic);
|
|
15
|
+
handleSpan(span: TraceSpan): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=EimerPublishingTracerBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerPublishingTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerPublishingTracerBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,aAAa;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAElB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,KAAsB;IAKvD,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAGpC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerPublishingTracerBackend = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A `TracerBackend` that sends forwards spans through through an Eimer instance
|
|
6
|
+
*
|
|
7
|
+
* This backend only *sends* spans - it should be paired with `EimerTraceSubscriber`
|
|
8
|
+
* elsewhere on the Eimer mesh to *receive* and process the spans.
|
|
9
|
+
*/
|
|
10
|
+
class EimerPublishingTracerBackend {
|
|
11
|
+
constructor(eimer, topic = 'eimer.traces') {
|
|
12
|
+
this.eimer = eimer;
|
|
13
|
+
this.topic = topic;
|
|
14
|
+
}
|
|
15
|
+
handleSpan(span) {
|
|
16
|
+
this.eimer.publish(this.topic, span);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.EimerPublishingTracerBackend = EimerPublishingTracerBackend;
|
|
20
|
+
//# sourceMappingURL=EimerPublishingTracerBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerPublishingTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/EimerPublishingTracerBackend.ts"],"names":[],"mappings":";;;AAKA;;;;;GAKG;AACH,MAAa,4BAA4B;IAIrC,YAAY,KAAY,EAAE,QAAe,cAAc;QACnD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,IAAe;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;CACJ;AAZD,oEAYC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Eimer } from '../eimer/Eimer';
|
|
2
|
+
import type { Topic } from '../eimer/Topic';
|
|
3
|
+
import type { TracerBackend } from '../eimer/TracerBackend';
|
|
4
|
+
/**
|
|
5
|
+
* The companion to `EimerPublishingTracerBackend`.
|
|
6
|
+
*
|
|
7
|
+
* Subscribes to the Eimer traces on `topic` and forwards every received
|
|
8
|
+
* `TraceSpan` into its configured `backend`
|
|
9
|
+
*/
|
|
10
|
+
export declare class EimerTraceSubscriber {
|
|
11
|
+
private readonly backend;
|
|
12
|
+
private readonly unsubscribe;
|
|
13
|
+
constructor(eimer: Eimer, backend: TracerBackend, topic?: Topic);
|
|
14
|
+
/** Stop receiving spans and unsubscribe from `topic`. */
|
|
15
|
+
stop(): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=EimerTraceSubscriber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerTraceSubscriber.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerTraceSubscriber.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE7B,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,GAAE,KAAsB;IAO/E,yDAAyD;IACzD,IAAI,IAAI,IAAI;CAGf"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerTraceSubscriber = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The companion to `EimerPublishingTracerBackend`.
|
|
6
|
+
*
|
|
7
|
+
* Subscribes to the Eimer traces on `topic` and forwards every received
|
|
8
|
+
* `TraceSpan` into its configured `backend`
|
|
9
|
+
*/
|
|
10
|
+
class EimerTraceSubscriber {
|
|
11
|
+
constructor(eimer, backend, topic = 'eimer.traces') {
|
|
12
|
+
this.backend = backend;
|
|
13
|
+
this.unsubscribe = eimer.subscribe(topic, (payload) => {
|
|
14
|
+
this.backend.handleSpan(payload);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/** Stop receiving spans and unsubscribe from `topic`. */
|
|
18
|
+
stop() {
|
|
19
|
+
this.unsubscribe();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.EimerTraceSubscriber = EimerTraceSubscriber;
|
|
23
|
+
//# sourceMappingURL=EimerTraceSubscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerTraceSubscriber.js","sourceRoot":"","sources":["../../../src/tracing/EimerTraceSubscriber.ts"],"names":[],"mappings":";;;AAKA;;;;;GAKG;AACH,MAAa,oBAAoB;IAI7B,YAAY,KAAY,EAAE,OAAsB,EAAE,QAAe,cAAc;QAC3E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAoB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,yDAAyD;IACzD,IAAI;QACA,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;CACJ;AAfD,oDAeC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IdGenerator } from '../eimer/IdGenerator';
|
|
2
|
+
import type { TraceContext } from '../eimer/TraceContext';
|
|
3
|
+
import type { Tracer } from '../eimer/Tracer';
|
|
4
|
+
import type { TracerBackend } from '../eimer/TracerBackend';
|
|
5
|
+
/**
|
|
6
|
+
* A reference `Tracer` implementation.
|
|
7
|
+
*
|
|
8
|
+
* Keeps open spans in memory until they are "end"-ed and then
|
|
9
|
+
* forwards them to its `TracerBackend`
|
|
10
|
+
*/
|
|
11
|
+
export declare class EimerTracer implements Tracer {
|
|
12
|
+
private backend;
|
|
13
|
+
private readonly idGenerator;
|
|
14
|
+
private readonly openSpans;
|
|
15
|
+
constructor(backend?: TracerBackend, idGenerator?: IdGenerator);
|
|
16
|
+
setBackend(backend: TracerBackend): void;
|
|
17
|
+
startSpan(name: string, metadata?: Record<string, unknown>, parent?: TraceContext): TraceContext;
|
|
18
|
+
endSpan(spanId: string, metadata?: Record<string, unknown>): void;
|
|
19
|
+
shutdown(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=EimerTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerTracer.d.ts","sourceRoot":"","sources":["../../../src/tracing/EimerTracer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,MAAM;IACtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;gBAEnD,OAAO,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,WAAW;IAK9D,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAIxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAehG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqBjE,QAAQ,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerTracer = void 0;
|
|
4
|
+
const now_1 = require("./now");
|
|
5
|
+
const MemoryTracerBackend_1 = require("./MemoryTracerBackend");
|
|
6
|
+
const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
|
|
7
|
+
/**
|
|
8
|
+
* A reference `Tracer` implementation.
|
|
9
|
+
*
|
|
10
|
+
* Keeps open spans in memory until they are "end"-ed and then
|
|
11
|
+
* forwards them to its `TracerBackend`
|
|
12
|
+
*/
|
|
13
|
+
class EimerTracer {
|
|
14
|
+
constructor(backend, idGenerator) {
|
|
15
|
+
this.openSpans = new Map();
|
|
16
|
+
this.backend = backend ?? new MemoryTracerBackend_1.MemoryTracerBackend();
|
|
17
|
+
this.idGenerator = idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
|
|
18
|
+
}
|
|
19
|
+
setBackend(backend) {
|
|
20
|
+
this.backend = backend;
|
|
21
|
+
}
|
|
22
|
+
startSpan(name, metadata, parent) {
|
|
23
|
+
const traceId = parent?.traceId ?? this.idGenerator.generateId();
|
|
24
|
+
const spanId = this.idGenerator.generateId();
|
|
25
|
+
this.openSpans.set(spanId, {
|
|
26
|
+
traceId,
|
|
27
|
+
spanId,
|
|
28
|
+
...(parent?.spanId ? { parentSpanId: parent?.spanId } : {}),
|
|
29
|
+
name,
|
|
30
|
+
...(metadata ? { metadata } : {}),
|
|
31
|
+
startedAt: (0, now_1.now)(),
|
|
32
|
+
durationMs: 0,
|
|
33
|
+
});
|
|
34
|
+
return { traceId, spanId };
|
|
35
|
+
}
|
|
36
|
+
endSpan(spanId, metadata) {
|
|
37
|
+
const openSpan = this.openSpans.get(spanId);
|
|
38
|
+
if (!openSpan) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.openSpans.delete(spanId);
|
|
42
|
+
const mergedMetadata = (openSpan.metadata || metadata) ? { ...openSpan.metadata, ...metadata } : undefined;
|
|
43
|
+
const span = {
|
|
44
|
+
traceId: openSpan.traceId,
|
|
45
|
+
spanId,
|
|
46
|
+
...(openSpan.parentSpanId ? { parentSpanId: openSpan.parentSpanId } : {}),
|
|
47
|
+
name: openSpan.name,
|
|
48
|
+
...(mergedMetadata ? { metadata: mergedMetadata } : {}),
|
|
49
|
+
startedAt: openSpan.startedAt,
|
|
50
|
+
durationMs: (0, now_1.now)() - openSpan.startedAt,
|
|
51
|
+
};
|
|
52
|
+
this.backend.handleSpan(span);
|
|
53
|
+
}
|
|
54
|
+
shutdown() {
|
|
55
|
+
this.backend.shutdown?.();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.EimerTracer = EimerTracer;
|
|
59
|
+
//# sourceMappingURL=EimerTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EimerTracer.js","sourceRoot":"","sources":["../../../src/tracing/EimerTracer.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,+DAA4D;AAE5D,uEAAoE;AAQpE;;;;;GAKG;AACH,MAAa,WAAW;IAKpB,YAAY,OAAuB,EAAE,WAAyB;QAF7C,cAAS,GAA2B,IAAI,GAAG,EAAE,CAAC;QAG3D,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAI,yCAAmB,EAAE,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,mCAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,OAAsB;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,QAAkC,EAAE,MAAqB;QAC7E,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;YACvB,OAAO;YACP,MAAM;YACN,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI;YACJ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,SAAS,EAAE,IAAA,SAAG,GAAE;YAChB,UAAU,EAAE,CAAC;SAChB,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,QAAkC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE9B,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3G,MAAM,IAAI,GAAc;YACpB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM;YACN,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE,IAAA,SAAG,GAAE,GAAG,QAAQ,CAAC,SAAS;SACzC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9B,CAAC;CACJ;AArDD,kCAqDC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TracerBackend } from '../eimer/TracerBackend';
|
|
2
|
+
import type { TraceSpan } from '../eimer/TraceSpan';
|
|
3
|
+
/**
|
|
4
|
+
* A `TracerBackend` that stores spans in Memory
|
|
5
|
+
*
|
|
6
|
+
* You can extract them with `getRecords`
|
|
7
|
+
*/
|
|
8
|
+
export declare class MemoryTracerBackend implements TracerBackend {
|
|
9
|
+
private readonly spans;
|
|
10
|
+
handleSpan(span: TraceSpan): void;
|
|
11
|
+
getRecords(): TraceSpan[];
|
|
12
|
+
clear(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=MemoryTracerBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryTracerBackend.d.ts","sourceRoot":"","sources":["../../../src/tracing/MemoryTracerBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAIjC,UAAU,IAAI,SAAS,EAAE;IAIzB,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryTracerBackend = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A `TracerBackend` that stores spans in Memory
|
|
6
|
+
*
|
|
7
|
+
* You can extract them with `getRecords`
|
|
8
|
+
*/
|
|
9
|
+
class MemoryTracerBackend {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.spans = [];
|
|
12
|
+
}
|
|
13
|
+
handleSpan(span) {
|
|
14
|
+
this.spans.push(span);
|
|
15
|
+
}
|
|
16
|
+
getRecords() {
|
|
17
|
+
return [...this.spans];
|
|
18
|
+
}
|
|
19
|
+
clear() {
|
|
20
|
+
this.spans.length = 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.MemoryTracerBackend = MemoryTracerBackend;
|
|
24
|
+
//# sourceMappingURL=MemoryTracerBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryTracerBackend.js","sourceRoot":"","sources":["../../../src/tracing/MemoryTracerBackend.ts"],"names":[],"mappings":";;;AAGA;;;;GAIG;AACH,MAAa,mBAAmB;IAAhC;QACqB,UAAK,GAAgB,EAAE,CAAC;IAa7C,CAAC;IAXG,UAAU,CAAC,IAAe;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,UAAU;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;CACJ;AAdD,kDAcC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IdGenerator } from '../eimer/IdGenerator';
|
|
2
|
+
import type { TraceContext } from '../eimer/TraceContext';
|
|
3
|
+
import type { Tracer } from '../eimer/Tracer';
|
|
4
|
+
/**
|
|
5
|
+
* `Tracer` that does nothing (except id generation)
|
|
6
|
+
* Saves a bunch of if's wherever a tracer is optional
|
|
7
|
+
*/
|
|
8
|
+
export declare class EimerNoopTracer implements Tracer {
|
|
9
|
+
private readonly idGenerator;
|
|
10
|
+
constructor(idGenerator?: IdGenerator);
|
|
11
|
+
setBackend(): void;
|
|
12
|
+
startTrace(name: string, metadata?: Record<string, unknown>, parent?: TraceContext): TraceContext;
|
|
13
|
+
endSpan(): void;
|
|
14
|
+
shutdown(): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=NoopTracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopTracer.d.ts","sourceRoot":"","sources":["../../../src/tracing/NoopTracer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,WAAW,CAAC,EAAE,WAAW;IAIrC,UAAU,IAAI,IAAI;IAIlB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,YAAY;IAIjG,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EimerNoopTracer = void 0;
|
|
4
|
+
const EimerIdGenerator_1 = require("../id-generator/EimerIdGenerator");
|
|
5
|
+
/**
|
|
6
|
+
* `Tracer` that does nothing (except id generation)
|
|
7
|
+
* Saves a bunch of if's wherever a tracer is optional
|
|
8
|
+
*/
|
|
9
|
+
class EimerNoopTracer {
|
|
10
|
+
constructor(idGenerator) {
|
|
11
|
+
this.idGenerator = idGenerator ?? new EimerIdGenerator_1.EimerIdGenerator();
|
|
12
|
+
}
|
|
13
|
+
setBackend() {
|
|
14
|
+
// no-op
|
|
15
|
+
}
|
|
16
|
+
startTrace(name, metadata, parent) {
|
|
17
|
+
return parent || { traceId: this.idGenerator.generateId(), spanId: this.idGenerator.generateId() };
|
|
18
|
+
}
|
|
19
|
+
endSpan() {
|
|
20
|
+
// no-op
|
|
21
|
+
}
|
|
22
|
+
shutdown() {
|
|
23
|
+
// no-op
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.EimerNoopTracer = EimerNoopTracer;
|
|
27
|
+
//# sourceMappingURL=NoopTracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopTracer.js","sourceRoot":"","sources":["../../../src/tracing/NoopTracer.ts"],"names":[],"mappings":";;;AAAA,uEAAoE;AAMpE;;;GAGG;AACH,MAAa,eAAe;IAGxB,YAAY,WAAyB;QACjC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,mCAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,UAAU;QACN,QAAQ;IACZ,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,QAAkC,EAAE,MAAqB;QAC9E,OAAO,MAAM,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC;IACvG,CAAC;IAED,OAAO;QACH,QAAQ;IACZ,CAAC;IAED,QAAQ;QACJ,QAAQ;IACZ,CAAC;CACJ;AAtBD,0CAsBC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './ConsoleLoggingTracerBackend';
|
|
2
|
+
export * from './EimerLoggerTracerBackend';
|
|
3
|
+
export * from './EimerPublishingTracerBackend';
|
|
4
|
+
export * from './EimerTracer';
|
|
5
|
+
export * from './EimerTraceSubscriber';
|
|
6
|
+
export * from './MemoryTracerBackend';
|
|
7
|
+
export * from './EimerNoopTracer';
|
|
8
|
+
export * from './now';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ConsoleLoggingTracerBackend"), exports);
|
|
18
|
+
__exportStar(require("./EimerLoggerTracerBackend"), exports);
|
|
19
|
+
__exportStar(require("./EimerPublishingTracerBackend"), exports);
|
|
20
|
+
__exportStar(require("./EimerTracer"), exports);
|
|
21
|
+
__exportStar(require("./EimerTraceSubscriber"), exports);
|
|
22
|
+
__exportStar(require("./MemoryTracerBackend"), exports);
|
|
23
|
+
__exportStar(require("./EimerNoopTracer"), exports);
|
|
24
|
+
__exportStar(require("./now"), exports);
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tracing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,6DAA2C;AAC3C,iEAA+C;AAC/C,gDAA8B;AAC9B,yDAAuC;AACvC,wDAAsC;AACtC,oDAAkC;AAClC,wCAAsB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns a timestamp (milliseconds since the Unix epoch) accurate enough for trace timing
|
|
3
|
+
*
|
|
4
|
+
* `Date.now()` is low-resolution and affected by adjustments of the system clock.
|
|
5
|
+
*
|
|
6
|
+
* Therefore we use `performance.now()` and add `performance.timeOrigin` to make it comparable across processes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function now(): number;
|
|
9
|
+
//# sourceMappingURL=now.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"now.d.ts","sourceRoot":"","sources":["../../../src/tracing/now.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,GAAG,IAAI,MAAM,CAE5B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.now = now;
|
|
4
|
+
/**
|
|
5
|
+
* Returns a timestamp (milliseconds since the Unix epoch) accurate enough for trace timing
|
|
6
|
+
*
|
|
7
|
+
* `Date.now()` is low-resolution and affected by adjustments of the system clock.
|
|
8
|
+
*
|
|
9
|
+
* Therefore we use `performance.now()` and add `performance.timeOrigin` to make it comparable across processes.
|
|
10
|
+
*/
|
|
11
|
+
function now() {
|
|
12
|
+
return performance.timeOrigin + performance.now();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=now.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"now.js","sourceRoot":"","sources":["../../../src/tracing/now.ts"],"names":[],"mappings":";;AAOA,kBAEC;AATD;;;;;;GAMG;AACH,SAAgB,GAAG;IACf,OAAO,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC"}
|
|
@@ -4,8 +4,11 @@ import { EimerMessagePortTransport, EimerMessagePortTransportDependencies, Eimer
|
|
|
4
4
|
* - `utilityProcess` (Electron.UtilityProcess) in the main process
|
|
5
5
|
* - `process.parentPort` (Electron.ParentPort) inside the utility process
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* Note that the two sides are *not* symmetric at runtime: `UtilityProcess`
|
|
8
|
+
* delivers the raw message to its `'message'` listener, while `ParentPort`
|
|
9
|
+
* wraps it in a `MessageEvent` (`{ data, ports }`). `EimerUtilityProcessTransport`
|
|
10
|
+
* unwraps that `MessageEvent` shape internally so callers can use this type on
|
|
11
|
+
* both ends without worrying about the discrepancy.
|
|
9
12
|
*/
|
|
10
13
|
export interface UtilityProcessPort {
|
|
11
14
|
postMessage(message: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EimerUtilityProcessTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EimerUtilityProcessTransport.d.ts","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,qCAAqC,EAAE,gCAAgC,EAAe,MAAM,6BAA6B,CAAC;AAE9J;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAChC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5D,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,mCAAoC,SAAQ,gCAAgC;CAAG;AAEhG,MAAM,WAAW,wCAAyC,SAAQ,qCAAqC;CAAG;AA+B1G;;;;;;;GAOG;AACH,qBAAa,4BAA6B,SAAQ,yBAAyB;gBAC3D,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,mCAAmC,EAAE,YAAY,CAAC,EAAE,wCAAwC;CAG/I"}
|
|
@@ -1,7 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EimerUtilityProcessTransport = void 0;
|
|
4
|
+
const EimerMessage_1 = require("../eimer/EimerMessage");
|
|
4
5
|
const EimerMessagePortTransport_1 = require("./EimerMessagePortTransport");
|
|
6
|
+
/**
|
|
7
|
+
* Wraps a `UtilityProcessPort` so that `'message'` listeners always receive the
|
|
8
|
+
* raw eimer message, regardless of whether the underlying port delivers it directly
|
|
9
|
+
* (`Electron.UtilityProcess`) or wrapped in a `MessageEvent` (`Electron.ParentPort`).
|
|
10
|
+
*/
|
|
11
|
+
class MessageEventUnwrappingPort {
|
|
12
|
+
constructor(port) {
|
|
13
|
+
this.port = port;
|
|
14
|
+
}
|
|
15
|
+
postMessage(message) {
|
|
16
|
+
this.port.postMessage(message);
|
|
17
|
+
}
|
|
18
|
+
on(event, handler) {
|
|
19
|
+
this.port.on(event, (received) => {
|
|
20
|
+
if (!EimerMessage_1.EimerMessage.isEimerMessage(received) && received !== null && typeof received === 'object' && 'data' in received) {
|
|
21
|
+
handler(received.data);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
handler(received);
|
|
25
|
+
});
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
off(event, handler) {
|
|
29
|
+
this.port.off?.(event, handler);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
5
33
|
/**
|
|
6
34
|
* Eimer UtilityProcess Transport
|
|
7
35
|
*
|
|
@@ -12,7 +40,7 @@ const EimerMessagePortTransport_1 = require("./EimerMessagePortTransport");
|
|
|
12
40
|
*/
|
|
13
41
|
class EimerUtilityProcessTransport extends EimerMessagePortTransport_1.EimerMessagePortTransport {
|
|
14
42
|
constructor(port, options, dependencies) {
|
|
15
|
-
super(port, { ...options, logModuleName: options?.logModuleName ?? 'EimerUtilityProcessTransport' }, dependencies);
|
|
43
|
+
super(new MessageEventUnwrappingPort(port), { ...options, logModuleName: options?.logModuleName ?? 'EimerUtilityProcessTransport' }, dependencies);
|
|
16
44
|
}
|
|
17
45
|
}
|
|
18
46
|
exports.EimerUtilityProcessTransport = EimerUtilityProcessTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EimerUtilityProcessTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":";;;AAAA,2EAA8J;
|
|
1
|
+
{"version":3,"file":"EimerUtilityProcessTransport.js","sourceRoot":"","sources":["../../../src/transports/EimerUtilityProcessTransport.ts"],"names":[],"mappings":";;;AAAA,wDAAqD;AAErD,2EAA8J;AAuB9J;;;;GAIG;AACH,MAAM,0BAA0B;IAC5B,YAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEzD,WAAW,CAAC,OAAY;QACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,KAAgB,EAAE,OAA+B;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,QAAa,EAAQ,EAAE;YACxC,IAAI,CAAC,2BAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACpH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO;YACX,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAgB,EAAE,OAA+B;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,MAAa,4BAA6B,SAAQ,qDAAyB;IACvE,YAAY,IAAwB,EAAE,OAA6C,EAAE,YAAuD;QACxI,KAAK,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAgB,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,8BAA8B,EAAE,EAAE,YAAY,CAAC,CAAC;IACtK,CAAC;CACJ;AAJD,oEAIC"}
|
package/dist/esm/eimer/Eimer.js
CHANGED
|
@@ -4,6 +4,7 @@ import { EimerIdGenerator } from '../id-generator/EimerIdGenerator';
|
|
|
4
4
|
import { EimerLogger } from '../logger/EimerLogger';
|
|
5
5
|
import { EimerMessageBus } from '../message-bus/EimerMessageBus';
|
|
6
6
|
import { EimerRpcManager } from '../rpc/EimerRpcManager';
|
|
7
|
+
import { EimerNoopTracer } from '../tracing/EimerNoopTracer';
|
|
7
8
|
/**
|
|
8
9
|
* Eimer main class
|
|
9
10
|
* This class represents an instance of a "node" on the Eimer "network".
|
|
@@ -28,8 +29,9 @@ export class Eimer {
|
|
|
28
29
|
this.nodeId = nodeId;
|
|
29
30
|
this.idGenerator = dependencies?.idGenerator ?? new EimerIdGenerator();
|
|
30
31
|
this.logger = dependencies?.logger ?? new EimerLogger(options?.logLevel ?? LogLevel.DEBUG, options?.logModuleName ?? 'Eimer', this.nodeId);
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
32
|
+
this.tracer = dependencies?.tracer ?? new EimerNoopTracer();
|
|
33
|
+
this.messageBus = dependencies?.messageBus ?? new EimerMessageBus(this.nodeId, options, { tracer: this.tracer });
|
|
34
|
+
this.rpcManager = dependencies?.rpcManager ?? new EimerRpcManager(this.nodeId, this.messageBus, options, { tracer: this.tracer });
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
35
37
|
* Connect this Eimer instance to a `Transport`
|
|
@@ -53,12 +55,13 @@ export class Eimer {
|
|
|
53
55
|
* Will throw on errors from handler
|
|
54
56
|
* @param method name of method / rpc handler
|
|
55
57
|
* @param params optional params object
|
|
56
|
-
* @param
|
|
58
|
+
* @param timeoutMs override timeout, in milliseconds, from constructor options for this single call
|
|
59
|
+
* @param meta optional metadata to attach to the request
|
|
57
60
|
* @returns result from invoked handler
|
|
58
61
|
*/
|
|
59
|
-
async callRpc(method, params,
|
|
62
|
+
async callRpc(method, params, timeoutMs, meta) {
|
|
60
63
|
this.logger.debug('Making RPC call', { method, params });
|
|
61
|
-
return this.rpcManager.call(method, params,
|
|
64
|
+
return this.rpcManager.call(method, params, timeoutMs, meta);
|
|
62
65
|
}
|
|
63
66
|
/**
|
|
64
67
|
* Register an RPC handler
|
|
@@ -84,10 +87,17 @@ export class Eimer {
|
|
|
84
87
|
* Will send payload to all subscribers on the topic
|
|
85
88
|
* @param topic name of topic - subscribers can subscribe to it
|
|
86
89
|
* @param payload payload will be sent to subscribers
|
|
90
|
+
* @param meta optional metadata to attach to the message
|
|
87
91
|
*/
|
|
88
|
-
publish(topic, payload) {
|
|
92
|
+
publish(topic, payload, meta) {
|
|
89
93
|
this.logger.debug('Publishing message', { topic });
|
|
90
|
-
|
|
94
|
+
if (meta?.collectEimerTraces && meta.trace) {
|
|
95
|
+
meta.trace = this.tracer.startSpan(topic, { isEimerTrace: true, node: this.nodeId, component: 'Eimer', op: 'publish' }, meta.trace);
|
|
96
|
+
}
|
|
97
|
+
this.messageBus.publish(new EimerMessage(this.idGenerator.generateId(), this.nodeId, topic, payload, meta));
|
|
98
|
+
if (meta?.collectEimerTraces && meta.trace) {
|
|
99
|
+
this.tracer.endSpan(meta?.trace?.spanId);
|
|
100
|
+
}
|
|
91
101
|
}
|
|
92
102
|
/**
|
|
93
103
|
* Subscribe a handler function to a topic
|
|
@@ -99,7 +109,14 @@ export class Eimer {
|
|
|
99
109
|
subscribe(topic, payloadHandler) {
|
|
100
110
|
this.logger.debug('Subscribing to topic', { topic });
|
|
101
111
|
const messageHandler = (message) => {
|
|
102
|
-
|
|
112
|
+
let trace = message.meta?.trace;
|
|
113
|
+
if (message.meta?.collectEimerTraces && trace) {
|
|
114
|
+
trace = this.tracer.startSpan(topic, { isEimerTrace: true, node: this.nodeId, component: 'Eimer', op: 'handlePayload' }, trace);
|
|
115
|
+
}
|
|
116
|
+
payloadHandler(message.payload, trace ? { ...message.meta, trace } : message.meta);
|
|
117
|
+
if (message.meta?.collectEimerTraces && trace) {
|
|
118
|
+
this.tracer.endSpan(trace.spanId);
|
|
119
|
+
}
|
|
103
120
|
};
|
|
104
121
|
// Get or create the topic's handler map
|
|
105
122
|
let topicHandlerMap = this.handlerMap.get(topic);
|
|
@@ -160,12 +177,13 @@ export class Eimer {
|
|
|
160
177
|
}
|
|
161
178
|
/**
|
|
162
179
|
* Shutdown this Eimer instance
|
|
163
|
-
* Will reject all RPC requests that are still waiting for a response
|
|
164
|
-
* and shutdown the
|
|
180
|
+
* Will reject all RPC requests that are still waiting for a response,
|
|
181
|
+
* shutdown the MessageBus, and shutdown the Tracer
|
|
165
182
|
*/
|
|
166
183
|
shutdown() {
|
|
167
184
|
this.rpcManager.shutdown();
|
|
168
185
|
this.messageBus.shutdown();
|
|
186
|
+
this.tracer.shutdown();
|
|
169
187
|
}
|
|
170
188
|
}
|
|
171
189
|
//# sourceMappingURL=Eimer.js.map
|