Skip to content

Commit 54b7cc3

Browse files
authored
feat(profiling-onboarding): Node instructions (#88874)
<img width="721" alt="Screenshot 2025-04-07 at 08 48 36" src="https://github.com/user-attachments/assets/797b1f56-9588-4d5e-b1c6-a88e4b7ababd" /> - closes TET-249
1 parent 69daf78 commit 54b7cc3

File tree

12 files changed

+151
-20
lines changed

12 files changed

+151
-20
lines changed

static/app/data/platformCategories.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ export const profiling: PlatformKey[] = [
314314
'javascript-tanstackstart-react',
315315
'javascript-vue',
316316
'node',
317+
'node-awslambda',
317318
'node-azurefunctions',
318319
'node-connect',
319320
'node-express',

static/app/gettingStartedDocs/node/awslambda.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ import {
1212
} from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding';
1313
import {t, tct} from 'sentry/locale';
1414
import {trackAnalytics} from 'sentry/utils/analytics';
15-
import {getInstallConfig, getSdkInitSnippet} from 'sentry/utils/gettingStartedDocs/node';
15+
import {
16+
getInstallConfig,
17+
getNodeProfilingOnboarding,
18+
getSdkInitSnippet,
19+
} from 'sentry/utils/gettingStartedDocs/node';
1620
import {
1721
InstallationMode,
1822
platformOptions,
@@ -117,6 +121,9 @@ const crashReportOnboarding: OnboardingConfig<PlatformOptions> = {
117121
const docs: Docs<PlatformOptions> = {
118122
onboarding,
119123
crashReportOnboarding,
124+
profilingOnboarding: getNodeProfilingOnboarding({
125+
basePackage: '@sentry/aws-serverless',
126+
}),
120127
platformOptions,
121128
};
122129

static/app/gettingStartedDocs/node/azurefunctions.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ import {
1111
getCrashReportModalIntroduction,
1212
} from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding';
1313
import {t, tct} from 'sentry/locale';
14-
import {getInstallConfig, getSdkInitSnippet} from 'sentry/utils/gettingStartedDocs/node';
14+
import {
15+
getInstallConfig,
16+
getNodeProfilingOnboarding,
17+
getSdkInitSnippet,
18+
} from 'sentry/utils/gettingStartedDocs/node';
1519

1620
type Params = DocsParams;
1721

@@ -96,6 +100,7 @@ const crashReportOnboarding: OnboardingConfig = {
96100
const docs: Docs = {
97101
onboarding,
98102
crashReportOnboarding,
103+
profilingOnboarding: getNodeProfilingOnboarding(),
99104
};
100105

101106
export default docs;

static/app/gettingStartedDocs/node/connect.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {t, tct} from 'sentry/locale';
1515
import {
1616
getImportInstrumentSnippet,
1717
getInstallConfig,
18+
getNodeProfilingOnboarding,
1819
getSdkInitSnippet,
1920
getSentryImportSnippet,
2021
} from 'sentry/utils/gettingStartedDocs/node';
@@ -137,8 +138,8 @@ const crashReportOnboarding: OnboardingConfig = {
137138

138139
const docs: Docs = {
139140
onboarding,
140-
141141
crashReportOnboarding,
142+
profilingOnboarding: getNodeProfilingOnboarding(),
142143
};
143144

144145
export default docs;

static/app/gettingStartedDocs/node/express.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {t, tct} from 'sentry/locale';
1919
import {
2020
getImportInstrumentSnippet,
2121
getInstallConfig,
22+
getNodeProfilingOnboarding,
2223
getSdkInitSnippet,
2324
getSentryImportSnippet,
2425
} from 'sentry/utils/gettingStartedDocs/node';
@@ -158,6 +159,7 @@ const docs: Docs = {
158159
replayOnboardingJsLoader,
159160
crashReportOnboarding,
160161
feedbackOnboardingJsLoader,
162+
profilingOnboarding: getNodeProfilingOnboarding(),
161163
};
162164

163165
export default docs;

static/app/gettingStartedDocs/node/fastify.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {t, tct} from 'sentry/locale';
1919
import {
2020
getImportInstrumentSnippet,
2121
getInstallConfig,
22+
getNodeProfilingOnboarding,
2223
getSdkInitSnippet,
2324
getSentryImportSnippet,
2425
} from 'sentry/utils/gettingStartedDocs/node';
@@ -144,6 +145,7 @@ const docs: Docs = {
144145
replayOnboardingJsLoader,
145146
crashReportOnboarding,
146147
feedbackOnboardingJsLoader,
148+
profilingOnboarding: getNodeProfilingOnboarding(),
147149
};
148150

149151
export default docs;

static/app/gettingStartedDocs/node/gcpfunctions.tsx

+8-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ import {
1111
getCrashReportModalIntroduction,
1212
} from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding';
1313
import {t, tct} from 'sentry/locale';
14-
import {getInstallConfig, getSdkInitSnippet} from 'sentry/utils/gettingStartedDocs/node';
14+
import {
15+
getInstallConfig,
16+
getNodeProfilingOnboarding,
17+
getSdkInitSnippet,
18+
} from 'sentry/utils/gettingStartedDocs/node';
1519

1620
type Params = DocsParams;
1721

@@ -122,6 +126,9 @@ const crashReportOnboarding: OnboardingConfig = {
122126
const docs: Docs = {
123127
onboarding,
124128
crashReportOnboarding,
129+
profilingOnboarding: getNodeProfilingOnboarding({
130+
basePackage: '@sentry/google-cloud-serverless',
131+
}),
125132
};
126133

127134
export default docs;

static/app/gettingStartedDocs/node/hapi.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {t, tct} from 'sentry/locale';
1717
import {
1818
getImportInstrumentSnippet,
1919
getInstallConfig,
20+
getNodeProfilingOnboarding,
2021
getSdkInitSnippet,
2122
getSentryImportSnippet,
2223
} from 'sentry/utils/gettingStartedDocs/node';
@@ -184,6 +185,7 @@ const docs: Docs = {
184185
onboarding,
185186
feedbackOnboardingCrashApi: feedbackOnboardingNode,
186187
crashReportOnboarding,
188+
profilingOnboarding: getNodeProfilingOnboarding(),
187189
};
188190

189191
export default docs;

static/app/gettingStartedDocs/node/koa.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {t, tct} from 'sentry/locale';
1717
import {
1818
getImportInstrumentSnippet,
1919
getInstallConfig,
20+
getNodeProfilingOnboarding,
2021
getSdkInitSnippet,
2122
getSentryImportSnippet,
2223
} from 'sentry/utils/gettingStartedDocs/node';
@@ -176,8 +177,8 @@ const crashReportOnboarding: OnboardingConfig = {
176177
const docs: Docs = {
177178
onboarding,
178179
feedbackOnboardingCrashApi: feedbackOnboardingNode,
179-
180180
crashReportOnboarding,
181+
profilingOnboarding: getNodeProfilingOnboarding(),
181182
};
182183

183184
export default docs;

static/app/gettingStartedDocs/node/nestjs.tsx

+4-7
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {t, tct} from 'sentry/locale';
1717
import {
1818
getImportInstrumentSnippet,
1919
getInstallConfig,
20+
getNodeProfilingOnboarding,
2021
getSdkInitSnippet,
2122
} from 'sentry/utils/gettingStartedDocs/node';
2223

@@ -276,17 +277,13 @@ const crashReportOnboarding: OnboardingConfig = {
276277
nextSteps: () => [],
277278
};
278279

279-
const profilingOnboarding: OnboardingConfig = {
280-
...onboarding,
281-
introduction: () => null,
282-
};
283-
284280
const docs: Docs = {
285281
onboarding,
286282
feedbackOnboardingCrashApi: feedbackOnboardingNode,
287-
288283
crashReportOnboarding,
289-
profilingOnboarding,
284+
profilingOnboarding: getNodeProfilingOnboarding({
285+
basePackage: '@sentry/nestjs',
286+
}),
290287
};
291288

292289
export default docs;

static/app/gettingStartedDocs/node/node.tsx

+2-7
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {t, tct} from 'sentry/locale';
1919
import {
2020
getImportInstrumentSnippet,
2121
getInstallConfig,
22+
getNodeProfilingOnboarding,
2223
getSdkInitSnippet,
2324
} from 'sentry/utils/gettingStartedDocs/node';
2425

@@ -242,19 +243,13 @@ Sentry.init({
242243
nextSteps: () => [],
243244
};
244245

245-
const profilingOnboarding: OnboardingConfig = {
246-
...onboarding,
247-
introduction: () => null,
248-
};
249-
250246
const docs: Docs = {
251247
onboarding,
252248
replayOnboardingJsLoader,
253-
254249
performanceOnboarding,
255250
crashReportOnboarding,
256-
profilingOnboarding,
257251
feedbackOnboardingJsLoader,
252+
profilingOnboarding: getNodeProfilingOnboarding(),
258253
};
259254

260255
export default docs;

static/app/utils/gettingStartedDocs/node.ts renamed to static/app/utils/gettingStartedDocs/node.tsx

+112-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import type {DocsParams} from 'sentry/components/onboarding/gettingStartedDoc/types';
1+
import ExternalLink from 'sentry/components/links/externalLink';
2+
import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
3+
import type {
4+
DocsParams,
5+
OnboardingConfig,
6+
} from 'sentry/components/onboarding/gettingStartedDoc/types';
7+
import {t, tct} from 'sentry/locale';
28

39
export function getInstallSnippet({
410
params,
@@ -205,3 +211,108 @@ Sentry.startSpan({
205211
});`
206212
: ''
207213
}`;
214+
215+
export const getNodeProfilingOnboarding = ({
216+
basePackage = '@sentry/node',
217+
}: {
218+
basePackage?: string;
219+
} = {}): OnboardingConfig => ({
220+
install: params => [
221+
{
222+
type: StepType.INSTALL,
223+
description: tct(
224+
'To enable profiling, add [code:@sentry/profiling-node] to your imports.',
225+
{
226+
code: <code />,
227+
}
228+
),
229+
configurations: getInstallConfig(params, {
230+
basePackage,
231+
}),
232+
},
233+
],
234+
configure: params => [
235+
{
236+
type: StepType.CONFIGURE,
237+
description: tct(
238+
'Set up the [code:nodeProfilingIntegration] in your [code:Sentry.init()] call.',
239+
{
240+
code: <code />,
241+
}
242+
),
243+
configurations: [
244+
{
245+
language: 'javascript',
246+
code: [
247+
{
248+
label: 'Javascript',
249+
value: 'javascript',
250+
language: 'javascript',
251+
code: `
252+
Sentry.init({
253+
dsn: "${params.dsn.public}",
254+
integrations: [
255+
nodeProfilingIntegration(),
256+
],
257+
// Tracing must be enabled for profiling to work
258+
tracesSampleRate: 1.0, // Capture 100% of the transactions${
259+
params.profilingOptions?.defaultProfilingMode === 'continuous'
260+
? `
261+
// Set sampling rate for profiling - this is evaluated only once per SDK.init call
262+
profileSessionSampleRate: 1.0,
263+
// Trace lifecycle automatically enables profiling during active traces
264+
profileLifecycle: 'trace',`
265+
: `
266+
// Set sampling rate for profiling - this is evaluated only once per SDK.init call
267+
profilesSampleRate: 1.0,`
268+
}
269+
});${
270+
params.profilingOptions?.defaultProfilingMode === 'continuous'
271+
? `
272+
273+
// Profiling happens automatically after setting it up with \`Sentry.init()\`.
274+
// All spans (unless those discarded by sampling) will have profiling data attached to them.
275+
Sentry.startSpan({
276+
name: "My Span",
277+
}, () => {
278+
// The code executed here will be profiled
279+
});`
280+
: ''
281+
}`,
282+
},
283+
],
284+
additionalInfo: tct(
285+
'If you need more fine grained control over which spans are profiled, you can do so by [link:enabling manual lifecycle profiling].',
286+
{
287+
link: (
288+
<ExternalLink
289+
href={`https://docs.sentry.io/platforms/javascript/guides/node/profiling/node-profiling/#enabling-manual-lifecycle-profiling`}
290+
/>
291+
),
292+
}
293+
),
294+
},
295+
{
296+
description: tct(
297+
'For more detailed information on profiling, see the [link:profiling documentation].',
298+
{
299+
link: (
300+
<ExternalLink
301+
href={`https://docs.sentry.io/platforms/javascript/guides/node/profiling/node-profiling/`}
302+
/>
303+
),
304+
}
305+
),
306+
},
307+
],
308+
},
309+
],
310+
verify: () => [
311+
{
312+
type: StepType.VERIFY,
313+
description: t(
314+
'Verify that profiling is working correctly by simply using your application.'
315+
),
316+
},
317+
],
318+
});

0 commit comments

Comments
 (0)