Skip to content
Draft
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
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-aspnet/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types';
import {dotnetLogs} from 'sentry/gettingStartedDocs/dotnet/logs';
import {dotnetMetrics} from 'sentry/gettingStartedDocs/dotnet/metrics';
import {
feedbackOnboardingJsLoader,
replayOnboardingJsLoader,
Expand All @@ -14,6 +15,7 @@ const docs: Docs = {
crashReportOnboarding: crashReport,
feedbackOnboardingJsLoader,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-aspnetcore/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types';
import {dotnetLogs} from 'sentry/gettingStartedDocs/dotnet/logs';
import {dotnetMetrics} from 'sentry/gettingStartedDocs/dotnet/metrics';
import {
feedbackOnboardingJsLoader,
replayOnboardingJsLoader,
Expand All @@ -14,6 +15,7 @@ const docs: Docs = {
crashReportOnboarding: crashReport,
feedbackOnboardingJsLoader,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-awslambda/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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';
Expand All @@ -10,6 +11,7 @@ const docs: Docs = {
feedbackOnboardingCrashApi: feedback,
crashReportOnboarding: crashReport,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-gcpfunctions/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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';
Expand All @@ -10,6 +11,7 @@ const docs: Docs = {
feedbackOnboardingCrashApi: feedback,
crashReportOnboarding: crashReport,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-maui/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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';
Expand All @@ -10,6 +11,7 @@ const docs: Docs = {
feedbackOnboardingCrashApi: feedback,
crashReportOnboarding: crashReport,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-winforms/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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';
Expand All @@ -10,6 +11,7 @@ const docs: Docs = {
feedbackOnboardingCrashApi: feedback,
crashReportOnboarding: crashReport,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-wpf/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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';
Expand All @@ -10,6 +11,7 @@ const docs: Docs = {
feedbackOnboardingCrashApi: feedback,
crashReportOnboarding: crashReport,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet-xamarin/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
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';
Expand All @@ -10,6 +11,7 @@ const docs: Docs = {
feedbackOnboardingCrashApi: feedback,
crashReportOnboarding: crashReport,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
2 changes: 2 additions & 0 deletions static/app/gettingStartedDocs/dotnet/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type {Docs} from 'sentry/components/onboarding/gettingStartedDoc/types';
import {dotnetLogs} from 'sentry/gettingStartedDocs/dotnet/logs';
import {dotnetMetrics} from 'sentry/gettingStartedDocs/dotnet/metrics';

import {crashReport} from './crashReport';
import {feedback} from './feedback';
Expand All @@ -12,6 +13,7 @@ const docs: Docs = {
crashReportOnboarding: crashReport,
profilingOnboarding: profiling,
logsOnboarding: dotnetLogs(),
metricsOnboarding: dotnetMetrics(),
};

export default docs;
34 changes: 34 additions & 0 deletions static/app/gettingStartedDocs/dotnet/metrics.spec.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Only import and test functions that don't have circular dependencies
const {dotnetMetrics} = jest.requireActual('sentry/gettingStartedDocs/dotnet/metrics');

describe('metrics', () => {
const mockParams = {
dsn: {
public: 'https://[email protected]/123',
},
sourcePackageRegistries: {
isLoading: false,
},
};

it('generates metrics onboarding config with default parameters', () => {
const result = dotnetMetrics();

// 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');
});
});
85 changes: 85 additions & 0 deletions static/app/gettingStartedDocs/dotnet/metrics.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
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 => ({
Expand Down Expand Up @@ -39,3 +45,82 @@ SentrySdk.Experimental.Metrics.EmitGauge("page_load", 15.0, SentryUnits.Duration
},
],
});

export const dotnetMetrics = (): 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: <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: <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<string, object>("browser", "Firefox"), new KeyValuePair<string, object>("app_version", "1.0.0")]);
SentrySdk.Experimental.Metrics.EmitDistribution("page_load", 15.0, SentryUnits.Duration.Millisecond,
[new KeyValuePair<string, object>("page", "/home")]);
SentrySdk.Experimental.Metrics.EmitGauge("page_load", 15.0, SentryUnits.Duration.Millisecond,
[new KeyValuePair<string, object>("page", "/home")]);`,
},
{
type: 'text',
text: tct(
'For more detailed information, see the [link:metrics documentation].',
{
link: (
<ExternalLink href="https://docs.sentry.io/platforms/dotnet/metrics/" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

),
}
),
},
],
},
],
});
8 changes: 6 additions & 2 deletions static/app/gettingStartedDocs/dotnet/utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ import {getPackageVersion} from 'sentry/utils/gettingStartedDocs/getPackageVersi

export const getInstallSnippetPackageManager = (params: DocsParams) => {
let version = '3.34.0';
if (params.isLogsSelected) {
if (params.isMetricsSelected) {
version = '6.1.0';
Copy link
Member

@Flash0ver Flash0ver Jan 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

todo: update to actual version when published

See getsentry/sentry-dotnet#4834.
@Flash0ver

} else if (params.isLogsSelected) {
version = '6.0.0';
} else if (params.isProfilingSelected) {
version = '4.3.0';
Expand All @@ -15,7 +17,9 @@ Install-Package Sentry -Version ${getPackageVersion(params, 'sentry.dotnet', ver

export const getInstallSnippetCoreCli = (params: DocsParams) => {
let version = '3.34.0';
if (params.isLogsSelected) {
if (params.isMetricsSelected) {
version = '6.1.0';
} else if (params.isLogsSelected) {
version = '6.0.0';
} else if (params.isProfilingSelected) {
version = '4.3.0';
Expand Down
Loading