Skip to content

Commit

Permalink
ref: Use getCurrentScope()/hub.getScope() instead of `configureSc…
Browse files Browse the repository at this point in the history
…ope()` (#9846)

In preparation for
#9841, as we want
to deprecate `configureScope`, refactor our own usage of this away.

I used a new transformer of sentry-migr8 for this, which did most of the
heavy lifting. I only needed to fix the block usage (which is more a
stylistic issue than an actual problem).

In some follow up, I'll also create a migr8 transform to refactor hub
usage away, to e.g. refactor `getCurrentHub().getScope()` to
`getCurrentScope()` etc. But for now this is OK I think.
  • Loading branch information
mydea committed Dec 15, 2023
1 parent 383c816 commit 1e8d2b3
Show file tree
Hide file tree
Showing 55 changed files with 242 additions and 342 deletions.
6 changes: 2 additions & 4 deletions packages/astro/src/client/sdk.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { BrowserOptions } from '@sentry/browser';
import { BrowserTracing, init as initBrowserSdk } from '@sentry/browser';
import { configureScope, hasTracingEnabled } from '@sentry/core';
import { getCurrentScope, hasTracingEnabled } from '@sentry/core';
import { addOrUpdateIntegration } from '@sentry/utils';

import { applySdkMetadata } from '../common/metadata';
Expand All @@ -20,9 +20,7 @@ export function init(options: BrowserOptions): void {

initBrowserSdk(options);

configureScope(scope => {
scope.setTag('runtime', 'browser');
});
getCurrentScope().setTag('runtime', 'browser');
}

function addClientIntegrations(options: BrowserOptions): void {
Expand Down
6 changes: 2 additions & 4 deletions packages/astro/src/server/middleware.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import {
captureException,
configureScope,
continueTrace,
getCurrentHub,
getCurrentScope,
runWithAsyncContext,
startSpan,
} from '@sentry/node';
Expand Down Expand Up @@ -106,9 +106,7 @@ async function instrumentRequest(
}

if (options.trackClientIp) {
configureScope(scope => {
scope.setUser({ ip_address: ctx.clientAddress });
});
getCurrentScope().setUser({ ip_address: ctx.clientAddress });
}

try {
Expand Down
6 changes: 2 additions & 4 deletions packages/astro/src/server/sdk.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { configureScope } from '@sentry/core';
import { getCurrentScope } from '@sentry/core';
import type { NodeOptions } from '@sentry/node';
import { init as initNodeSdk } from '@sentry/node';

Expand All @@ -13,7 +13,5 @@ export function init(options: NodeOptions): void {

initNodeSdk(options);

configureScope(scope => {
scope.setTag('runtime', 'node');
});
getCurrentScope().setTag('runtime', 'node');
}
4 changes: 2 additions & 2 deletions packages/astro/test/server/middleware.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ describe('sentryMiddleware', () => {
it('attaches client IP and request headers if options are set', async () => {
const scope = { setUser: vi.fn(), setPropagationContext: vi.fn() };
// @ts-expect-error, only passing a partial Scope object
const configureScopeSpy = vi.spyOn(SentryNode, 'configureScope').mockImplementation(cb => cb(scope));
const getCurrentScopeSpy = vi.spyOn(SentryNode, 'getCurrentScope').mockImplementation(() => scope);

const middleware = handleRequest({ trackClientIp: true, trackHeaders: true });
const ctx = {
Expand All @@ -192,7 +192,7 @@ describe('sentryMiddleware', () => {
// @ts-expect-error, a partial ctx object is fine here
await middleware(ctx, next);

expect(configureScopeSpy).toHaveBeenCalledTimes(1);
expect(getCurrentScopeSpy).toHaveBeenCalledTimes(1);
expect(scope.setUser).toHaveBeenCalledWith({ ip_address: '192.168.0.1' });

expect(startSpanSpy).toHaveBeenCalledWith(
Expand Down
31 changes: 15 additions & 16 deletions packages/browser-integration-tests/suites/replay/dsc/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,19 @@ sentryTest(

const transactionReq = waitForTransactionRequest(page);

// Wait for this to be available
await page.waitForFunction('!!window.Replay');

await page.evaluate(() => {
(window as unknown as TestWindow).Replay.start();
});

await waitForReplayRunning(page);

await page.evaluate(() => {
(window as unknown as TestWindow).Sentry.configureScope(scope => {
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});
const scope = (window as unknown as TestWindow).Sentry.getCurrentScope();
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});

const req0 = await transactionReq;
Expand Down Expand Up @@ -74,10 +76,9 @@ sentryTest(
await waitForReplayRunning(page);

await page.evaluate(() => {
(window as unknown as TestWindow).Sentry.configureScope(scope => {
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});
const scope = (window as unknown as TestWindow).Sentry.getCurrentScope();
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});

const req0 = await transactionReq;
Expand Down Expand Up @@ -132,10 +133,9 @@ sentryTest(
});

await page.evaluate(() => {
(window as unknown as TestWindow).Sentry.configureScope(scope => {
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});
const scope = (window as unknown as TestWindow).Sentry.getCurrentScope();
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});

const req0 = await transactionReq;
Expand Down Expand Up @@ -181,10 +181,9 @@ sentryTest(
const transactionReq = waitForTransactionRequest(page);

await page.evaluate(async () => {
(window as unknown as TestWindow).Sentry.configureScope(scope => {
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});
const scope = (window as unknown as TestWindow).Sentry.getCurrentScope();
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});

const req0 = await transactionReq;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ Sentry.init({
debug: true,
});

Sentry.configureScope(scope => {
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
scope.getTransaction().setMetadata({ source: 'custom' });
});
const scope = Sentry.getCurrentScope();
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
scope.getTransaction().setMetadata({ source: 'custom' });
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ Sentry.init({
debug: true,
});

Sentry.configureScope(scope => {
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
});
const scope = Sentry.getCurrentScope();
scope.setUser({ id: 'user123', segment: 'segmentB' });
scope.setTransactionName('testTransactionDSC');
22 changes: 6 additions & 16 deletions packages/browser/test/unit/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ import {
captureEvent,
captureException,
captureMessage,
configureScope,
flush,
getClient,
getCurrentHub,
getCurrentScope,
init,
showReportDialog,
wrap,
Expand Down Expand Up @@ -58,27 +58,21 @@ describe('SentryBrowser', () => {

describe('getContext() / setContext()', () => {
it('should store/load extra', () => {
configureScope((scope: Scope) => {
scope.setExtra('abc', { def: [1] });
});
getCurrentScope().setExtra('abc', { def: [1] });
expect(global.__SENTRY__.hub._stack[1].scope._extra).toEqual({
abc: { def: [1] },
});
});

it('should store/load tags', () => {
configureScope((scope: Scope) => {
scope.setTag('abc', 'def');
});
getCurrentScope().setTag('abc', 'def');
expect(global.__SENTRY__.hub._stack[1].scope._tags).toEqual({
abc: 'def',
});
});

it('should store/load user', () => {
configureScope((scope: Scope) => {
scope.setUser({ id: 'def' });
});
getCurrentScope().setUser({ id: 'def' });
expect(global.__SENTRY__.hub._stack[1].scope._user).toEqual({
id: 'def',
});
Expand All @@ -95,9 +89,7 @@ describe('SentryBrowser', () => {
const options = getDefaultBrowserClientOptions({ dsn });
const client = new BrowserClient(options);
it('uses the user on the scope', () => {
configureScope(scope => {
scope.setUser(EX_USER);
});
getCurrentScope().setUser(EX_USER);
getCurrentHub().bindClient(client);

showReportDialog();
Expand All @@ -110,9 +102,7 @@ describe('SentryBrowser', () => {
});

it('prioritizes options user over scope user', () => {
configureScope(scope => {
scope.setUser(EX_USER);
});
getCurrentScope().setUser(EX_USER);
getCurrentHub().bindClient(client);

const DIALOG_OPTION_USER = { email: 'option@example.com' };
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/tracing/idletransaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export class IdleTransaction extends Transaction {
// We set the transaction here on the scope so error events pick up the trace
// context and attach it to the error.
DEBUG_BUILD && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanId}`);
_idleHub.configureScope(scope => scope.setSpan(this));
_idleHub.getScope().setSpan(this);
}

this._restartIdleTimeout();
Expand Down
4 changes: 2 additions & 2 deletions packages/core/test/lib/hint.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { captureEvent, configureScope } from '@sentry/core';
import { captureEvent, getCurrentScope } from '@sentry/core';
import { GLOBAL_OBJ } from '@sentry/utils';

import { initAndBind } from '../../src/sdk';
Expand Down Expand Up @@ -109,7 +109,7 @@ describe('Hint', () => {
const options = getDefaultTestClientOptions({ dsn: PUBLIC_DSN });
initAndBind(TestClient, options);

configureScope(scope => scope.addAttachment({ filename: 'scope.file', data: 'great content!' }));
getCurrentScope().addAttachment({ filename: 'scope.file', data: 'great content!' });

captureEvent({}, { attachments: [{ filename: 'some-file.txt', data: 'Hello' }] });

Expand Down
6 changes: 3 additions & 3 deletions packages/core/test/lib/tracing/errors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ describe('registerErrorHandlers()', () => {
});

afterEach(() => {
hub.configureScope(scope => scope.setSpan(undefined));
hub.getScope().setSpan(undefined);
});

it('registers error instrumentation', () => {
Expand All @@ -67,7 +67,7 @@ describe('registerErrorHandlers()', () => {
it('sets status for transaction on scope on error', () => {
registerErrorInstrumentation();
const transaction = hub.startTransaction({ name: 'test' });
hub.configureScope(scope => scope.setSpan(transaction));
hub.getScope().setSpan(transaction);

mockErrorCallback({} as HandlerDataError);
expect(transaction.status).toBe('internal_error');
Expand All @@ -78,7 +78,7 @@ describe('registerErrorHandlers()', () => {
it('sets status for transaction on scope on unhandledrejection', () => {
registerErrorInstrumentation();
const transaction = hub.startTransaction({ name: 'test' });
hub.configureScope(scope => scope.setSpan(transaction));
hub.getScope().setSpan(transaction);

mockUnhandledRejectionCallback({});
expect(transaction.status).toBe('internal_error');
Expand Down
6 changes: 2 additions & 4 deletions packages/core/test/mocks/integration.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Event, EventProcessor, Integration } from '@sentry/types';

import { configureScope, getCurrentHub } from '../../src';
import { getCurrentHub, getCurrentScope } from '../../src';

export class TestIntegration implements Integration {
public static id: string = 'TestIntegration';
Expand All @@ -18,9 +18,7 @@ export class TestIntegration implements Integration {

eventProcessor.id = this.name;

configureScope(scope => {
scope.addEventProcessor(eventProcessor);
});
getCurrentScope().addEventProcessor(eventProcessor);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { NextApiRequest, NextApiResponse } from 'next';

export default function handler(req: NextApiRequest, res: NextApiResponse) {
const transaction = Sentry.startTransaction({ name: 'test-transaction', op: 'e2e-test' });
Sentry.getCurrentHub().configureScope(scope => scope.setSpan(transaction));
Sentry.getCurrentHub().getScope().setSpan(transaction);

const span = transaction.startChild();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ app.get('/test-param/:param', function (req, res) {

app.get('/test-transaction', async function (req, res) {
const transaction = Sentry.startTransaction({ name: 'test-transaction', op: 'e2e-test' });
Sentry.getCurrentHub().configureScope(scope => scope.setSpan(transaction));
Sentry.getCurrentHub().getScope().setSpan(transaction);

const span = transaction.startChild();

Expand Down
21 changes: 10 additions & 11 deletions packages/nextjs/src/client/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import type { BrowserOptions } from '@sentry/react';
import {
BrowserTracing,
Integrations,
configureScope,
defaultRequestInstrumentationOptions,
getCurrentScope,
init as reactInit,
} from '@sentry/react';
import type { EventProcessor } from '@sentry/types';
Expand Down Expand Up @@ -56,17 +56,16 @@ export function init(options: BrowserOptions): void {

reactInit(opts);

configureScope(scope => {
scope.setTag('runtime', 'browser');
const filterTransactions: EventProcessor = event =>
event.type === 'transaction' && event.transaction === '/404' ? null : event;
filterTransactions.id = 'NextClient404Filter';
scope.addEventProcessor(filterTransactions);
const scope = getCurrentScope();
scope.setTag('runtime', 'browser');
const filterTransactions: EventProcessor = event =>
event.type === 'transaction' && event.transaction === '/404' ? null : event;
filterTransactions.id = 'NextClient404Filter';
scope.addEventProcessor(filterTransactions);

if (process.env.NODE_ENV === 'development') {
scope.addEventProcessor(devErrorSymbolicationEventProcessor);
}
});
if (process.env.NODE_ENV === 'development') {
scope.addEventProcessor(devErrorSymbolicationEventProcessor);
}
}

function addClientIntegrations(options: BrowserOptions): void {
Expand Down

0 comments on commit 1e8d2b3

Please sign in to comment.