From e00de102d16bb86b840df37c14dc73b9fc6a4a02 Mon Sep 17 00:00:00 2001 From: Abhijeet Prasad Date: Wed, 2 Nov 2022 12:30:50 +0100 Subject: [PATCH] feat(otel): Add base SentryPropagator class (#6109) --- packages/opentelemetry-node/src/constants.ts | 3 ++ packages/opentelemetry-node/src/index.ts | 1 + packages/opentelemetry-node/src/propagator.ts | 29 +++++++++++++++++++ .../test/propagator.test.ts | 10 +++++++ 4 files changed, 43 insertions(+) create mode 100644 packages/opentelemetry-node/src/constants.ts create mode 100644 packages/opentelemetry-node/src/propagator.ts create mode 100644 packages/opentelemetry-node/test/propagator.test.ts diff --git a/packages/opentelemetry-node/src/constants.ts b/packages/opentelemetry-node/src/constants.ts new file mode 100644 index 000000000000..5c179dc5335b --- /dev/null +++ b/packages/opentelemetry-node/src/constants.ts @@ -0,0 +1,3 @@ +export const SENTRY_TRACE_HEADER = 'sentry-trace'; + +export const SENTRY_BAGGAGE_HEADER = 'baggage'; diff --git a/packages/opentelemetry-node/src/index.ts b/packages/opentelemetry-node/src/index.ts index 21b5f209d3a8..501c93432b44 100644 --- a/packages/opentelemetry-node/src/index.ts +++ b/packages/opentelemetry-node/src/index.ts @@ -1,3 +1,4 @@ import '@sentry/tracing'; export { SentrySpanProcessor } from './spanprocessor'; +export { SentryPropagator } from './propagator'; diff --git a/packages/opentelemetry-node/src/propagator.ts b/packages/opentelemetry-node/src/propagator.ts new file mode 100644 index 000000000000..897cc8819e33 --- /dev/null +++ b/packages/opentelemetry-node/src/propagator.ts @@ -0,0 +1,29 @@ +import { Context, TextMapGetter, TextMapPropagator, TextMapSetter } from '@opentelemetry/api'; + +import { SENTRY_BAGGAGE_HEADER, SENTRY_TRACE_HEADER } from './constants'; + +/** + * Injects and extracts `sentry-trace` and `baggage` headers from carriers. + */ +export class SentryPropagator implements TextMapPropagator { + /** + * @inheritDoc + */ + public inject(_context: Context, _carrier: unknown, _setter: TextMapSetter): void { + // no-op + } + + /** + * @inheritDoc + */ + public extract(context: Context, _carrier: unknown, _getter: TextMapGetter): Context { + return context; + } + + /** + * @inheritDoc + */ + public fields(): string[] { + return [SENTRY_TRACE_HEADER, SENTRY_BAGGAGE_HEADER]; + } +} diff --git a/packages/opentelemetry-node/test/propagator.test.ts b/packages/opentelemetry-node/test/propagator.test.ts new file mode 100644 index 000000000000..62311a586b6c --- /dev/null +++ b/packages/opentelemetry-node/test/propagator.test.ts @@ -0,0 +1,10 @@ +import { SENTRY_BAGGAGE_HEADER, SENTRY_TRACE_HEADER } from '../src/constants'; +import { SentryPropagator } from '../src/propagator'; + +describe('SentryPropagator', () => { + const propogator = new SentryPropagator(); + + it('returns fields set', () => { + expect(propogator.fields()).toEqual([SENTRY_TRACE_HEADER, SENTRY_BAGGAGE_HEADER]); + }); +});