Files
2024-02-15 17:01:50 +00:00

116 lines
3.1 KiB
TypeScript

import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
import type {
Docs,
DocsParams,
OnboardingConfig,
} from 'sentry/components/onboarding/gettingStartedDoc/types';
import {getUploadSourceMapsStep} from 'sentry/components/onboarding/gettingStartedDoc/utils';
import {getJSServerMetricsOnboarding} from 'sentry/components/onboarding/gettingStartedDoc/utils/metricsOnboarding';
import {ProductSolution} from 'sentry/components/onboarding/productSelection';
import {t} from 'sentry/locale';
import type {ProductSelectionMap} from 'sentry/utils/gettingStartedDocs/node';
import {
getDefaultNodeImports,
getInstallConfig,
} from 'sentry/utils/gettingStartedDocs/node';
type Params = DocsParams;
const productSelection = (params: Params): ProductSelectionMap => {
return {
[ProductSolution.ERROR_MONITORING]: true,
[ProductSolution.PROFILING]: params.isProfilingSelected,
[ProductSolution.PERFORMANCE_MONITORING]: params.isPerformanceSelected,
[ProductSolution.SESSION_REPLAY]: params.isReplaySelected,
};
};
const getSdkSetupSnippet = (params: Params) => `
${getDefaultNodeImports({productSelection: productSelection(params)}).join('\n')}
import connect from "connect";
// Configure Sentry before doing anything else
Sentry.init({
dsn: "${params.dsn}",
integrations: [${
params.isProfilingSelected
? `
new ProfilingIntegration(),`
: ''
}
],${
params.isPerformanceSelected
? `
// Performance Monitoring
tracesSampleRate: 1.0, // Capture 100% of the transactions`
: ''
}${
params.isProfilingSelected
? `
// Set sampling rate for profiling - this is relative to tracesSampleRate
profilesSampleRate: 1.0,`
: ''
}
});
function mainHandler(req, res) {
throw new Error("My first Sentry error!");
}
function onError(err, req, res, next) {
// The error id is attached to \`res.sentry\` to be returned
// and optionally displayed to the user for support.
res.statusCode = 500;
res.end(res.sentry + "\\n");
}
connect(
// The request handler be the first item
Sentry.Handlers.requestHandler(),
connect.bodyParser(),
connect.cookieParser(),
mainHandler,
// The error handler must be before any other error middleware
Sentry.Handlers.errorHandler(),
// Optional fallthrough error handler
onError
).listen(3000);
`;
const onboarding: OnboardingConfig = {
install: params => [
{
type: StepType.INSTALL,
description: t('Add the Sentry Node SDK as a dependency:'),
configurations: getInstallConfig(params),
},
],
configure: params => [
{
type: StepType.CONFIGURE,
description: t('Configure Sentry as a middleware:'),
configurations: [
{
language: 'javascript',
code: getSdkSetupSnippet(params),
},
],
},
getUploadSourceMapsStep({
guideLink: 'https://docs.sentry.io/platforms/node/guides/connect/sourcemaps/',
...params,
}),
],
verify: () => [],
};
const docs: Docs = {
onboarding,
customMetricsOnboarding: getJSServerMetricsOnboarding(),
};
export default docs;