From 612b2422e263272ed382216973a169d4595482c4 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Thu, 3 Nov 2022 13:51:09 +0100 Subject: [PATCH 1/3] feat(node): Add `instrumentor` option to Node SDK --- packages/node/src/sdk.ts | 4 ++++ packages/node/src/types.ts | 11 +++++++++++ packages/node/test/index.test.ts | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index d02245f19132..42751525fbaa 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -148,6 +148,10 @@ export function init(options: NodeOptions = {}): void { options.autoSessionTracking = true; } + if (options.instrumenter === undefined) { + options.instrumenter = 'sentry'; + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any if ((domain as any).active) { setHubOnCarrier(carrier, getCurrentHub()); diff --git a/packages/node/src/types.ts b/packages/node/src/types.ts index 4d890d8e10b8..2ec8b93c0408 100644 --- a/packages/node/src/types.ts +++ b/packages/node/src/types.ts @@ -2,6 +2,8 @@ import { ClientOptions, Options, TracePropagationTargets } from '@sentry/types'; import { NodeTransportOptions } from './transports'; +type SentryNodeInstrumenter = 'sentry' | 'otel'; + export interface BaseNodeOptions { /** Sets an optional server name (device name) */ serverName?: string; @@ -19,6 +21,15 @@ export interface BaseNodeOptions { */ tracePropagationTargets?: TracePropagationTargets; + /** + * The instrumenter to use. Defaults to `sentry`. + * When not set to `sentry`, auto-instrumentation inside of Sentry will be disabled, + * in favor of using external auto instrumentation. + * + * NOTE: Any option except for `sentry` is highly experimental and subject to change! + */ + instrumenter?: SentryNodeInstrumenter; + /** Callback that is executed when a fatal global error occurs. */ onFatalError?(error: Error): void; } diff --git a/packages/node/test/index.test.ts b/packages/node/test/index.test.ts index 7e5fc929beea..5f3a96812e48 100644 --- a/packages/node/test/index.test.ts +++ b/packages/node/test/index.test.ts @@ -16,6 +16,7 @@ import { } from '../src'; import { ContextLines, LinkedErrors } from '../src/integrations'; import { defaultStackParser } from '../src/sdk'; +import { NodeClientOptions } from '../src/types'; import { getDefaultNodeClientOptions } from './helper/node-client-options'; jest.mock('@sentry/core', () => { @@ -466,4 +467,22 @@ describe('SentryNode initialization', () => { expect(options.autoSessionTracking).toBe(undefined); }); }); + + describe('instrumenter', () => { + it('defaults to sentry instrumenter', () => { + init({ dsn }); + + const instrumenter = (getCurrentHub()?.getClient()?.getOptions() as NodeClientOptions).instrumenter; + + expect(instrumenter).toEqual('sentry'); + }); + + it('allows to set instrumenter', () => { + init({ dsn, instrumenter: 'otel' }); + + const instrumenter = (getCurrentHub()?.getClient()?.getOptions() as NodeClientOptions).instrumenter; + + expect(instrumenter).toEqual('otel'); + }); + }); }); From 8f593f9d5ad52227e7f7464a69e3bbef9f44fbc8 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Thu, 3 Nov 2022 14:08:57 +0100 Subject: [PATCH 2/3] chore(otel): Move `Instrumenter` type to `@sentry/types` --- packages/node/src/types.ts | 6 ++---- packages/types/src/index.ts | 1 + packages/types/src/instrumenter.ts | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 packages/types/src/instrumenter.ts diff --git a/packages/node/src/types.ts b/packages/node/src/types.ts index 2ec8b93c0408..c78741e39230 100644 --- a/packages/node/src/types.ts +++ b/packages/node/src/types.ts @@ -1,9 +1,7 @@ -import { ClientOptions, Options, TracePropagationTargets } from '@sentry/types'; +import { ClientOptions, Instrumenter, Options, TracePropagationTargets } from '@sentry/types'; import { NodeTransportOptions } from './transports'; -type SentryNodeInstrumenter = 'sentry' | 'otel'; - export interface BaseNodeOptions { /** Sets an optional server name (device name) */ serverName?: string; @@ -28,7 +26,7 @@ export interface BaseNodeOptions { * * NOTE: Any option except for `sentry` is highly experimental and subject to change! */ - instrumenter?: SentryNodeInstrumenter; + instrumenter?: Instrumenter; /** Callback that is executed when a fatal global error occurs. */ onFatalError?(error: Error): void; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 3de84113225a..f3bc63feda4c 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -92,3 +92,4 @@ export type { } from './transport'; export type { User, UserFeedback } from './user'; export type { WrappedFunction } from './wrappedfunction'; +export type { Instrumenter } from './instrumenter'; diff --git a/packages/types/src/instrumenter.ts b/packages/types/src/instrumenter.ts new file mode 100644 index 000000000000..4212d53b11f0 --- /dev/null +++ b/packages/types/src/instrumenter.ts @@ -0,0 +1 @@ +export type Instrumenter = 'sentry' | 'otel'; From f05cdeb13faf5b9e3b6782994cc0774b46a89850 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Thu, 3 Nov 2022 16:44:35 +0100 Subject: [PATCH 3/3] feat(otel): Move instrumenter option to base ClientOptions --- packages/node/src/types.ts | 11 +---------- packages/types/src/options.ts | 10 ++++++++++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/node/src/types.ts b/packages/node/src/types.ts index c78741e39230..4d890d8e10b8 100644 --- a/packages/node/src/types.ts +++ b/packages/node/src/types.ts @@ -1,4 +1,4 @@ -import { ClientOptions, Instrumenter, Options, TracePropagationTargets } from '@sentry/types'; +import { ClientOptions, Options, TracePropagationTargets } from '@sentry/types'; import { NodeTransportOptions } from './transports'; @@ -19,15 +19,6 @@ export interface BaseNodeOptions { */ tracePropagationTargets?: TracePropagationTargets; - /** - * The instrumenter to use. Defaults to `sentry`. - * When not set to `sentry`, auto-instrumentation inside of Sentry will be disabled, - * in favor of using external auto instrumentation. - * - * NOTE: Any option except for `sentry` is highly experimental and subject to change! - */ - instrumenter?: Instrumenter; - /** Callback that is executed when a fatal global error occurs. */ onFatalError?(error: Error): void; } diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index e4641b97aab1..455d9da881a9 100644 --- a/packages/types/src/options.ts +++ b/packages/types/src/options.ts @@ -1,5 +1,6 @@ import { Breadcrumb, BreadcrumbHint } from './breadcrumb'; import { Event, EventHint } from './event'; +import { Instrumenter } from './instrumenter'; import { Integration } from './integration'; import { CaptureContext } from './scope'; import { SdkMetadata } from './sdkmetadata'; @@ -58,6 +59,15 @@ export interface ClientOptions