@volontariapp/workers 1.3.40-snap-1048610 → 1.4.0-snap-1ed0a4f

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Restore the trace context of an asynchronous step. `BaseWorker.process`, `SinglePostProcessor` and `BatchPostProcessor` now extract the `traceparent` carried by the job or the event and run the handler in a child span (`job <type>` / `event <type>`, attributes `type`, `emitter`, `correlation_id`). A batch gets one span per message, in the trace of its own message, plus a batch span linked to them. Adds `runInTraceContext` and `runBatchInTraceContext` to `@volontariapp/database`. A message without a `traceparent` starts a new trace.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies []:
12
+ - @volontariapp/database@3.8.0
13
+ - @volontariapp/outbox@0.10.2
14
+
3
15
  ## 1.3.40
4
16
 
5
17
  ### Patch Changes
@@ -10,6 +10,7 @@ export declare abstract class BaseWorker<K extends JobMessagingType> extends Wor
10
10
  constructor(auditRepo?: JobAuditRepository | undefined);
11
11
  protected getPayload(job: Job<JobEnvelope<JobRegistry[K]>, void, K>): JobRegistry[K];
12
12
  process(job: Job<JobEnvelope<JobRegistry[K]>, void, K>, _token?: string): Promise<void>;
13
+ private processWithAudit;
13
14
  protected abstract processJob(job: Job<JobEnvelope<JobRegistry[K]>, void, K>): Promise<unknown>;
14
15
  private getRedisClient;
15
16
  private isJobAlreadyCompleted;
