import ExternalLink from 'sentry/components/links/externalLink';
import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
import type {
Docs,
DocsParams,
OnboardingConfig,
} from 'sentry/components/onboarding/gettingStartedDoc/types';
import {
getCrashReportModalConfigDescription,
getCrashReportModalIntroduction,
getCrashReportPHPInstallStep,
} from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding';
import replayOnboardingJsLoader from 'sentry/gettingStartedDocs/javascript/jsLoader/jsLoader';
import {t, tct} from 'sentry/locale';
type Params = DocsParams;
const onboarding: OnboardingConfig = {
introduction: () =>
tct(
'Symfony is supported via the [code:sentry-symfony] package as a native bundle.',
{code:
}
),
install: (params: Params) => [
{
type: StepType.INSTALL,
configurations: [
{
language: 'bash',
description: (
{tct('Install the [code:sentry/sentry-symfony] bundle:', {code:
})}
),
code: 'composer require sentry/sentry-symfony',
},
...(params.isProfilingSelected
? [
{
description: t('Install the Excimer extension via PECL:'),
language: 'bash',
code: 'pecl install excimer',
},
{
description: tct(
"The Excimer PHP extension supports PHP 7.2 and up. Excimer requires Linux or macOS and doesn't support Windows. For additional ways to install Excimer, see [sentryPhpDocumentationLink: Sentry documentation].",
{
sentryPhpDocumentationLink: (
),
}
),
},
]
: []),
],
},
],
configure: (params: Params) => [
{
type: StepType.CONFIGURE,
configurations: [
{
description: (
{tct('Add your DSN to your [code:.env] file:', {code:
})}
),
language: 'shell',
code: `
###> sentry/sentry-symfony ###
SENTRY_DSN="${params.dsn}"
###< sentry/sentry-symfony ###
`,
},
...(params.isPerformanceSelected || params.isProfilingSelected
? [
{
description: (
{tct(
'Add further configuration options to your [code:config/packages/sentry.yaml] file:',
{code:
}
)}
),
language: 'yaml',
code: `when@prod:
sentry:
dsn: '%env(SENTRY_DSN)%'${
params.isPerformanceSelected
? `
# Specify a fixed sample rate
traces_sample_rate: 1.0`
: ''
}${
params.isProfilingSelected
? `
# Set a sampling rate for profiling - this is relative to traces_sample_rate
profiles_sample_rate: 1.0`
: ''
}`,
},
]
: []),
],
},
],
verify: () => [
{
type: StepType.VERIFY,
configurations: [
{
language: 'php',
code: `
logger = $logger;
}
/**
* @Route(name="sentry_test", path="/_sentry-test")
*/
public function testLog()
{
// the following code will test if monolog integration logs to sentry
$this->logger->error('My custom logged error.');
// the following code will test if an uncaught exception logs to sentry
throw new \\RuntimeException('Example exception.');
}
}
`,
},
],
additionalInfo: (
{tct(
"After you visit the [code:/_sentry-test page], you can view and resolve the recorded error by logging into [sentryLink:sentry.io] and opening your project. Clicking on the error's title will open a page where you can see detailed information and mark it as resolved.",
{sentryLink: , code:
}
)}
),
},
],
nextSteps: () => [],
};
const crashReportOnboarding: OnboardingConfig = {
introduction: () => getCrashReportModalIntroduction(),
install: (params: Params) => getCrashReportPHPInstallStep(params),
configure: () => [
{
type: StepType.CONFIGURE,
description: getCrashReportModalConfigDescription({
link: 'https://docs.sentry.io/platforms/php/guides/symfony/user-feedback/configuration/#crash-report-modal',
}),
},
],
verify: () => [],
nextSteps: () => [],
};
const docs: Docs = {
onboarding,
replayOnboardingJsLoader,
crashReportOnboarding,
};
export default docs;