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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down
, '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
3 changes: 3 additions & 0 deletions packages/browser/src/exports.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,6 +37,9 @@ export {
makeMain,
Scope,
startTransaction,
getActiveSpan,
startSpan,
startInactiveSpan,
SDK_VERSION,
setContext,
setExtra,
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/tracing/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ export { extractTraceparentData, getActiveTransaction } from './utils';
// eslint-disable-next-line deprecation/deprecation
export { SpanStatus } from './spanstatus';
export type { SpanStatusType } from './span';
export { trace, getActiveSpan, startActiveSpan, startSpan } from './trace';
// eslint-disable-next-line deprecation/deprecation
export { trace, getActiveSpan, startSpan, startInactiveSpan, startActiveSpan } from './trace';
export { getDynamicSamplingContextFromClient } from './dynamicSamplingContext';
export { setMeasurement } from './measurement';
21 changes: 13 additions & 8 deletions packages/core/src/tracing/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,14 +34,14 @@ export function trace<T>(

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -82,13 +82,13 @@ export function trace<T>(
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const ctx = { ...context };
// If a name is set and a description is not, set the description to the name.
if (ctx.name !== undefined && ctx.description === undefined) {
Expand All@@ -100,14 +100,14 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:

const parentSpan = scope.getSpan();

function startActiveSpan(): Span | undefined {
function createChildSpanOrTransaction(): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
return parentSpan ? parentSpan.startChild(ctx) : hub.startTransaction(ctx);
}

const activeSpan = startActiveSpan();
const activeSpan = createChildSpanOrTransaction();
scope.setSpan(activeSpan);

function finishAndSetSpan(): void {
Expand DownExpand Up@@ -141,17 +141,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
return maybePromiseResult;
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
if (!hasTracingEnabled()) {
return undefined;
}
Expand Down
22 changes: 11 additions & 11 deletions packages/core/test/lib/tracing/trace.test.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import { addTracingExtensions, Hub, makeMain } from '../../../src';
import { startActiveSpan } from '../../../src/tracing';
import { startSpan } from '../../../src/tracing';
import { getDefaultTestClientOptions, TestClient } from '../../mocks/client';

beforeAll(() => {
Expand All@@ -14,7 +14,7 @@ const enum Type {
let hub: Hub;
let client: TestClient;

describe('startActiveSpan', () => {
describe('startSpan', () => {
beforeEach(() => {
const options = getDefaultTestClientOptions({ tracesSampleRate: 0.0 });
client = new TestClient(options);
Expand All@@ -38,7 +38,7 @@ describe('startActiveSpan', () => {
])('with %s callback and error %s', (_type, isError, callback, expected) => {
it('should return the same value as the callback', async () => {
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -53,7 +53,7 @@ describe('startActiveSpan', () => {
// if tracingExtensions are not enabled
jest.spyOn(hub, 'startTransaction').mockReturnValue(undefined);
try {
const result = await startActiveSpan({ name: 'GET users/[id]' }, () => {
const result = await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
expect(result).toEqual(expected);
Expand All@@ -68,7 +68,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, () => {
await startSpan({ name: 'GET users/[id]' }, () => {
return callback();
});
} catch (e) {
Expand All@@ -86,7 +86,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan(
await startSpan(
{
name: 'GET users/[id]',
parentSampled: true,
Expand All@@ -113,7 +113,7 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]' }, span => {
await startSpan({ name: 'GET users/[id]' }, span => {
if (span) {
span.op = 'http.server';
}
Expand All@@ -132,8 +132,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, () => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, () => {
return callback();
});
});
Expand All@@ -153,8 +153,8 @@ describe('startActiveSpan', () => {
ref = transaction;
});
try {
await startActiveSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startActiveSpan({ name: 'SELECT * from users' }, childSpan => {
await startSpan({ name: 'GET users/[id]', parentSampled: true }, () => {
return startSpan({ name: 'SELECT * from users' }, childSpan => {
if (childSpan) {
childSpan.op = 'db.query';
}
Expand Down
13 changes: 9 additions & 4 deletions packages/node-experimental/src/sdk/trace.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,13 +12,13 @@ import type { NodeExperimentalClient } from './client';
* The created span is the active span and will be used as parent by other spans created inside the function
* and can be accessed via `Sentry.getSpan()`, as long as the function is executed while the scope is active.
*
* If you want to create a span that is not set as active, use {@link startSpan}.
* If you want to create a span that is not set as active, use {@link startInactiveSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startActiveSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
export function startSpan<T>(context: TransactionContext, callback: (span: Span | undefined) => T): T {
const tracer = getTracer();
if (!tracer) {
return callback(undefined);
Expand DownExpand Up@@ -66,17 +66,22 @@ export function startActiveSpan<T>(context: TransactionContext, callback: (span:
});
}

/**
* @deprecated Use {@link startSpan} instead.
*/
export const startActiveSpan = startSpan;

/**
* Creates a span. This span is not set as active, so will not get automatic instrumentation spans
* as children or be able to be accessed via `Sentry.getSpan()`.
*
* If you want to create a span that is set as active, use {@link startActiveSpan}.
* If you want to create a span that is set as active, use {@link startSpan}.
*
* Note that if you have not enabled tracing extensions via `addTracingExtensions`
* or you didn't set `tracesSampleRate` or `tracesSampler`, this function will not generate spans
* and the `span` returned from the callback will be undefined.
*/
export function startSpan(context: TransactionContext): Span | undefined {
export function startInactiveSpan(context: TransactionContext): Span | undefined {
const tracer = getTracer();
if (!tracer) {
return undefined;
Expand Down
26 changes: 13 additions & 13 deletions packages/node-experimental/test/sdk/trace.test.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,21 +8,21 @@ describe('trace', () => {
mockSdkInit({ enableTracing: true });
});

describe('startActiveSpan', () => {
describe('startSpan', () => {
it('works with a sync callback', () => {
const spans: Span[] = [];

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand All@@ -49,7 +49,7 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

await Sentry.startActiveSpan({ name: 'outer' }, async outerSpan => {
await Sentry.startSpan({ name: 'outer' }, async outerSpan => {
expect(outerSpan).toBeDefined();
spans.push(outerSpan!);

Expand All@@ -59,7 +59,7 @@ describe('trace', () => {
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

await Sentry.startActiveSpan({ name: 'inner' }, async innerSpan => {
await Sentry.startSpan({ name: 'inner' }, async innerSpan => {
expect(innerSpan).toBeDefined();
spans.push(innerSpan!);

Expand DownExpand Up@@ -89,15 +89,15 @@ describe('trace', () => {

expect(Sentry.getActiveSpan()).toEqual(undefined);

Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans1.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner' }, innerSpan => {
Sentry.startSpan({ name: 'inner' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans1.push(innerSpan!);

Expand All@@ -108,15 +108,15 @@ describe('trace', () => {
});
});

Sentry.startActiveSpan({ name: 'outer2' }, outerSpan => {
Sentry.startSpan({ name: 'outer2' }, outerSpan => {
expect(outerSpan).toBeDefined();
spans2.push(outerSpan!);

expect(outerSpan?.name).toEqual('outer2');
expect(outerSpan).toBeInstanceOf(Transaction);
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

Sentry.startActiveSpan({ name: 'inner2' }, innerSpan => {
Sentry.startSpan({ name: 'inner2' }, innerSpan => {
expect(innerSpan).toBeDefined();
spans2.push(innerSpan!);

Expand All@@ -133,9 +133,9 @@ describe('trace', () => {
});
});

describe('startSpan', () => {
describe('startInactiveSpan', () => {
it('works at the root', () => {
const span = Sentry.startSpan({ name: 'test' });
const span = Sentry.startInactiveSpan({ name: 'test' });

expect(span).toBeDefined();
expect(span).toBeInstanceOf(Transaction);
Expand All@@ -150,11 +150,11 @@ describe('trace', () => {
});

it('works as a child span', () => {
Sentry.startActiveSpan({ name: 'outer' }, outerSpan => {
Sentry.startSpan({ name: 'outer' }, outerSpan => {
expect(outerSpan).toBeDefined();
expect(Sentry.getActiveSpan()).toEqual(outerSpan);

const innerSpan = Sentry.startSpan({ name: 'test' });
const innerSpan = Sentry.startInactiveSpan({ name: 'test' });

expect(innerSpan).toBeDefined();
expect(innerSpan).toBeInstanceOf(Span);
Expand Down
4 changes: 3 additions & 1 deletion packages/node/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,8 +56,10 @@ export {
captureCheckIn,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/core';
export type { SpanStatusType } from '@sentry/core';
export { autoDiscoverNodePerformanceMonitoringIntegrations } from './tracing';
Expand Down
4 changes: 3 additions & 1 deletion packages/serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,8 @@ export {
Integrations,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';
4 changes: 3 additions & 1 deletion packages/sveltekit/src/server/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,8 +46,10 @@ export {
Handlers,
setMeasurement,
getActiveSpan,
startActiveSpan,
startSpan,
// eslint-disable-next-line deprecation/deprecation
startActiveSpan,
startInactiveSpan,
} from '@sentry/node';

// We can still leave this for the carrier init and type exports
Expand Down