@@ -1 +1 @@
1
- {"version":3,"file":"base.worker.d.ts","sourceRoot":"","sources":["../../src/core/base.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAE,GAAG,EAAe,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,8BAAsB,UAAU,CAAC,CAAC,SAAS,gBAAgB,CAAE,SAAQ,UAAU;IAIjE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB;IAH7D,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAkD;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAc;gBAElB,SAAS,CAAC,EAAE,kBAAkB,YAAA;IAQ7D,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAI9E,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C7F,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAEjF,cAAc;YAQd,qBAAqB;YAyDrB,yBAAyB;YAgBzB,gBAAgB;YA6BhB,kBAAkB;YAiClB,kBAAkB;CA+BjC"}
1
+ {"version":3,"file":"base.worker.d.ts","sourceRoot":"","sources":["../../src/core/base.worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAE,GAAG,EAAe,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,8BAAsB,UAAU,CAAC,CAAC,SAAS,gBAAgB,CAAE,SAAQ,UAAU;IAIjE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB;IAH7D,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAkD;IAC3E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAc;gBAElB,SAAS,CAAC,EAAE,kBAAkB,YAAA;IAQ7D,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAS9E,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAW/E,gBAAgB;IA0C9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAEjF,cAAc;YAQd,qBAAqB;YAyDrB,yBAAyB;YAgBzB,gBAAgB;YA6BhB,kBAAkB;YAiClB,kBAAkB;CA+BjC"}
@@ -1,7 +1,7 @@
1
1
  import { WorkerHost } from '@nestjs/bullmq';
2
2
  import { Logger } from '@volontariapp/logger';
3
3
  import { hostname } from 'node:os';
4
- import { JobAuditStatus } from '@volontariapp/database';
4
+ import { JobAuditStatus, runInTraceContext } from '@volontariapp/database';
5
5
  export class BaseWorker extends WorkerHost {
6
6
  auditRepo;
7
7
  logger = new Logger({ context: this.constructor.name });
@@ -14,6 +14,13 @@ export class BaseWorker extends WorkerHost {
14
14
  return job.data.payload;
15
15
  }
16
16
  async process(job, _token) {
17
+ await runInTraceContext({
18
+ traceparent: job.data.traceparent,
19
+ name: `job ${job.name}`,
20
+ attributes: { type: job.name, emitter: job.data.emitter },
21
+ }, () => this.processWithAudit(job));
22
+ }
23
+ async processWithAudit(job) {
17
24
  this.logger.info('Processing job', {
18
25
  jobId: job.id,
19
26
  type: job.name,
@@ -1 +1 @@
1
- {"version":3,"file":"base.worker.js","sourceRoot":"","sources":["../../src/core/base.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.worker.js","sourceRoot":"","sources":["../../src/core/base.worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.worker.trace.unit.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.worker.trace.unit.spec.d.ts","sourceRoot":"","sources":["../../../../src/test/specs/base-worker/base.worker.trace.unit.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { afterAll, beforeAll, afterEach, describe, expect, it, jest } from '@jest/globals';
2
+ import { SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';
3
+ import { JobMessagingType } from '@volontariapp/messaging';
4
+ import { TestWorker, makeTestJob, createTraceRecorder } from '../../utils/index.js';
5
+ const TRACE_ID = '0af7651916cd43dd8448eb211c80319c';
6
+ const PARENT_SPAN_ID = 'b7ad6b7169203331';
7
+ const TRACEPARENT = `00-${TRACE_ID}-${PARENT_SPAN_ID}-01`;
8
+ const SPAN_NAME = `job ${JobMessagingType.SEND_WELCOME_EMAIL}`;
9
+ describe('BaseWorker — trace context (Unit)', () => {
10
+ const recorder = createTraceRecorder();
11
+ let worker;
12
+ beforeAll(() => {
13
+ recorder.start();
14
+ });
15
+ afterAll(async () => {
16
+ await recorder.stop();
17
+ });
18
+ afterEach(() => {
19
+ recorder.reset();
20
+ jest.restoreAllMocks();
21
+ });
22
+ const makeJobWithTraceparent = (traceparent) => {
23
+ const job = makeTestJob();
24
+ return makeTestJob({ data: { ...job.data, traceparent } });
25
+ };
26
+ const setup = () => {
27
+ worker = new TestWorker();
28
+ jest.spyOn(worker.logger, 'info').mockReturnValue(undefined);
29
+ };
30
+ it('should run the job in a span that is a child of the trace carried by the job', async () => {
31
+ setup();
32
+ jest.spyOn(worker, 'processJob').mockResolvedValue(undefined);
33
+ await worker.process(makeJobWithTraceparent(TRACEPARENT));
34
+ const span = recorder.span(SPAN_NAME);
35
+ expect(span.spanContext().traceId).toBe(TRACE_ID);
36
+ expect(span.parentSpanContext?.spanId).toBe(PARENT_SPAN_ID);
37
+ expect(span.kind).toBe(SpanKind.CONSUMER);
38
+ expect(span.attributes).toMatchObject({
39
+ type: JobMessagingType.SEND_WELCOME_EMAIL,
40
+ emitter: 'ms-test',
41
+ });
42
+ });
43
+ it('should make that span the active one while the handler runs', async () => {
44
+ setup();
45
+ let activeTraceId;
46
+ jest.spyOn(worker, 'processJob').mockImplementation(() => {
47
+ activeTraceId = trace.getActiveSpan()?.spanContext().traceId;
48
+ return Promise.resolve(undefined);
49
+ });
50
+ await worker.process(makeJobWithTraceparent(TRACEPARENT));
51
+ expect(activeTraceId).toBe(TRACE_ID);
52
+ });
53
+ it('should start a new trace for a job enqueued without a traceparent', async () => {
54
+ setup();
55
+ const processJobSpy = jest.spyOn(worker, 'processJob').mockResolvedValue(undefined);
56
+ await worker.process(makeJobWithTraceparent(undefined));
57
+ expect(processJobSpy).toHaveBeenCalledTimes(1);
58
+ const span = recorder.span(SPAN_NAME);
59
+ expect(span.parentSpanContext).toBeUndefined();
60
+ expect(span.spanContext().traceId).not.toBe(TRACE_ID);
61
+ });
62
+ it('should record the failure on the span and still rethrow it', async () => {
63
+ setup();
64
+ jest.spyOn(worker.logger, 'error').mockReturnValue(undefined);
65
+ jest.spyOn(worker, 'processJob').mockRejectedValue(new Error('handler failed'));
66
+ await expect(worker.process(makeJobWithTraceparent(TRACEPARENT))).rejects.toThrow('handler failed');
67
+ const span = recorder.span(SPAN_NAME);
68
+ expect(span.status.code).toBe(SpanStatusCode.ERROR);
69
+ expect(span.status.message).toBe('handler failed');
70
+ });
71
+ });
72
+ //# sourceMappingURL=base.worker.trace.unit.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.worker.trace.unit.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/base-worker/base.worker.trace.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export * from './database-cleanup.helper.js';
2
2
  export * from './redis-cleanup.helper.js';
3
3
  export * from './audit-repository.mock.js';
4
4
  export * from './job-audit.factory.js';
5
+ export * from './trace-recorder.helper.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/test/utils/helpers/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/test/utils/helpers/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC"}
@@ -2,4 +2,5 @@ export * from './database-cleanup.helper.js';
2
2
  export * from './redis-cleanup.helper.js';
3
3
  export * from './audit-repository.mock.js';
4
4
  export * from './job-audit.factory.js';
5
+ export * from './trace-recorder.helper.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test/utils/helpers/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test/utils/helpers/shared/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReadableSpan } from '@opentelemetry/sdk-trace-base';
2
+ export declare function createTraceRecorder(): {
3
+ start: () => void;
4
+ stop: () => Promise<void>;
5
+ reset: () => void;
6
+ span: (name: string) => ReadableSpan;
7
+ };
8
+ //# sourceMappingURL=trace-recorder.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-recorder.helper.d.ts","sourceRoot":"","sources":["../../../../../src/test/utils/helpers/shared/trace-recorder.helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAOlE,wBAAgB,mBAAmB;iBAKpB,IAAI;gBAGC,OAAO,CAAC,IAAI,CAAC;iBAMlB,IAAI;iBAGF,MAAM,KAAG,YAAY;EAQrC"}
@@ -0,0 +1,29 @@
1
+ import { context, propagation, trace } from '@opentelemetry/api';
2
+ import { InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
3
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
4
+ export function createTraceRecorder() {
5
+ const exporter = new InMemorySpanExporter();
6
+ const provider = new NodeTracerProvider({ spanProcessors: [new SimpleSpanProcessor(exporter)] });
7
+ return {
8
+ start: () => {
9
+ provider.register();
10
+ },
11
+ stop: async () => {
12
+ await provider.shutdown();
13
+ trace.disable();
14
+ context.disable();
15
+ propagation.disable();
16
+ },
17
+ reset: () => {
18
+ exporter.reset();
19
+ },
20
+ span: (name) => {
21
+ const found = exporter.getFinishedSpans().find((span) => span.name === name);
22
+ if (!found) {
23
+ throw new Error(`span ${name} not found`);
24
+ }
25
+ return found;
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=trace-recorder.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-recorder.helper.js","sourceRoot":"","sources":["../../../../../src/test/utils/helpers/shared/trace-recorder.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMnE,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjG,OAAO;QACL,KAAK,EAAE,GAAS,EAAE;YAChB,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,EAAE,KAAK,IAAmB,EAAE;YAC9B,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1B,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,KAAK,EAAE,GAAS,EAAE;YAChB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,EAAE,CAAC,IAAY,EAAgB,EAAE;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC7E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volontariapp/workers",
3
- "version": "1.3.40-snap-1048610",
3
+ "version": "1.4.0-snap-1ed0a4f",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -41,11 +41,11 @@
41
41
  "dependencies": {
42
42
  "@volontariapp/bridge": "1.0.7",
43
43
  "@volontariapp/config": "3.2.3",
44
- "@volontariapp/database": "3.7.0-snap-1048610",
44
+ "@volontariapp/database": "3.8.0-snap-1ed0a4f",
45
45
  "@volontariapp/health-check": "1.0.7",
46
46
  "@volontariapp/logger": "0.3.0",
47
47
  "@volontariapp/messaging": "2.25.0",
48
- "@volontariapp/outbox": "0.10.1-snap-1048610"
48
+ "@volontariapp/outbox": "0.10.2-snap-1ed0a4f"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@nestjs/bullmq": "^11.0.0",
@@ -57,10 +57,13 @@
57
57
  "@jest/globals": "^30.3.0",
58
58
  "@nestjs/bullmq": "^11.0.0",
59
59
  "@nestjs/common": "^11.0.0",
60
+ "@opentelemetry/api": "^1.9.0",
61
+ "@opentelemetry/sdk-trace-base": "^2.7.1",
62
+ "@opentelemetry/sdk-trace-node": "^2.7.1",
60
63
  "@types/jest": "^30.0.0",
61
64
  "@types/node": "^24.0.0",
62
- "@volontariapp/database": "3.7.0-snap-1048610",
63
- "@volontariapp/outbox": "0.10.1-snap-1048610",
65
+ "@volontariapp/database": "3.8.0-snap-1ed0a4f",
66
+ "@volontariapp/outbox": "0.10.2-snap-1ed0a4f",
64
67
  "@volontariapp/testing": "1.0.3",
65
68
  "bullmq": "^5.76.5",
66
69
  "ioredis": "^5.3.7",