import {Fragment} from 'react';
import ExternalLink from 'sentry/components/links/externalLink';
import {Layout, LayoutProps} from 'sentry/components/onboarding/gettingStartedDoc/layout';
import {ModuleProps} from 'sentry/components/onboarding/gettingStartedDoc/sdkDocumentation';
import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
import {t, tct} from 'sentry/locale';
// Configuration Start
const introduction = (
{tct(
"Sentry supports Kotlin for both JVM and [Android. This wizard guides you through set up in the JVM scenario. If you're interested in [strong:Android], head over to the [gettingStartedWithAndroidLink:Getting Started] for that SDK instead. At its core, Sentry for Java provides a raw client for sending events to Sentry. If you use [strong:Spring Boot, Spring, Logback, JUL, or Log4j2], head over to our [gettingStartedWithJavaLink:Getting Started for Sentry Java].",
{
gettingStartedWithAndroidLink: (
),
gettingStartedWithJavaLink: (
),
strong: ,
}
)}
);
export const steps = ({
dsn,
sourcePackageRegistries,
}: Partial<
Pick
> = {}): LayoutProps['steps'] => [
{
type: StepType.INSTALL,
description: t('Install the SDK via Gradle or Maven:'),
configurations: [
{
language: 'groovy',
description: (
{tct('For [strong:Gradle], add to your [code:build.gradle] file:', {
strong: ,
code:
,
})}
),
partialLoading: sourcePackageRegistries?.isLoading,
code: `
// Make sure mavenCentral is there.
repositories {
mavenCentral()
}
dependencies {
implementation 'io.sentry:sentry:${
sourcePackageRegistries?.isLoading
? t('\u2026loading')
: sourcePackageRegistries?.data?.['sentry.java']?.version ?? '4.0.0'
}'
}
`,
},
{
language: 'xml',
partialLoading: sourcePackageRegistries?.isLoading,
description: (
{tct('For [strong:Maven], add to your [code:pom.xml] file:', {
strong: ,
code:
,
})}
),
code: `
io.sentry
sentry
${
sourcePackageRegistries?.isLoading
? t('\u2026loading')
: sourcePackageRegistries?.data?.['sentry.java']?.version ?? '6.25.0'
}
`,
},
],
},
{
type: StepType.CONFIGURE,
description: t(
"Configure Sentry as soon as possible in your application's lifecycle:"
),
configurations: [
{
language: 'kotlin',
code: `
import io.sentry.Sentry
Sentry.init { options ->
options.dsn = "${dsn}"
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
// We recommend adjusting this value in production.
options.tracesSampleRate = 1.0
// When first trying Sentry it's good to see what the SDK is doing:
options.isDebug = true
}
`,
},
],
},
{
type: StepType.VERIFY,
description: (
{tct(
'Trigger your first event from your development environment by intentionally creating an error with the [code:Sentry#captureException] method, to test that everything is working:',
{code:
}
)}
),
configurations: [
{
language: 'kotlin',
code: `
import java.lang.Exception
import io.sentry.Sentry
try {
throw Exception("This is a test.")
} catch (e: Exception) {
Sentry.captureException(e)
}
`,
},
],
additionalInfo: (
{t(
"If you're new to Sentry, use the email alert to access your account and complete a product tour."
)}
{t(
"If you're an existing user and have disabled alerts, you won't receive this email."
)}
),
},
{
title: t('Measure Performance'),
description: t('You can capture transactions using the SDK. For example:'),
configurations: [
{
language: 'kotlin',
code: `
import io.sentry.Sentry
import io.sentry.SpanStatus
// A good name for the transaction is key, to help identify what this is about
val transaction = Sentry.startTransaction("processOrderBatch()", "task")
try {
processOrderBatch()
} catch (e: Exception) {
transaction.throwable = e
transaction.status = SpanStatus.INTERNAL_ERROR
throw e
} finally {
transaction.finish();
}
`,
},
],
additionalInfo: (
{tct(
'For more information about the API and automatic instrumentations included in the SDK, visit the docs.',
{
docsLink: (
),
}
)}
),
},
];
// Configuration End
export function GettingStartedWithKotlin({
dsn,
sourcePackageRegistries,
...props
}: ModuleProps) {
return (
);
}
export default GettingStartedWithKotlin;