diff --git a/static/app/components/onboarding/productSelection.tsx b/static/app/components/onboarding/productSelection.tsx index 3a27f81a4dc4d1..6b23d9b99e1782 100644 --- a/static/app/components/onboarding/productSelection.tsx +++ b/static/app/components/onboarding/productSelection.tsx @@ -116,111 +116,141 @@ export const platformProductAvailability = { ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-react-router': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-vue': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-angular': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-ember': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-gatsby': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-solid': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-solidstart': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, + ProductSolution.METRICS, ], 'javascript-svelte': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'javascript-tanstackstart-react': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, + ProductSolution.METRICS, ], 'javascript-astro': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.SESSION_REPLAY, ProductSolution.LOGS, + ProductSolution.METRICS, ], node: [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-azurefunctions': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, + ], + 'node-awslambda': [ + ProductSolution.PERFORMANCE_MONITORING, + ProductSolution.PROFILING, + ProductSolution.METRICS, ], - 'node-awslambda': [ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING], 'node-connect': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-express': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-fastify': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-gcpfunctions': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-hapi': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-hono': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-koa': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-nestjs': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, ProductSolution.LOGS, + ProductSolution.METRICS, ], 'node-cloudflare-workers': [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.LOGS, + ProductSolution.METRICS, + ], + 'node-cloudflare-pages': [ + ProductSolution.PERFORMANCE_MONITORING, + ProductSolution.LOGS, + ProductSolution.METRICS, ], - 'node-cloudflare-pages': [ProductSolution.PERFORMANCE_MONITORING, ProductSolution.LOGS], php: [ ProductSolution.PERFORMANCE_MONITORING, ProductSolution.PROFILING, @@ -531,6 +561,18 @@ export function ProductSelection({ checked={urlProducts.includes(ProductSolution.LOGS)} /> )} + {products.includes(ProductSolution.METRICS) && ( + handleClickProduct(ProductSolution.METRICS)} + disabled={disabledProducts[ProductSolution.METRICS]} + checked={urlProducts.includes(ProductSolution.METRICS)} + /> + )} {products.includes(ProductSolution.SESSION_REPLAY) && ( = new Set([ ]); // List of platforms that have metrics onboarding checklist content -export const withMetricsOnboarding: Set = new Set([]); +export const withMetricsOnboarding: Set = new Set([ + 'javascript', + 'javascript-angular', + 'javascript-astro', + 'javascript-ember', + 'javascript-gatsby', + 'javascript-nextjs', + 'javascript-nuxt', + 'javascript-react', + 'javascript-react-router', + 'javascript-remix', + 'javascript-solid', + 'javascript-solidstart', + 'javascript-svelte', + 'javascript-sveltekit', + 'javascript-tanstackstart-react', + 'javascript-vue', + 'node', + 'node-awslambda', + 'node-azurefunctions', + 'node-cloudflare-pages', + 'node-cloudflare-workers', + 'node-connect', + 'node-express', + 'node-fastify', + 'node-gcpfunctions', + 'node-hapi', + 'node-hono', + 'node-koa', + 'node-nestjs', +]); // List of platforms that do not have metrics support. We make use of this list in the product to not provide any Metrics export const withoutMetricsSupport: Set = new Set([]); diff --git a/static/app/gettingStartedDocs/javascript/angular/index.tsx b/static/app/gettingStartedDocs/javascript/angular/index.tsx index d82eb8e16f3ead..3a95187d78f5aa 100644 --- a/static/app/gettingStartedDocs/javascript/angular/index.tsx +++ b/static/app/gettingStartedDocs/javascript/angular/index.tsx @@ -4,6 +4,7 @@ import {featureFlag} from 'sentry/gettingStartedDocs/javascript/javascript/featu import {crashReport} from './crashReport'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {profiling} from './profiling'; import {replay} from './replay'; @@ -18,6 +19,7 @@ const docs: Docs = { profilingOnboarding: profiling, featureFlagOnboarding: featureFlag, logsOnboarding: logs, + metricsOnboarding: metrics, }; export default docs; diff --git a/static/app/gettingStartedDocs/javascript/angular/metrics.tsx b/static/app/gettingStartedDocs/javascript/angular/metrics.tsx new file mode 100644 index 00000000000000..4d2f9f28cd4f78 --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/angular/metrics.tsx @@ -0,0 +1,9 @@ +import {getJavascriptMetricsOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +import {installSnippetBlock} from './utils'; + +export const metrics = getJavascriptMetricsOnboarding({ + installSnippetBlock, + docsPlatform: 'angular', + packageName: '@sentry/angular', +}); diff --git a/static/app/gettingStartedDocs/javascript/angular/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/angular/onboarding.spec.tsx index bb23e1eef293f6..5a8dc9491a930b 100644 --- a/static/app/gettingStartedDocs/javascript/angular/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/angular/onboarding.spec.tsx @@ -154,4 +154,11 @@ describe('javascript-angular onboarding docs', () => { expect(screen.queryByText('Logging Integrations')).not.toBeInTheDocument(); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/astro/index.tsx b/static/app/gettingStartedDocs/javascript/astro/index.tsx index 340d1b8a505f82..3cf4bdda9dd2f7 100644 --- a/static/app/gettingStartedDocs/javascript/astro/index.tsx +++ b/static/app/gettingStartedDocs/javascript/astro/index.tsx @@ -5,6 +5,7 @@ import {agentMonitoring} from './agentMonitoring'; import {crashReport} from './crashReport'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {profiling} from './profiling'; import {replay} from './replay'; @@ -16,6 +17,7 @@ const docs: Docs = { crashReportOnboarding: crashReport, featureFlagOnboarding: featureFlag, logsOnboarding: logs, + metricsOnboarding: metrics, profilingOnboarding: profiling, agentMonitoringOnboarding: agentMonitoring, }; diff --git a/static/app/gettingStartedDocs/javascript/astro/metrics.tsx b/static/app/gettingStartedDocs/javascript/astro/metrics.tsx new file mode 100644 index 00000000000000..bc3a09c8bc7cac --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/astro/metrics.tsx @@ -0,0 +1,6 @@ +import {getJavascriptMetricsFullStackOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +export const metrics = getJavascriptMetricsFullStackOnboarding({ + docsPlatform: 'astro', + packageName: '@sentry/astro', +}); diff --git a/static/app/gettingStartedDocs/javascript/astro/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/astro/onboarding.spec.tsx index 6d381823b05398..a596e507aa3988 100644 --- a/static/app/gettingStartedDocs/javascript/astro/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/astro/onboarding.spec.tsx @@ -198,4 +198,11 @@ describe('javascript-astro onboarding docs', () => { // This is a bit complex to test precisely, but we can ensure the config is split correctly expect(astroConfigSections.length).toBeGreaterThan(0); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/ember/index.tsx b/static/app/gettingStartedDocs/javascript/ember/index.tsx index 6277ae968201c2..bc455410fc6800 100644 --- a/static/app/gettingStartedDocs/javascript/ember/index.tsx +++ b/static/app/gettingStartedDocs/javascript/ember/index.tsx @@ -4,6 +4,7 @@ import {featureFlag} from 'sentry/gettingStartedDocs/javascript/javascript/featu import {crashReport} from './crashReport'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {profiling} from './profiling'; import {replay} from './replay'; @@ -16,6 +17,7 @@ const docs: Docs = { profilingOnboarding: profiling, featureFlagOnboarding: featureFlag, logsOnboarding: logs, + metricsOnboarding: metrics, }; export default docs; diff --git a/static/app/gettingStartedDocs/javascript/ember/metrics.tsx b/static/app/gettingStartedDocs/javascript/ember/metrics.tsx new file mode 100644 index 00000000000000..56bfed48f95d0f --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/ember/metrics.tsx @@ -0,0 +1,9 @@ +import {getJavascriptMetricsOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +import {installSnippetBlock} from './utils'; + +export const metrics = getJavascriptMetricsOnboarding({ + installSnippetBlock, + docsPlatform: 'ember', + packageName: '@sentry/ember', +}); diff --git a/static/app/gettingStartedDocs/javascript/gatsby/index.tsx b/static/app/gettingStartedDocs/javascript/gatsby/index.tsx index 6277ae968201c2..bc455410fc6800 100644 --- a/static/app/gettingStartedDocs/javascript/gatsby/index.tsx +++ b/static/app/gettingStartedDocs/javascript/gatsby/index.tsx @@ -4,6 +4,7 @@ import {featureFlag} from 'sentry/gettingStartedDocs/javascript/javascript/featu import {crashReport} from './crashReport'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {profiling} from './profiling'; import {replay} from './replay'; @@ -16,6 +17,7 @@ const docs: Docs = { profilingOnboarding: profiling, featureFlagOnboarding: featureFlag, logsOnboarding: logs, + metricsOnboarding: metrics, }; export default docs; diff --git a/static/app/gettingStartedDocs/javascript/gatsby/metrics.tsx b/static/app/gettingStartedDocs/javascript/gatsby/metrics.tsx new file mode 100644 index 00000000000000..7bc67573421667 --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/gatsby/metrics.tsx @@ -0,0 +1,9 @@ +import {getJavascriptMetricsOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +import {installSnippetBlock} from './utils'; + +export const metrics = getJavascriptMetricsOnboarding({ + installSnippetBlock, + docsPlatform: 'gatsby', + packageName: '@sentry/gatsby', +}); diff --git a/static/app/gettingStartedDocs/javascript/gatsby/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/gatsby/onboarding.spec.tsx index 35a20cd50588b5..bfb13a5dacc2ed 100644 --- a/static/app/gettingStartedDocs/javascript/gatsby/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/gatsby/onboarding.spec.tsx @@ -213,4 +213,11 @@ describe('javascript-gatsby onboarding docs', () => { // - Sentry.feedbackIntegration() is included when feedback is selected // - colorScheme: "system" is configured // - Feedback configuration options are applied + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/javascript/index.tsx b/static/app/gettingStartedDocs/javascript/javascript/index.tsx index 468a55ef6385aa..be0cc8ed15e50d 100644 --- a/static/app/gettingStartedDocs/javascript/javascript/index.tsx +++ b/static/app/gettingStartedDocs/javascript/javascript/index.tsx @@ -8,6 +8,7 @@ import {crashReport} from './crashReport'; import {featureFlag} from './featureFlag'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {performance} from './performance'; import {profiling} from './profiling'; @@ -26,6 +27,7 @@ const docs: Docs = { profilingOnboarding: profiling, featureFlagOnboarding: featureFlag, logsOnboarding: logs, + metricsOnboarding: metrics, }; export default docs; diff --git a/static/app/gettingStartedDocs/javascript/javascript/metrics.tsx b/static/app/gettingStartedDocs/javascript/javascript/metrics.tsx new file mode 100644 index 00000000000000..ecb4d98b871db7 --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/javascript/metrics.tsx @@ -0,0 +1,9 @@ +import {getJavascriptMetricsOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +import {installSnippetBlock} from './utils'; + +export const metrics = getJavascriptMetricsOnboarding({ + installSnippetBlock, + docsPlatform: 'javascript', + packageName: '@sentry/browser', +}); diff --git a/static/app/gettingStartedDocs/javascript/javascript/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/javascript/onboarding.spec.tsx index 807eb9f8919ace..f87a9f5f883434 100644 --- a/static/app/gettingStartedDocs/javascript/javascript/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/javascript/onboarding.spec.tsx @@ -126,4 +126,11 @@ describe('javascript onboarding docs', () => { expect(screen.getByRole('heading', {name: 'Configure SDK'})).toBeInTheDocument(); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/nextjs.spec.tsx b/static/app/gettingStartedDocs/javascript/nextjs.spec.tsx index d1e742e96e8197..b210eb1433802f 100644 --- a/static/app/gettingStartedDocs/javascript/nextjs.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/nextjs.spec.tsx @@ -34,4 +34,11 @@ describe('javascript-nextjs onboarding docs', () => { screen.getByText(textWithMarkupMatcher(/sentry-example-page/)) ).toBeInTheDocument(); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/nextjs.tsx b/static/app/gettingStartedDocs/javascript/nextjs.tsx index 7142dcaf47ce15..1075e37f62cf38 100644 --- a/static/app/gettingStartedDocs/javascript/nextjs.tsx +++ b/static/app/gettingStartedDocs/javascript/nextjs.tsx @@ -28,6 +28,7 @@ import {t, tct} from 'sentry/locale'; import { getJavascriptFullStackOnboarding, getJavascriptLogsFullStackOnboarding, + getJavascriptMetricsFullStackOnboarding, } from 'sentry/utils/gettingStartedDocs/javascript'; type Params = DocsParams; @@ -614,6 +615,10 @@ const docs: Docs = { docsPlatform: 'nextjs', packageName: '@sentry/nextjs', }), + metricsOnboarding: getJavascriptMetricsFullStackOnboarding({ + docsPlatform: 'nextjs', + packageName: '@sentry/nextjs', + }), agentMonitoringOnboarding: getNodeAgentMonitoringOnboarding({ packageName: '@sentry/nextjs', configFileName: 'sentry.server.config.ts', diff --git a/static/app/gettingStartedDocs/javascript/nuxt/index.tsx b/static/app/gettingStartedDocs/javascript/nuxt/index.tsx index 1c5fd3e0764563..f3b4ae299da7ae 100644 --- a/static/app/gettingStartedDocs/javascript/nuxt/index.tsx +++ b/static/app/gettingStartedDocs/javascript/nuxt/index.tsx @@ -5,6 +5,7 @@ import {agentMonitoring} from './agentMonitoring'; import {crashReport} from './crashReport'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {profiling} from './profiling'; import {replay} from './replay'; @@ -17,6 +18,7 @@ const docs: Docs = { profilingOnboarding: profiling, featureFlagOnboarding: featureFlag, logsOnboarding: logs, + metricsOnboarding: metrics, agentMonitoringOnboarding: agentMonitoring, }; diff --git a/static/app/gettingStartedDocs/javascript/nuxt/metrics.tsx b/static/app/gettingStartedDocs/javascript/nuxt/metrics.tsx new file mode 100644 index 00000000000000..4d94d3e61a719f --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/nuxt/metrics.tsx @@ -0,0 +1,6 @@ +import {getJavascriptMetricsFullStackOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +export const metrics = getJavascriptMetricsFullStackOnboarding({ + docsPlatform: 'nuxt', + packageName: '@sentry/nuxt', +}); diff --git a/static/app/gettingStartedDocs/javascript/nuxt/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/nuxt/onboarding.spec.tsx index 449f945f8020ec..ff169e28e0ce6b 100644 --- a/static/app/gettingStartedDocs/javascript/nuxt/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/nuxt/onboarding.spec.tsx @@ -40,4 +40,11 @@ describe('javascript-nuxt onboarding docs', () => { screen.getByText(textWithMarkupMatcher(/sentry-example-page/)) ).toBeInTheDocument(); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/react-router/index.tsx b/static/app/gettingStartedDocs/javascript/react-router/index.tsx index 156dc5c92e82c3..ac03eff6e69523 100644 --- a/static/app/gettingStartedDocs/javascript/react-router/index.tsx +++ b/static/app/gettingStartedDocs/javascript/react-router/index.tsx @@ -4,6 +4,7 @@ import {agentMonitoring} from './agentMonitoring'; import {crashReport} from './crashReport'; import {feedback} from './feedback'; import {logs} from './logs'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {performance} from './performance'; import {profiling} from './profiling'; @@ -18,6 +19,7 @@ const docs: Docs = { profilingOnboarding: profiling, agentMonitoringOnboarding: agentMonitoring, logsOnboarding: logs, + metricsOnboarding: metrics, }; export default docs; diff --git a/static/app/gettingStartedDocs/javascript/react-router/metrics.tsx b/static/app/gettingStartedDocs/javascript/react-router/metrics.tsx new file mode 100644 index 00000000000000..0f72110a8eb6cb --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/react-router/metrics.tsx @@ -0,0 +1,6 @@ +import {getJavascriptMetricsFullStackOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +export const metrics = getJavascriptMetricsFullStackOnboarding({ + docsPlatform: 'react-router', + packageName: '@sentry/react-router', +}); diff --git a/static/app/gettingStartedDocs/javascript/react-router/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/react-router/onboarding.spec.tsx index 0d61ef3e521246..3237519e7420cf 100644 --- a/static/app/gettingStartedDocs/javascript/react-router/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/react-router/onboarding.spec.tsx @@ -105,4 +105,11 @@ describe('javascript-react-router onboarding docs', () => { screen.getByText(textWithMarkupMatcher(/Sentry\.logger\.info\(/)) ).toBeInTheDocument(); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/react/index.tsx b/static/app/gettingStartedDocs/javascript/react/index.tsx index 72d5254b184a90..c75f8071926836 100644 --- a/static/app/gettingStartedDocs/javascript/react/index.tsx +++ b/static/app/gettingStartedDocs/javascript/react/index.tsx @@ -4,6 +4,7 @@ import {logs} from 'sentry/gettingStartedDocs/javascript/react/logs'; import {crashReport} from './crashReport'; import {feedback} from './feedback'; +import {metrics} from './metrics'; import {onboarding} from './onboarding'; import {performance} from './performance'; import {profiling} from './profiling'; @@ -18,6 +19,7 @@ const docs: Docs = { profilingOnboarding: profiling, logsOnboarding: logs, featureFlagOnboarding: featureFlag, + metricsOnboarding: metrics, }; export default docs; diff --git a/static/app/gettingStartedDocs/javascript/react/metrics.tsx b/static/app/gettingStartedDocs/javascript/react/metrics.tsx new file mode 100644 index 00000000000000..476a2c28beface --- /dev/null +++ b/static/app/gettingStartedDocs/javascript/react/metrics.tsx @@ -0,0 +1,9 @@ +import {getJavascriptMetricsOnboarding} from 'sentry/utils/gettingStartedDocs/javascript'; + +import {installSnippetBlock} from './utils'; + +export const metrics = getJavascriptMetricsOnboarding({ + installSnippetBlock, + docsPlatform: 'react', + packageName: '@sentry/react', +}); diff --git a/static/app/gettingStartedDocs/javascript/react/onboarding.spec.tsx b/static/app/gettingStartedDocs/javascript/react/onboarding.spec.tsx index e895f82fe22b2b..510bce650794b2 100644 --- a/static/app/gettingStartedDocs/javascript/react/onboarding.spec.tsx +++ b/static/app/gettingStartedDocs/javascript/react/onboarding.spec.tsx @@ -96,6 +96,41 @@ describe('javascript-react onboarding docs', () => { ).toBeInTheDocument(); }); + it('includes metrics API calls in verify when metrics is selected', () => { + renderWithOnboardingLayout(docs, { + selectedProducts: [ProductSolution.ERROR_MONITORING, ProductSolution.METRICS], + }); + + expect( + screen.getByText( + textWithMarkupMatcher(/Sentry\.metrics\.count\('test_counter', 1\)/) + ) + ).toBeInTheDocument(); + }); + + it('shows Metrics in next steps when metrics is selected', () => { + renderWithOnboardingLayout(docs, { + selectedProducts: [ + ProductSolution.ERROR_MONITORING, + ProductSolution.PERFORMANCE_MONITORING, + ProductSolution.METRICS, + ], + }); + + expect(screen.getByText('Metrics')).toBeInTheDocument(); + }); + + it('does not show Metrics in next steps when metrics is not selected', () => { + renderWithOnboardingLayout(docs, { + selectedProducts: [ + ProductSolution.ERROR_MONITORING, + ProductSolution.PERFORMANCE_MONITORING, + ], + }); + + expect(screen.queryByText('Metrics')).not.toBeInTheDocument(); + }); + it('shows Logging Integrations in next steps when logs is selected', () => { renderWithOnboardingLayout(docs, { selectedProducts: [ @@ -118,4 +153,11 @@ describe('javascript-react onboarding docs', () => { expect(screen.queryByText('Logging Integrations')).not.toBeInTheDocument(); }); + + it('has metrics onboarding configuration', () => { + expect(docs.metricsOnboarding).toBeDefined(); + expect(docs.metricsOnboarding?.install).toBeDefined(); + expect(docs.metricsOnboarding?.configure).toBeDefined(); + expect(docs.metricsOnboarding?.verify).toBeDefined(); + }); }); diff --git a/static/app/gettingStartedDocs/javascript/react/onboarding.tsx b/static/app/gettingStartedDocs/javascript/react/onboarding.tsx index 0b11453ad0b163..2485178df28190 100644 --- a/static/app/gettingStartedDocs/javascript/react/onboarding.tsx +++ b/static/app/gettingStartedDocs/javascript/react/onboarding.tsx @@ -21,12 +21,18 @@ const getVerifySnippet = (params: DocsParams) => { });` : ''; + const metricsCode = params.isMetricsSelected + ? ` + // Send a test metric before throwing the error + Sentry.metrics.count('test_counter', 1);` + : ''; + return `import * as Sentry from '@sentry/react'; // Add this button component to your app to test Sentry's error tracking function ErrorButton() { return (