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 {CrashReportWebApiOnboarding} from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding';
import {getRubyMetricsOnboarding} from 'sentry/components/onboarding/gettingStartedDoc/utils/metricsOnboarding';
import {tct} from 'sentry/locale';
type Params = DocsParams;
const getInstallSnippet = (params: Params) =>
`${params.isProfilingSelected ? 'gem "stackprof"\n' : ''}gem "sentry-ruby"`;
const getConfigureSnippet = (params: Params) => `
require 'sentry-ruby'
Sentry.init do |config|
config.dsn = '${params.dsn}'${
params.isPerformanceSelected
? `
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for performance monitoring.
# We recommend adjusting this value in production.
config.traces_sample_rate = 1.0
# or
config.traces_sampler = lambda do |context|
true
end`
: ''
}${
params.isProfilingSelected
? `
# Set profiles_sample_rate to profile 100%
# of sampled transactions.
# We recommend adjusting this value in production.
config.profiles_sample_rate = 1.0`
: ''
}
end
use Sentry::Rack::CaptureExceptions`;
const onboarding: OnboardingConfig = {
install: params => [
{
type: StepType.INSTALL,
description: tct(
'Install the SDK via Rubygems by adding it to your [code:Gemfile]:',
{
code:
,
}
),
configurations: [
{
description: params.isProfilingSelected
? tct(
'Ruby Profiling beta is available since SDK version 5.9.0. We use the [stackprofLink:stackprof gem] to collect profiles for Ruby. Make sure [stackprofCode:stackprof] is loaded before [sentryRubyCode:sentry-ruby].',
{
stackprofLink: (
),
stackprofCode:
,
sentryRubyCode:
,
}
)
: undefined,
language: 'ruby',
code: getInstallSnippet(params),
},
],
},
],
configure: params => [
{
type: StepType.CONFIGURE,
description: tct(
'Add use [sentryRackCode:Sentry::Rack::CaptureExceptions] to your [sentryConfigCode:config.ru] or other rackup file (this is automatically inserted in Rails):',
{
sentryRackCode:
,
sentryConfigCode:
,
}
),
configurations: [
{
language: 'ruby',
code: getConfigureSnippet(params),
},
],
},
],
verify: () => [],
};
const docs: Docs = {
onboarding,
customMetricsOnboarding: getRubyMetricsOnboarding(),
crashReportOnboarding: CrashReportWebApiOnboarding,
};
export default docs;