Skip to content

Commit

Permalink
ref(tracing): support browser.request span for reparenting (#77176)
Browse files Browse the repository at this point in the history
Add reparenting support for the incoming renaming change in
getsentry/sentry-javascript#13527
  • Loading branch information
JonasBa authored and c298lee committed Sep 10, 2024
1 parent 9fad5e4 commit f75669d
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2857,47 +2857,50 @@ describe('TraceTree', () => {
expect(serverHandlerTransaction.parent).toBe(pageloadTransaction);
});
describe('expanded', () => {
it('server handler transaction becomes a child of browser request span if present', async () => {
const tree: TraceTree = TraceTree.FromTrace(
makeTrace({
transactions: [
makeTransaction({
transaction: 'SSR',
event_id: 'ssr',
project_slug: 'js',
['transaction.op']: 'http.server',
children: [
makeTransaction({
transaction: 'pageload',
['transaction.op']: 'pageload',
}),
],
}),
],
}),
null,
null
);
it.each([['browser'], ['browser.request']])(
'server handler transaction becomes a child of %s span if present',
async span_op => {
const tree: TraceTree = TraceTree.FromTrace(
makeTrace({
transactions: [
makeTransaction({
transaction: 'SSR',
event_id: 'ssr',
project_slug: 'js',
['transaction.op']: 'http.server',
children: [
makeTransaction({
transaction: 'pageload',
['transaction.op']: 'pageload',
}),
],
}),
],
}),
null,
null
);

MockApiClient.addMockResponse({
url: '/organizations/org-slug/events/js:ssr/?averageColumn=span.self_time&averageColumn=span.duration',
method: 'GET',
body: makeEvent({}, [makeSpan({description: 'request', op: 'browser'})]),
});
MockApiClient.addMockResponse({
url: '/organizations/org-slug/events/js:ssr/?averageColumn=span.self_time&averageColumn=span.duration',
method: 'GET',
body: makeEvent({}, [makeSpan({description: 'request', op: span_op})]),
});

tree.zoomIn(tree.list[1], true, {
api: new MockApiClient(),
organization: OrganizationFixture(),
});
tree.zoomIn(tree.list[1], true, {
api: new MockApiClient(),
organization: OrganizationFixture(),
});

await waitFor(() => tree.list.length === 4);
const browserRequestSpan = tree.list[1].children[0];
const ssrTransaction = browserRequestSpan.children[0];
await waitFor(() => tree.list.length === 4);
const browserRequestSpan = tree.list[1].children[0];
const ssrTransaction = browserRequestSpan.children[0];

assertSpanNode(browserRequestSpan);
assertTransactionNode(ssrTransaction);
expect(ssrTransaction.value.transaction).toBe('SSR');
});
assertSpanNode(browserRequestSpan);
assertTransactionNode(ssrTransaction);
expect(ssrTransaction.value.transaction).toBe('SSR');
}
);
it('server handler transaction becomes a direct child if there is no matching browser request span', async () => {
const tree: TraceTree = TraceTree.FromTrace(
makeTrace({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,11 @@ function isServerRequestHandlerTransactionNode(
}

function isBrowserRequestSpan(value: TraceTree.Span): boolean {
return value.op === 'browser' && value.description === 'request';
return (
// Adjust for SDK changes in https://github.com/getsentry/sentry-javascript/pull/13527
value.op === 'browser.request' ||
(value.op === 'browser' && value.description === 'request')
);
}

function getPageloadTransactionChildCount(
Expand Down

0 comments on commit f75669d

Please sign in to comment.