From a0564edaf75fb154ce563e6bb64c4107d6871c81 Mon Sep 17 00:00:00 2001 From: Francesco Novy Date: Fri, 4 Nov 2022 10:15:59 +0100 Subject: [PATCH] feat(core): Add `instrumenter` option to `ClientOptions` (#6128) * feat(node): Add `instrumentor` option to Node SDK * chore(otel): Move `Instrumenter` type to `@sentry/types` * feat(otel): Move instrumenter option to base ClientOptions --- packages/node/src/sdk.ts | 4 ++++ packages/node/test/index.test.ts | 19 +++++++++++++++++++ packages/types/src/index.ts | 1 + packages/types/src/instrumenter.ts | 1 + packages/types/src/options.ts | 10 ++++++++++ 5 files changed, 35 insertions(+) create mode 100644 packages/types/src/instrumenter.ts 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/test/index.test.ts b/packages/node/test/index.test.ts index 3cbd6ebf2922..d345998d3628 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', () => { @@ -470,4 +471,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'); + }); + }); }); 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'; diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts index efd4812b7efb..f211ef5f3c8b 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