@ddd-ts-kit/tracing 0.9.0 → 0.11.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 CHANGED
@@ -153,6 +153,7 @@ This tree is asserted by `test/unit-of-work-phases.spec.ts`.
153
153
  | `publish <type>` | PRODUCER | `tracedPublisher()` around a bus | `messaging.system`, `messaging.operation.name` (`publish`), `messaging.operation.type` (`send`), `messaging.destination.name`, `messaging.message.id` |
154
154
  | `process <consumer>` | CONSUMER | `tracedConsumer()`, one per delivery | `messaging.system`, `messaging.operation.*` (`process`), `messaging.destination.name`, `messaging.message.id`, `messaging.consumer.group.name`, `app.messaging.source`, `app.messaging.attempt`, `app.messaging.redelivered`, `app.context`, `app.correlation_id`, `app.origin`, `app.outcome` |
155
155
  | `job <name>` | INTERNAL, always a root | `tracedJob()` | `app.job.name`, `app.job.scheduled_at`, `app.job.attempt`, `app.context`, `app.correlation_id`, `app.origin`, `app.outcome` |
156
+ | `job <name>` of a background job | CONSUMER, child of the span that enqueued it | `tracedBackgroundJob()`, one per attempt; `traceparent()` (`captureTraceparent`) is stored with the job when it is enqueued | `app.job.name`, `app.job.id`, `app.job.attempt`, `app.context`, `app.correlation_id`, `app.origin` (`queue`), `app.outcome` |
156
157
 
157
158
  - Names are stable and of low cardinality: a route template, never a URL; a class, a port, an
158
159
  event type or a consumer name, never an identifier.
@@ -1,4 +1,4 @@
1
- import type { BusMiddleware, DomainEventDispatcher, ErrorReporter, ExecutionScope, IntegrationEventCallback, IntegrationEventPublisher, JobExecution } from '@ddd-ts-kit/kernel';
1
+ import type { BackgroundJobExecution, BusMiddleware, DomainEventDispatcher, ErrorReporter, ExecutionScope, IntegrationEventCallback, IntegrationEventPublisher, JobExecution } from '@ddd-ts-kit/kernel';
2
2
  import { type TracedBinding } from '../dependency/trace-bindings.js';
3
3
  import type { ConsumerTrace } from '../events/consumer-trace.js';
4
4
  export interface TraceApplicationOptions {
@@ -10,6 +10,7 @@ export interface TraceApplicationOptions {
10
10
  readonly consumers?: ConsumerTrace;
11
11
  }
12
12
  type JobRun = (execution: JobExecution) => Promise<void>;
13
+ type BackgroundJobRun = (payload: unknown, execution: BackgroundJobExecution) => Promise<void>;
13
14
  /** The wrappers `kernelModule({ instrumentation })` of `@ddd-ts-kit/di` applies, one per kind of span. */
14
15
  export interface TracedApplication {
15
16
  readonly binding: <T>(instance: T, binding: TracedBinding) => T;
@@ -24,13 +25,18 @@ export interface TracedApplication {
24
25
  readonly name: string;
25
26
  readonly context: string;
26
27
  }) => JobRun;
28
+ readonly backgroundJob: (run: BackgroundJobRun, job: {
29
+ readonly name: string;
30
+ readonly context: string;
31
+ }) => BackgroundJobRun;
32
+ readonly traceparent: () => string | undefined;
27
33
  readonly errorReporter: (reporter: ErrorReporter) => ErrorReporter;
28
34
  readonly executionScope: (scope: ExecutionScope) => void;
29
35
  }
30
36
  /**
31
37
  * Everything that traces an application, in one value: `kernelModule({ instrumentation:
32
38
  * traceApplication() })`. Use cases, repositories and adapters, the dispatch of domain events
33
- * and their handlers, the outbox, the publications, the consumers and the jobs each get their
39
+ * and their handlers, the outbox, the publications, the consumers, the jobs and the background jobs each get their
34
40
  * span; error reports carry the trace id, and the execution scope of the application is given
35
41
  * to `configureTracing`, so spans and log fields carry the correlation id.
36
42
  */
