From f3ad0c7531a7637d5f511d50745aa3144bfc1bd3 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Tue, 20 Jan 2026 09:21:05 +0100 Subject: [PATCH 01/11] feat(onboarding): Metrics page for .NET platforms --- .../dotnet-aspnet/index.tsx | 2 + .../dotnet-aspnetcore/index.tsx | 2 + .../dotnet-awslambda/index.tsx | 2 + .../dotnet-gcpfunctions/index.tsx | 2 + .../gettingStartedDocs/dotnet-maui/index.tsx | 2 + .../dotnet-winforms/index.tsx | 2 + .../gettingStartedDocs/dotnet-wpf/index.tsx | 2 + .../dotnet-xamarin/index.tsx | 2 + .../app/gettingStartedDocs/dotnet/index.tsx | 2 + .../dotnet/metrics.spec.tsx | 34 +++++ .../app/gettingStartedDocs/dotnet/metrics.tsx | 126 ++++++++++++++++++ 11 files changed, 178 insertions(+) create mode 100644 static/app/gettingStartedDocs/dotnet/metrics.spec.tsx create mode 100644 static/app/gettingStartedDocs/dotnet/metrics.tsx diff --git a/static/app/gettingStartedDocs/dotnet-aspnet/index.tsx b/static/app/gettingStartedDocs/dotnet-aspnet/index.tsx index 3b848c23678231..af1d460332341e 100644 --- a/static/app/gettingStartedDocs/dotnet-aspnet/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-aspnet/index.tsx @@ -1,5 +1,6 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import { feedbackOnboardingJsLoader, replayOnboardingJsLoader, @@ -14,6 +15,7 @@ const docs: Docs = { crashReportOnboarding: crashReport, feedbackOnboardingJsLoader, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-aspnetcore/index.tsx b/static/app/gettingStartedDocs/dotnet-aspnetcore/index.tsx index 3b848c23678231..af1d460332341e 100644 --- a/static/app/gettingStartedDocs/dotnet-aspnetcore/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-aspnetcore/index.tsx @@ -1,5 +1,6 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import { feedbackOnboardingJsLoader, replayOnboardingJsLoader, @@ -14,6 +15,7 @@ const docs: Docs = { crashReportOnboarding: crashReport, feedbackOnboardingJsLoader, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-awslambda/index.tsx b/static/app/gettingStartedDocs/dotnet-awslambda/index.tsx index 6a0b097c967057..5ec76853b92124 100644 --- a/static/app/gettingStartedDocs/dotnet-awslambda/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-awslambda/index.tsx @@ -1,6 +1,7 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -10,6 +11,7 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-gcpfunctions/index.tsx b/static/app/gettingStartedDocs/dotnet-gcpfunctions/index.tsx index 6a0b097c967057..5ec76853b92124 100644 --- a/static/app/gettingStartedDocs/dotnet-gcpfunctions/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-gcpfunctions/index.tsx @@ -1,6 +1,7 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -10,6 +11,7 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-maui/index.tsx b/static/app/gettingStartedDocs/dotnet-maui/index.tsx index 6a0b097c967057..5ec76853b92124 100644 --- a/static/app/gettingStartedDocs/dotnet-maui/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-maui/index.tsx @@ -1,6 +1,7 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -10,6 +11,7 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-winforms/index.tsx b/static/app/gettingStartedDocs/dotnet-winforms/index.tsx index 6a0b097c967057..5ec76853b92124 100644 --- a/static/app/gettingStartedDocs/dotnet-winforms/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-winforms/index.tsx @@ -1,6 +1,7 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -10,6 +11,7 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-wpf/index.tsx b/static/app/gettingStartedDocs/dotnet-wpf/index.tsx index 6a0b097c967057..5ec76853b92124 100644 --- a/static/app/gettingStartedDocs/dotnet-wpf/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-wpf/index.tsx @@ -1,6 +1,7 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -10,6 +11,7 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx b/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx index 6a0b097c967057..5ec76853b92124 100644 --- a/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx @@ -1,6 +1,7 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -10,6 +11,7 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet/index.tsx b/static/app/gettingStartedDocs/dotnet/index.tsx index 875387288701fb..6f432fdb20189a 100644 --- a/static/app/gettingStartedDocs/dotnet/index.tsx +++ b/static/app/gettingStartedDocs/dotnet/index.tsx @@ -1,5 +1,6 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {logs} from 'sentry/gettingStartedDocs/dotnet/logs'; +import {metrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {feedback} from './feedback'; @@ -12,6 +13,7 @@ const docs: Docs = { crashReportOnboarding: crashReport, profilingOnboarding: profiling, logsOnboarding: logs(), + metricsOnboarding: metrics(), }; export default docs; diff --git a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx new file mode 100644 index 00000000000000..6318e8351ef8de --- /dev/null +++ b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx @@ -0,0 +1,34 @@ +// Only import and test functions that don't have circular dependencies +const {metrics} = jest.requireActual('sentry/gettingStartedDocs/dotnet/metrics'); + +describe('metrics', () => { + const mockParams = { + dsn: { + public: 'https://test@example.com/123', + }, + sourcePackageRegistries: { + isLoading: false, + }, + }; + + it('generates metrics onboarding config with default parameters', () => { + const result = metrics(); + + // Test install step + const installSteps = result.install(mockParams); + expect(installSteps).toHaveLength(1); + expect(installSteps[0].type).toBe('install'); + expect(installSteps[0].content).toHaveLength(2); + + // Test verify step + const verifySteps = result.verify(mockParams); + expect(verifySteps).toHaveLength(1); + expect(verifySteps[0].type).toBe('verify'); + expect(verifySteps[0].content).toHaveLength(3); + const codeSnippet = verifySteps[0].content[1].code; + + expect(codeSnippet).toContain('SentrySdk.Init'); + expect(codeSnippet).toContain(mockParams.dsn.public); + expect(codeSnippet).toContain('Metrics.EmitCounter'); + }); +}); diff --git a/static/app/gettingStartedDocs/dotnet/metrics.tsx b/static/app/gettingStartedDocs/dotnet/metrics.tsx new file mode 100644 index 00000000000000..2777cee0e72243 --- /dev/null +++ b/static/app/gettingStartedDocs/dotnet/metrics.tsx @@ -0,0 +1,126 @@ +import {ExternalLink} from 'sentry/components/core/link'; +import { + StepType, + type ContentBlock, + type DocsParams, + type OnboardingConfig, +} from 'sentry/components/onboarding/gettingStartedDoc/types'; +import { + getInstallSnippetCoreCli, + getInstallSnippetPackageManager, +} from 'sentry/gettingStartedDocs/dotnet/utils'; +import {tct} from 'sentry/locale'; + +export const metricsVerify = (params: DocsParams): ContentBlock => ({ + type: 'conditional', + condition: params.isMetricsSelected, + content: [ + { + type: 'text', + text: tct( + 'Send test metrics from your app to verify metrics are arriving in Sentry.', + {code: } + ), + }, + { + type: 'code', + language: 'dotnet', + code: `using Sentry; + +SentrySdk.Experimental.Metrics.EmitCounter("button_click", 5, + [new KeyValuePair("browser", "Firefox"), new KeyValuePair("app_version", "1.0.0")]); +SentrySdk.Experimental.Metrics.EmitDistribution("page_load", 15.0, SentryUnits.Duration.Millisecond, + [new KeyValuePair("page", "/home")]); +SentrySdk.Experimental.Metrics.EmitGauge("page_load", 15.0, SentryUnits.Duration.Millisecond, + [new KeyValuePair("page", "/home")]); +`, + }, + { + type: 'text', + text: tct('For more detailed information, see the [link:metrics documentation].', { + link: ( + + ), + }), + }, + ], +}); + +export const metrics = (): OnboardingConfig => ({ + install: params => [ + { + type: StepType.INSTALL, + content: [ + { + type: 'text', + text: tct( + 'Install our .NET SDK with a minimum version that supports metrics ([code:6.1.0] or higher).', + { + code: , + } + ), + }, + { + type: 'code', + tabs: [ + { + label: 'Package Manager', + language: 'shell', + code: getInstallSnippetPackageManager(params), + }, + { + label: '.NET Core CLI', + language: 'shell', + code: getInstallSnippetCoreCli(params), + }, + ], + }, + ], + }, + ], + configure: () => [], + verify: (params: DocsParams) => [ + { + type: StepType.VERIFY, + content: [ + { + type: 'text', + text: tct( + 'Metrics are automatically enabled in your [code:SentrySdk.Init] configuration. You can emit metrics using the [code:SentrySdk.Experimental.Metrics] API.', + { + code: , + } + ), + }, + { + type: 'code', + language: 'dotnet', + code: `using Sentry; + +SentrySdk.Init(options => +{ + options.Dsn = ${params.dsn.public}; +}); + +SentrySdk.Experimental.Metrics.EmitCounter("button_click", 5, + [new KeyValuePair("browser", "Firefox"), new KeyValuePair("app_version", "1.0.0")]); +SentrySdk.Experimental.Metrics.EmitDistribution("page_load", 15.0, SentryUnits.Duration.Millisecond, + [new KeyValuePair("page", "/home")]); +SentrySdk.Experimental.Metrics.EmitGauge("page_load", 15.0, SentryUnits.Duration.Millisecond, + [new KeyValuePair("page", "/home")]);`, + }, + { + type: 'text', + text: tct( + 'For more detailed information, see the [link:metrics documentation].', + { + link: ( + + ), + } + ), + }, + ], + }, + ], +}); From 7396c1705c6cf0ad9dece4af9d2aedd2905cc69e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Wed, 4 Feb 2026 19:56:44 +0100 Subject: [PATCH 02/11] fix(getting-started): Xamarin does not supported Trace-connected Metrics --- static/app/gettingStartedDocs/dotnet-xamarin/index.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx b/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx index 350daecc7abe1b..c0b0a998cf224b 100644 --- a/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx +++ b/static/app/gettingStartedDocs/dotnet-xamarin/index.tsx @@ -1,7 +1,6 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {feedback} from 'sentry/gettingStartedDocs/dotnet/feedback'; import {dotnetLogs} from 'sentry/gettingStartedDocs/dotnet/logs'; -import {dotnetMetrics} from 'sentry/gettingStartedDocs/dotnet/metrics'; import {crashReport} from './crashReport'; import {onboarding} from './onboarding'; @@ -11,7 +10,6 @@ const docs: Docs = { feedbackOnboardingCrashApi: feedback, crashReportOnboarding: crashReport, logsOnboarding: dotnetLogs(), - metricsOnboarding: dotnetMetrics(), }; export default docs; From 890b102e84535c3a1b60c7a67486ffe602379e8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Wed, 4 Feb 2026 20:40:54 +0100 Subject: [PATCH 03/11] merge --- static/app/gettingStartedDocs/dotnet/metrics.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.tsx b/static/app/gettingStartedDocs/dotnet/metrics.tsx index 09f0f32b5425aa..30d3ed4af528b6 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.tsx @@ -47,7 +47,7 @@ SentrySdk.Experimental.Metrics.EmitGauge("page_load", 15.0, SentryUnits.Duration ], }); -export const dotnetMetrics = (): OnboardingConfig => ({ +export const metrics: OnboardingConfig = { install: params => [ { type: StepType.INSTALL, @@ -124,4 +124,4 @@ SentrySdk.Experimental.Metrics.EmitGauge("page_load", 15.0, SentryUnits.Duration ], }, ], -}); +}; From 76bd03e52829a646a62523a5c9e9e84d6eb5850d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Wed, 4 Feb 2026 20:42:21 +0100 Subject: [PATCH 04/11] cleanup after merge --- static/app/gettingStartedDocs/dotnet/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/static/app/gettingStartedDocs/dotnet/index.tsx b/static/app/gettingStartedDocs/dotnet/index.tsx index f22b6df4d51630..96d485dc996f09 100644 --- a/static/app/gettingStartedDocs/dotnet/index.tsx +++ b/static/app/gettingStartedDocs/dotnet/index.tsx @@ -1,5 +1,4 @@ import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types'; -import {dotnetLogs} from 'sentry/gettingStartedDocs/dotnet/logs'; import {crashReport} from './crashReport'; import {feedback} from './feedback'; From e4a9bf8464b1a82e2fc516f560c09a25a1600934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Thu, 5 Feb 2026 09:58:34 +0100 Subject: [PATCH 05/11] test: fix missing rename after merge --- static/app/gettingStartedDocs/dotnet/metrics.spec.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx index 5d36ef607f9b07..6318e8351ef8de 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx @@ -1,5 +1,5 @@ // Only import and test functions that don't have circular dependencies -const {dotnetMetrics} = jest.requireActual('sentry/gettingStartedDocs/dotnet/metrics'); +const {metrics} = jest.requireActual('sentry/gettingStartedDocs/dotnet/metrics'); describe('metrics', () => { const mockParams = { @@ -12,7 +12,7 @@ describe('metrics', () => { }; it('generates metrics onboarding config with default parameters', () => { - const result = dotnetMetrics(); + const result = metrics(); // Test install step const installSteps = result.install(mockParams); From 435f4d5a00054c700d62fc5befc106f5ed700c38 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Thu, 5 Feb 2026 11:18:23 +0100 Subject: [PATCH 06/11] update metrics test --- .../dotnet/metrics.spec.tsx | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx index 6318e8351ef8de..c7ce5a5a0a9503 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx @@ -1,34 +1,33 @@ -// Only import and test functions that don't have circular dependencies -const {metrics} = jest.requireActual('sentry/gettingStartedDocs/dotnet/metrics'); +import {renderWithOnboardingLayout} from 'sentry-test/onboarding/renderWithOnboardingLayout'; +import {screen} from 'sentry-test/reactTestingLibrary'; +import {textWithMarkupMatcher} from 'sentry-test/utils'; -describe('metrics', () => { - const mockParams = { - dsn: { - public: 'https://test@example.com/123', - }, - sourcePackageRegistries: { - isLoading: false, - }, - }; +import {ProductSolution} from 'sentry/components/onboarding/gettingStartedDoc/types'; + +import docs from '.'; - it('generates metrics onboarding config with default parameters', () => { - const result = metrics(); +describe('metrics', () => { + it('dotnet metrics onboarding docs', async () => { + renderWithOnboardingLayout(docs, { + selectedProducts: [ProductSolution.METRICS], + }); - // Test install step - const installSteps = result.install(mockParams); - expect(installSteps).toHaveLength(1); - expect(installSteps[0].type).toBe('install'); - expect(installSteps[0].content).toHaveLength(2); + expect( + screen.getByText( + textWithMarkupMatcher(/SentrySdk\.Experimental\.Metrics\.EmitCounter/) + ) + ).toBeInTheDocument(); + }); - // Test verify step - const verifySteps = result.verify(mockParams); - expect(verifySteps).toHaveLength(1); - expect(verifySteps[0].type).toBe('verify'); - expect(verifySteps[0].content).toHaveLength(3); - const codeSnippet = verifySteps[0].content[1].code; + it('does not render metrics configuration when metrics is not enabled', async () => { + renderWithOnboardingLayout(docs, { + selectedProducts: [], + }); - expect(codeSnippet).toContain('SentrySdk.Init'); - expect(codeSnippet).toContain(mockParams.dsn.public); - expect(codeSnippet).toContain('Metrics.EmitCounter'); + expect( + screen.queryByText( + textWithMarkupMatcher(/SentrySdk\.Experimental\.Metrics\.EmitCounter/) + ) + ).not.toBeInTheDocument(); }); }); From 9eb6bd29fc062b00cf8b6b1b9ecdf6df5cdc23df Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Thu, 5 Feb 2026 11:21:36 +0100 Subject: [PATCH 07/11] remove async from arrow function in test --- static/app/gettingStartedDocs/dotnet/metrics.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx index c7ce5a5a0a9503..de029baf583111 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx @@ -7,7 +7,7 @@ import {ProductSolution} from 'sentry/components/onboarding/gettingStartedDoc/ty import docs from '.'; describe('metrics', () => { - it('dotnet metrics onboarding docs', async () => { + it('dotnet metrics onboarding docs', () => { renderWithOnboardingLayout(docs, { selectedProducts: [ProductSolution.METRICS], }); From b4fc71e05f8a5fe7f60e328ad601817014d498e0 Mon Sep 17 00:00:00 2001 From: Alexander Alderman Webb Date: Thu, 5 Feb 2026 11:26:37 +0100 Subject: [PATCH 08/11] another instance --- static/app/gettingStartedDocs/dotnet/metrics.spec.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx index de029baf583111..fe2025061544eb 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.spec.tsx @@ -19,7 +19,7 @@ describe('metrics', () => { ).toBeInTheDocument(); }); - it('does not render metrics configuration when metrics is not enabled', async () => { + it('does not render metrics configuration when metrics is not enabled', () => { renderWithOnboardingLayout(docs, { selectedProducts: [], }); From 5674735077c5c7a2014ce87e0b13ae5141c0ab4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Thu, 5 Feb 2026 13:53:50 +0100 Subject: [PATCH 09/11] fix: language identifier for C# code snippet --- static/app/gettingStartedDocs/dotnet/metrics.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.tsx b/static/app/gettingStartedDocs/dotnet/metrics.tsx index 154a78cb8eb4b4..b06ed7aaa9812d 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.tsx @@ -95,7 +95,7 @@ export const metrics: OnboardingConfig = { }, { type: 'code', - language: 'dotnet', + language: 'csharp', code: `using Sentry; SentrySdk.Init(options => From 0738f9d634009ce9b9e3ae4dd4a632fc3dc8c28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Thu, 5 Feb 2026 14:17:16 +0100 Subject: [PATCH 10/11] fix: invalid syntax in C# code snippet --- static/app/gettingStartedDocs/dotnet/metrics.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/gettingStartedDocs/dotnet/metrics.tsx b/static/app/gettingStartedDocs/dotnet/metrics.tsx index b06ed7aaa9812d..0f95abba8ebfad 100644 --- a/static/app/gettingStartedDocs/dotnet/metrics.tsx +++ b/static/app/gettingStartedDocs/dotnet/metrics.tsx @@ -100,7 +100,7 @@ export const metrics: OnboardingConfig = { SentrySdk.Init(options => { - options.Dsn = ${params.dsn.public}; + options.Dsn = "${params.dsn.public}"; }); SentrySdk.Experimental.Metrics.EmitCounter("button_click", 5, From 9a10bf2a58e8b008e76fb3c1f69c7d0de51a35ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20P=C3=B6lz?= <38893694+Flash0ver@users.noreply.github.com> Date: Tue, 10 Feb 2026 14:22:17 +0100 Subject: [PATCH 11/11] ref: simplify .NET SDK version selector for getting started snippets --- .../app/gettingStartedDocs/dotnet/utils.tsx | 24 +++++-------------- 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/static/app/gettingStartedDocs/dotnet/utils.tsx b/static/app/gettingStartedDocs/dotnet/utils.tsx index dd90c50b809fe7..a06806b8382782 100644 --- a/static/app/gettingStartedDocs/dotnet/utils.tsx +++ b/static/app/gettingStartedDocs/dotnet/utils.tsx @@ -1,22 +1,10 @@ import type {DocsParams} from 'sentry/components/onboarding/gettingStartedDoc/types'; import {getPackageVersion} from 'sentry/utils/gettingStartedDocs/getPackageVersion'; -export const getInstallSnippetPackageManager = (params: DocsParams) => { - let version = '6.0.0'; - if (params.isMetricsSelected) { - version = '6.1.0'; - } +// Sentry SDK for .NET 6.1.0 adds initial experimental support for Metrics +export const getInstallSnippetPackageManager = (params: DocsParams) => ` +Install-Package Sentry -Version ${getPackageVersion(params, 'sentry.dotnet', '6.1.0')}`; - return ` -Install-Package Sentry -Version ${getPackageVersion(params, 'sentry.dotnet', version)}`; -}; - -export const getInstallSnippetCoreCli = (params: DocsParams) => { - let version = '6.0.0'; - if (params.isMetricsSelected) { - version = '6.1.0'; - } - - return ` -dotnet add package Sentry -v ${getPackageVersion(params, 'sentry.dotnet', version)}`; -}; +// Sentry SDK for .NET 6.1.0 adds initial experimental support for Metrics +export const getInstallSnippetCoreCli = (params: DocsParams) => ` +dotnet add package Sentry -v ${getPackageVersion(params, 'sentry.dotnet', '6.1.0')}`;