Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/migration/v8-to-v9.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -322,7 +322,7 @@ The following outlines deprecations that were introduced in version 8 of the SDK

- **Passing `undefined` to `tracesSampleRate` / `tracesSampler` / `enableTracing` will be handled differently in v9**

In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) will result in tracing being _enabled_, although no spans will be generated.
In v8, explicitly setting `tracesSampleRate` (even if it is set to `undefined`) resulted in tracing being _enabled_, although no spans were generated.

```ts
Sentry.init({
Expand All@@ -334,6 +334,8 @@ In v9, we will streamline this behavior so that passing `undefined` will result

If you are relying on `undefined` being passed in and having tracing enabled because of this, you should update your config to set e.g. `tracesSampleRate: 0` instead, which will also enable tracing in v9.

The `enableTracing` option was removed. In v9, to emulate `enableTracing: true`, set `tracesSampleRate: 1`. To emulate `enableTracing: false`, remove the `tracesSampleRate` and `tracesSampler` options (if configured).

- **The `autoSessionTracking` option is deprecated.**

To enable session tracking, it is recommended to unset `autoSessionTracking` and ensure that either, in browser environments the `browserSessionIntegration` is added, or in server environments the `httpIntegration` is added.
Expand Down
5 changes: 2 additions & 3 deletions packages/astro/test/client/sdk.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,7 +52,6 @@ describe('Sentry client SDK', () => {
it.each([
['tracesSampleRate', { tracesSampleRate: 0 }],
['tracesSampler', { tracesSampler: () => 1.0 }],
['enableTracing', { enableTracing: true }],
['no tracing option set', {}],
])('adds browserTracingIntegration if tracing is enabled via %s', (_, tracingOptions) => {
init({
Expand All@@ -72,7 +71,7 @@ describe('Sentry client SDK', () => {

init({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
});

const integrationsToInit = browserInit.mock.calls[0]![0]?.defaultIntegrations || [];
Expand All@@ -90,7 +89,7 @@ describe('Sentry client SDK', () => {
integrations: [
browserTracingIntegration({ finalTimeout: 10, instrumentNavigation: false, instrumentPageLoad: false }),
],
enableTracing: true,
tracesSampleRate: 1,
});

const browserTracing = getClient<BrowserClient>()?.getIntegrationByName('BrowserTracing');
Expand Down
1 change: 0 additions & 1 deletion packages/cloudflare/test/integrations/fetch.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,6 @@ describe('WinterCGFetch instrumentation', () => {

client = new FakeClient({
dsn: 'https://public@dsn.ingest.sentry.io/1337',
enableTracing: true,
tracesSampleRate: 1,
integrations: [],
transport: () => ({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/tracing/sampling.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,7 +12,7 @@ import { parseSampleRate } from '../utils/parseSampleRate';
* sent to Sentry.
*/
export function sampleSpan(
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'>,
options: Pick<Options, 'tracesSampleRate' | 'tracesSampler'>,
samplingContext: SamplingContext,
sampleRand: number,
): [sampled: boolean, sampleRate?: number] {
Expand All@@ -21,7 +21,7 @@ export function sampleSpan(
return [false];
}

// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should
// we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should
// work; prefer the hook if so
let sampleRate;
if (typeof options.tracesSampler === 'function') {
Expand All@@ -30,9 +30,6 @@ export function sampleSpan(
sampleRate = samplingContext.parentSampled;
} else if (typeof options.tracesSampleRate !== 'undefined') {
sampleRate = options.tracesSampleRate;
} else {
// When `enableTracing === true`, we use a sample rate of 100%
sampleRate = 1;
}

// Since this is coming from the user (or from a function provided by the user), who knows what we might get.
Expand Down
11 changes: 0 additions & 11 deletions packages/core/src/types-hoist/options.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,17 +81,6 @@ export interface ClientOptions<TO extends BaseTransportOptions = BaseTransportOp
*/
tracesSampleRate?: number;

/**
* If this is enabled, spans and trace data will be generated and captured.
* This will set the `tracesSampleRate` to the recommended default of `1.0` if `tracesSampleRate` is undefined.
* Note that `tracesSampleRate` and `tracesSampler` take precedence over this option.
*
* @deprecated This option is deprecated and will be removed in the next major version. If you want to enable performance
* monitoring, please use the `tracesSampleRate` or `tracesSampler` options instead. If you wan't to disable performance
* monitoring, remove the `tracesSampler` and `tracesSampleRate` options.
*/
enableTracing?: boolean;

/**
* If this is enabled, any spans started will always have their parent be the active root span,
* if there is any active span.
Expand Down
9 changes: 6 additions & 3 deletions packages/core/src/utils/hasTracingEnabled.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,14 +10,17 @@ declare const __SENTRY_TRACING__: boolean | undefined;
* Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.
*/
export function hasTracingEnabled(
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler' | 'enableTracing'> | undefined,
maybeOptions?: Pick<Options, 'tracesSampleRate' | 'tracesSampler'> | undefined,
): boolean {
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {
return false;
}

const client = getClient();
const options = maybeOptions || client?.getOptions();
// eslint-disable-next-line deprecation/deprecation
return !!options && (options.enableTracing || options.tracesSampleRate != null || !!options.tracesSampler);
return (
!!options &&
// Note: This check is `!= null`, meaning "nullish"
(options.tracesSampleRate != null || !!options.tracesSampler)
);
}
4 changes: 2 additions & 2 deletions packages/core/test/lib/feedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -314,7 +314,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand DownExpand Up@@ -385,7 +385,7 @@ describe('captureFeedback', () => {
getDefaultTestClientOptions({
dsn: 'https://dsn@ingest.f00.f00/1',
enableSend: true,
enableTracing: true,
tracesSampleRate: 1,
// We don't care about transactions here...
beforeSendTransaction() {
return null;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/errors.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,7 +24,7 @@ describe('registerErrorHandlers()', () => {
beforeEach(() => {
mockAddGlobalErrorInstrumentationHandler.mockClear();
mockAddGlobalUnhandledRejectionInstrumentationHandler.mockClear();
const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
2 changes: 1 addition & 1 deletion packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -1684,7 +1684,7 @@ describe('withActiveSpan()', () => {

setAsyncContextStrategy(undefined);

const options = getDefaultTestClientOptions({ enableTracing: true });
const options = getDefaultTestClientOptions({ tracesSampleRate: 1 });
const client = new TestClient(options);
setCurrentClient(client);
client.init();
Expand Down
17 changes: 1 addition & 16 deletions packages/core/test/lib/utils/hasTracingEnabled.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,28 +5,13 @@ describe('hasTracingEnabled', () => {
const tracesSampleRate = 1;
it.each([
['No options', undefined, false],
['No tracesSampler or tracesSampleRate or enableTracing', {}, false],
['No tracesSampler or tracesSampleRate', {}, false],
['With tracesSampler', { tracesSampler }, true],
['With tracesSampleRate', { tracesSampleRate }, true],
['With enableTracing=true', { enableTracing: true }, true],
['With enableTracing=false', { enableTracing: false }, false],
['With enableTracing=undefined', { enableTracing: undefined }, false],
['With tracesSampleRate=undefined', { tracesSampleRate: undefined }, false],
['With tracesSampleRate=0', { tracesSampleRate: 0 }, true],
['With tracesSampler=undefined', { tracesSampler: undefined }, false],
['With tracesSampler && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampleRate && enableTracing=false', { tracesSampler, enableTracing: false }, true],
['With tracesSampler and tracesSampleRate', { tracesSampler, tracesSampleRate }, true],
[
'With tracesSampler and tracesSampleRate and enableTracing=true',
{ tracesSampler, tracesSampleRate, enableTracing: true },
true,
],
[
'With tracesSampler and tracesSampleRate and enableTracing=false',
{ tracesSampler, tracesSampleRate, enableTracing: false },
true,
],
])(
'%s',
(_: string, input: Parameters<typeof hasTracingEnabled>[0], output: ReturnType<typeof hasTracingEnabled>) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/feedback/src/core/sendFeedback.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -141,7 +141,7 @@ describe('sendFeedback', () => {
});

it('applies active span data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await startSpan({ name: 'test span' }, () => {
Expand DownExpand Up@@ -196,7 +196,7 @@ describe('sendFeedback', () => {
});

it('applies scope data to feedback', async () => {
mockSdk({ sentryOptions: { enableTracing: true } });
mockSdk({ sentryOptions: { tracesSampleRate: 1 } });
const mockTransport = jest.spyOn(getClient()!.getTransport()!, 'send');

await withIsolationScope(isolationScope => {
Expand Down
10 changes: 5 additions & 5 deletions packages/node/test/integration/breadcrumbs.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -144,7 +144,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -196,7 +196,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -237,7 +237,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand DownExpand Up@@ -295,7 +295,7 @@ describe('Integration | breadcrumbs', () => {
const beforeSend = jest.fn(() => null);
const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb);

mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, enableTracing: true });
mockSdkInit({ beforeSend, beforeBreadcrumb, beforeSendTransaction, tracesSampleRate: 1 });

const client = getClient() as NodeClient;

Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/scope.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -14,12 +14,12 @@ describe('Integration | Scope', () => {
describe.each([
['with tracing', true],
['without tracing', false],
])('%s', (_name, enableTracing) => {
])('%s', (_name, tracingEnabled) => {
it('correctly syncs OTEL context & Sentry hub/scope', async () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;

Expand All@@ -42,7 +42,7 @@ describe('Integration | Scope', () => {
scope2.setTag('tag3', 'val3');

Sentry.startSpan({ name: 'outer' }, span => {
expect(getCapturedScopesOnSpan(span).scope).toBe(enableTracing ? scope2 : undefined);
expect(getCapturedScopesOnSpan(span).scope).toBe(tracingEnabled ? scope2 : undefined);

spanId = span.spanContext().spanId;
traceId = span.spanContext().traceId;
Expand DownExpand Up@@ -92,7 +92,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(1);
// Note: Scope for transaction is taken at `start` time, not `finish` time
expect(beforeSendTransaction).toHaveBeenCalledWith(
Expand DownExpand Up@@ -133,7 +133,7 @@ describe('Integration | Scope', () => {
const beforeSend = jest.fn(() => null);
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing, beforeSend, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: tracingEnabled ? 1 : 0, beforeSend, beforeSendTransaction });

const client = getClient() as NodeClient;
const rootScope = getCurrentScope();
Expand DownExpand Up@@ -232,7 +232,7 @@ describe('Integration | Scope', () => {
},
);

if (enableTracing) {
if (tracingEnabled) {
expect(beforeSendTransaction).toHaveBeenCalledTimes(2);
}
});
Expand Down
12 changes: 6 additions & 6 deletions packages/node/test/integration/transactions.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('Integration | Transactions', () => {
});

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
release: '8.0.0',
});
Expand DownExpand Up@@ -164,7 +164,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -309,7 +309,7 @@ describe('Integration | Transactions', () => {
it('correctly creates concurrent transaction & spans when using native OTEL tracer', async () => {
const beforeSendTransaction = jest.fn(() => null);

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient<Sentry.NodeClient>();

Expand DownExpand Up@@ -457,7 +457,7 @@ describe('Integration | Transactions', () => {
traceFlags: TraceFlags.SAMPLED,
};

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const client = Sentry.getClient()!;

Expand DownExpand Up@@ -562,7 +562,7 @@ describe('Integration | Transactions', () => {
const logs: unknown[] = [];
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });

const provider = getProvider();
const multiSpanProcessor = provider?.activeSpanProcessor as
Expand DownExpand Up@@ -641,7 +641,7 @@ describe('Integration | Transactions', () => {
jest.spyOn(logger, 'log').mockImplementation(msg => logs.push(msg));

mockSdkInit({
enableTracing: true,
tracesSampleRate: 1,
beforeSendTransaction,
maxSpanWaitDuration: 100 * 60,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/node/test/sdk/api.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ describe('withActiveSpan()', () => {

it('should create child spans when calling startSpan within the callback', async () => {
const beforeSendTransaction = jest.fn(() => null);
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

const inactiveSpan = startInactiveSpan({ name: 'inactive-span' });
Expand DownExpand Up@@ -70,7 +70,7 @@ describe('withActiveSpan()', () => {
transactions.push(event);
return null;
});
mockSdkInit({ enableTracing: true, beforeSendTransaction });
mockSdkInit({ tracesSampleRate: 1, beforeSendTransaction });
const client = getClient();

startSpan({ name: 'parent-span' }, () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/node/test/sdk/init.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -108,7 +108,7 @@ describe('init()', () => {
init({
dsn: PUBLIC_DSN,
integrations: mockIntegrations,
enableTracing: true,
tracesSampleRate: 1,
});

expect(mockIntegrations[0]?.setupOnce as jest.Mock).toHaveBeenCalledTimes(1);
Expand Down
Loading