@@ -1 +1 @@
1
- {"version":3,"file":"trace-application.d.ts","sourceRoot":"","sources":["../../src/application/trace-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAMjE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAED,KAAK,MAAM,GAAG,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzD,0GAA0G;AAC1G,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;IACxF,QAAQ,CAAC,QAAQ,EAAE,CACjB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAC9D,wBAAwB,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,qBAAqB,KAAK,qBAAqB,CAAC;IACpF,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAChG,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,aAAa,CAAC;IACnE,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,iBAAiB,CAezF"}
1
+ {"version":3,"file":"trace-application.d.ts","sourceRoot":"","sources":["../../src/application/trace-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAQjE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;CACpC;AAED,KAAK,MAAM,GAAG,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzD,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/F,0GAA0G;AAC1G,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,CAAC;IAChE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,yBAAyB,KAAK,yBAAyB,CAAC;IACxF,QAAQ,CAAC,QAAQ,EAAE,CACjB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAC9D,wBAAwB,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,qBAAqB,KAAK,qBAAqB,CAAC;IACpF,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAChG,QAAQ,CAAC,aAAa,EAAE,CACtB,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KACrD,gBAAgB,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,aAAa,CAAC;IACnE,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,iBAAiB,CAiBzF"}
@@ -4,12 +4,14 @@ import { traceBindings } from '../dependency/trace-bindings.js';
4
4
  import { tracedDomainEvents } from '../domain-events/traced-domain-events.js';
5
5
  import { tracedConsumer } from '../events/traced-consumer.js';
6
6
  import { tracedPublisher } from '../events/traced-publisher.js';
7
+ import { tracedBackgroundJob } from '../jobs/traced-background-job.js';
7
8
  import { tracedJob } from '../jobs/traced-job.js';
9
+ import { captureTraceparent } from '../propagation/capture-traceparent.js';
8
10
  import { traceUseCases } from '../use-case/trace-use-cases.js';
9
11
  /**
10
12
  * Everything that traces an application, in one value: `kernelModule({ instrumentation:
11
13
  * traceApplication() })`. Use cases, repositories and adapters, the dispatch of domain events
12
- * and their handlers, the outbox, the publications, the consumers and the jobs each get their
14
+ * and their handlers, the outbox, the publications, the consumers, the jobs and the background jobs each get their
13
15
  * span; error reports carry the trace id, and the execution scope of the application is given
14
16
  * to `configureTracing`, so spans and log fields carry the correlation id.
15
17
  */
@@ -22,6 +24,8 @@ export function traceApplication(options = {}) {
22
24
  consumer: (handler, { consumer, context }) => tracedConsumer(handler, { consumer, context, trace }),
23
25
  domainEvents: tracedDomainEvents,
24
26
  job: tracedJob,
27
+ backgroundJob: tracedBackgroundJob,
28
+ traceparent: captureTraceparent,
25
29
  errorReporter: tracedErrorReporter,
26
30
  executionScope: (executionScope) => {
27
31
  configureTracing({ executionScope });
@@ -1 +1 @@
1
- {"version":3,"file":"trace-application.js","sourceRoot":"","sources":["../../src/application/trace-application.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAsB,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AA4B/D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAA4B,EAAE;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IAE9C,OAAO;QACL,OAAO,EAAE,aAAa,EAAE;QACxB,OAAO,EAAE,aAAa,EAAE;QACxB,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACnG,YAAY,EAAE,kBAAkB;QAChC,GAAG,EAAE,SAAS;QACd,aAAa,EAAE,mBAAmB;QAClC,cAAc,EAAE,CAAC,cAAc,EAAE,EAAE;YACjC,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"trace-application.js","sourceRoot":"","sources":["../../src/application/trace-application.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAsB,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAmC/D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAA4B,EAAE;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC;IAE9C,OAAO;QACL,OAAO,EAAE,aAAa,EAAE;QACxB,OAAO,EAAE,aAAa,EAAE;QACxB,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;QACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACnG,YAAY,EAAE,kBAAkB;QAChC,GAAG,EAAE,SAAS;QACd,aAAa,EAAE,mBAAmB;QAClC,WAAW,EAAE,kBAAkB;QAC/B,aAAa,EAAE,mBAAmB;QAClC,cAAc,EAAE,CAAC,cAAc,EAAE,EAAE;YACjC,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { isNoiseRoute } from './http/is-noise-route.js';
18
18
  export { NOISE_PATHS } from './http/noise-paths.js';
19
19
  export { tracedRoutes, type TracedResponse, type TracedRoute, type TracedRoutesOptions } from './http/traced-routes.js';
20
20
  export { tracedJob, type TracedJobOptions } from './jobs/traced-job.js';
21
+ export { tracedBackgroundJob } from './jobs/traced-background-job.js';
21
22
  export { DROPPED_SPANS_ATTRIBUTE } from './local-root/admit-dependency-span.js';
22
23
  export { CORRELATION_ID_ATTRIBUTE, ORIGIN_ATTRIBUTE } from './local-root/correlate.js';
23
24
  export { LocalRootTracker } from './local-root/local-root-tracker.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AACxF,YAAY,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ export { isNoiseRoute } from './http/is-noise-route.js';
15
15
  export { NOISE_PATHS } from './http/noise-paths.js';
16
16
  export { tracedRoutes } from './http/traced-routes.js';
17
17
  export { tracedJob } from './jobs/traced-job.js';
18
+ export { tracedBackgroundJob } from './jobs/traced-background-job.js';
18
19
  export { DROPPED_SPANS_ATTRIBUTE } from './local-root/admit-dependency-span.js';
19
20
  export { CORRELATION_ID_ATTRIBUTE, ORIGIN_ATTRIBUTE } from './local-root/correlate.js';
20
21
  export { LocalRootTracker } from './local-root/local-root-tracker.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,GAGjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAuB,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAsB,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,eAAe,EAA+B,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAA8B,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAE,eAAe,EAA+B,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAgC,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAmE,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAkC,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAExF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,GAGjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAuB,MAAM,mCAAmC,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAsB,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,eAAe,EAA+B,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAA8B,MAAM,6BAA6B,CAAC;AAC5G,OAAO,EAAE,eAAe,EAA+B,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAgC,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAmE,MAAM,yBAAyB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAkC,MAAM,sCAAsC,CAAC;AAC1G,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAC;AAExF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { BackgroundJobExecution } from '@ddd-ts-kit/kernel';
2
+ import type { TracedJobOptions } from './traced-job.js';
3
+ type BackgroundJobRun = (payload: unknown, execution: BackgroundJobExecution) => Promise<void>;
4
+ /**
5
+ * Wraps an attempt of a background job: a CONSUMER span `job <name>`, child of the span that
6
+ * enqueued it, so that the request and the work it handed to a worker read as one trace, every
7
+ * attempt included. It says the job, the attempt and the outcome, never the payload.
8
+ */
9
+ export declare function tracedBackgroundJob(run: BackgroundJobRun, options: TracedJobOptions): BackgroundJobRun;
10
+ export {};
11
+ //# sourceMappingURL=traced-background-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traced-background-job.d.ts","sourceRoot":"","sources":["../../src/jobs/traced-background-job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAKjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,KAAK,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/F;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CA2BtG"}
@@ -0,0 +1,32 @@
1
+ import { SpanKind, context, trace } from '@opentelemetry/api';
2
+ import { workAttributes } from '../local-root/work-attributes.js';
3
+ import { spanContextFromTraceparent } from '../propagation/span-context-from-traceparent.js';
4
+ import { inSpan } from '../span/in-span.js';
5
+ import { OUTCOME_ATTRIBUTE } from '../span/outcome-attribute.js';
6
+ /**
7
+ * Wraps an attempt of a background job: a CONSUMER span `job <name>`, child of the span that
8
+ * enqueued it, so that the request and the work it handed to a worker read as one trace, every
9
+ * attempt included. It says the job, the attempt and the outcome, never the payload.
10
+ */
11
+ export function tracedBackgroundJob(run, options) {
12
+ return (payload, execution) => {
13
+ const producer = execution.traceparent === undefined ? undefined : spanContextFromTraceparent(execution.traceparent);
14
+ const active = context.active();
15
+ const attributes = {
16
+ 'app.job.name': options.name,
17
+ ...(options.context === undefined ? {} : { 'app.context': options.context }),
18
+ 'app.job.id': execution.jobId,
19
+ 'app.job.attempt': execution.attempt,
20
+ ...workAttributes(),
21
+ };
22
+ return inSpan({
23
+ name: `job ${options.name}`,
24
+ options: { kind: SpanKind.CONSUMER, attributes },
25
+ parent: producer === undefined ? active : trace.setSpanContext(active, producer),
26
+ }, async (span) => {
27
+ await run(payload, execution);
28
+ span.setAttribute(OUTCOME_ATTRIBUTE, 'succeeded');
29
+ });
30
+ };
31
+ }
32
+ //# sourceMappingURL=traced-background-job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traced-background-job.js","sourceRoot":"","sources":["../../src/jobs/traced-background-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAKjE;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAqB,EAAE,OAAyB;IAClF,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;QAC5B,MAAM,QAAQ,GACZ,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEtG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAG;YACjB,cAAc,EAAE,OAAO,CAAC,IAAI;YAC5B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5E,YAAY,EAAE,SAAS,CAAC,KAAK;YAC7B,iBAAiB,EAAE,SAAS,CAAC,OAAO;YACpC,GAAG,cAAc,EAAE;SACpB,CAAC;QAEF,OAAO,MAAM,CACX;YACE,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,EAAE;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE;YAChD,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC;SACjF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,MAAM,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-ts-kit/tracing",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "Non-invasive OpenTelemetry tracing: adapters are wrapped at the composition root, the domain never knows.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -34,7 +34,7 @@
34
34
  "dist"
35
35
  ],
36
36
  "dependencies": {
37
- "@ddd-ts-kit/kernel": "0.9.0"
37
+ "@ddd-ts-kit/kernel": "0.11.0"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@opentelemetry/api": "^1.9.0",
@@ -62,11 +62,11 @@
62
62
  }
63
63
  },
64
64
  "devDependencies": {
65
- "@ddd-ts-kit/audit": "0.9.0",
66
- "@ddd-ts-kit/di": "0.9.0",
67
- "@ddd-ts-kit/events": "0.9.0",
68
- "@ddd-ts-kit/http": "0.9.0",
69
- "@ddd-ts-kit/scheduling": "0.9.0",
65
+ "@ddd-ts-kit/audit": "0.11.0",
66
+ "@ddd-ts-kit/di": "0.11.0",
67
+ "@ddd-ts-kit/events": "0.11.0",
68
+ "@ddd-ts-kit/http": "0.11.0",
69
+ "@ddd-ts-kit/scheduling": "0.11.0",
70
70
  "@opentelemetry/api": "^1.9.1",
71
71
  "@opentelemetry/auto-instrumentations-node": "latest",
72
72
  "@opentelemetry/context-async-hooks": "^2.0.0",