From 52a9a7f9ba415dbff5420f46d7685c46b61b5625 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Thu, 3 Nov 2022 13:51:09 +0100 Subject: [PATCH] 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'); + }); + }); });