From acde64722c0d5808281b09b93fce7b9978c060df Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Sat, 19 Oct 2024 20:35:16 +0200 Subject: [PATCH 1/8] add diagnosticLevel option --- .../SentryOptionsExtensions.apple.kt | 1 + .../extensions/SentryOptionsExtensions.jvm.kt | 42 ++++++++++--------- .../kotlin/multiplatform/SentryOptions.kt | 2 + 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt index aac8aeff..d812de23 100644 --- a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt @@ -32,6 +32,7 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(kmpOptions: SentryOptions) cocoaOptions.enableAppHangTracking = kmpOptions.enableAppHangTracking cocoaOptions.enableWatchdogTerminationTracking = kmpOptions.enableWatchdogTerminationTracking cocoaOptions.appHangTimeoutInterval = kmpOptions.appHangTimeoutIntervalMillis.toDouble() + cocoaOptions.diagnosticLevel = kmpOptions.diagnosticLevel.toCocoaSentryLevel(); kmpOptions.sampleRate?.let { cocoaOptions.sampleRate = NSNumber(double = it) } diff --git a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt index cb559b85..2f42adac 100644 --- a/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt +++ b/sentry-kotlin-multiplatform/src/commonJvmMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.jvm.kt @@ -16,32 +16,34 @@ internal fun SentryOptions.toJvmSentryOptionsCallback(): (JvmSentryOptions) -> U * Applies the given base SentryOptions to this JvmSentryOption * This avoids code duplication during init on Android */ -internal fun JvmSentryOptions.applyJvmBaseOptions(options: SentryOptions) { - dsn = options.dsn - isAttachThreads = options.attachThreads - isAttachStacktrace = options.attachStackTrace - dist = options.dist - environment = options.environment - release = options.release - isDebug = options.debug - sessionTrackingIntervalMillis = options.sessionTrackingIntervalMillis - isEnableAutoSessionTracking = options.enableAutoSessionTracking - maxAttachmentSize = options.maxAttachmentSize - maxBreadcrumbs = options.maxBreadcrumbs - sampleRate = options.sampleRate - tracesSampleRate = options.tracesSampleRate - setBeforeBreadcrumb { jvmBreadcrumb, _ -> - if (options.beforeBreadcrumb == null) { +internal fun JvmSentryOptions.applyJvmBaseOptions(kmpOptions: SentryOptions) { + val jvmOptions = this + jvmOptions.dsn = kmpOptions.dsn + jvmOptions.isAttachThreads = kmpOptions.attachThreads + jvmOptions.isAttachStacktrace = kmpOptions.attachStackTrace + jvmOptions.dist = kmpOptions.dist + jvmOptions.environment = kmpOptions.environment + jvmOptions.release = kmpOptions.release + jvmOptions.isDebug = kmpOptions.debug + jvmOptions.sessionTrackingIntervalMillis = kmpOptions.sessionTrackingIntervalMillis + jvmOptions.isEnableAutoSessionTracking = kmpOptions.enableAutoSessionTracking + jvmOptions.maxAttachmentSize = kmpOptions.maxAttachmentSize + jvmOptions.maxBreadcrumbs = kmpOptions.maxBreadcrumbs + jvmOptions.sampleRate = kmpOptions.sampleRate + jvmOptions.tracesSampleRate = kmpOptions.tracesSampleRate + jvmOptions.setDiagnosticLevel(kmpOptions.diagnosticLevel.toJvmSentryLevel()) + jvmOptions.setBeforeBreadcrumb { jvmBreadcrumb, _ -> + if (kmpOptions.beforeBreadcrumb == null) { jvmBreadcrumb } else { - options.beforeBreadcrumb?.invoke(jvmBreadcrumb.toKmpBreadcrumb())?.toJvmBreadcrumb() + kmpOptions.beforeBreadcrumb?.invoke(jvmBreadcrumb.toKmpBreadcrumb())?.toJvmBreadcrumb() } } - setBeforeSend { jvmSentryEvent, hint -> - if (options.beforeSend == null) { + jvmOptions.setBeforeSend { jvmSentryEvent, hint -> + if (kmpOptions.beforeSend == null) { jvmSentryEvent } else { - options.beforeSend?.invoke(SentryEvent(jvmSentryEvent))?.let { + kmpOptions.beforeSend?.invoke(SentryEvent(jvmSentryEvent))?.let { jvmSentryEvent.applyKmpEvent(it) } } diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 2d8df290..58c082f3 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -70,6 +70,8 @@ public open class SentryOptions { /** Information about the Sentry SDK that generated this event. */ public var sdk: SdkVersion? = null + public var diagnosticLevel: SentryLevel = SentryLevel.DEBUG + /** This variable controls the total amount of breadcrumbs that should be captured. Default is 100. */ public var maxBreadcrumbs: Int = DEFAULT_MAX_BREADCRUMBS From a04b7b7afc4873830349ee9e9a2a086a3f43109a Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Sat, 19 Oct 2024 20:38:14 +0200 Subject: [PATCH 2/8] update tests --- .../io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt | 4 ++++ .../kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt | 1 + .../io/sentry/kotlin/multiplatform/SentryOptionsTest.kt | 3 +++ .../io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt | 4 ++++ 4 files changed, 12 insertions(+) diff --git a/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt b/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt index 8ed826c6..5c9891d7 100644 --- a/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.apple.kt @@ -1,6 +1,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.kotlin.multiplatform.extensions.toCocoaOptionsConfiguration +import io.sentry.kotlin.multiplatform.extensions.toKmpSentryLevel import io.sentry.kotlin.multiplatform.utils.fakeDsn import kotlinx.cinterop.convert import kotlin.test.assertEquals @@ -50,6 +51,9 @@ open class SentryAppleOptionsWrapper(private val cocoaOptions: CocoaSentryOption override val enableWatchdogTerminationTracking: Boolean get() = cocoaOptions.enableWatchdogTerminationTracking + override val diagnosticLevel: SentryLevel + get() = cocoaOptions.diagnosticLevel.toKmpSentryLevel()!! + override fun applyFromOptions(options: SentryOptions) { options.toCocoaOptionsConfiguration().invoke(cocoaOptions) } diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt index 9bf680cb..b89952f9 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.kt @@ -6,6 +6,7 @@ interface CommonPlatformOptions { val release: String? val debug: Boolean val environment: String? + val diagnosticLevel: SentryLevel val dist: String? val enableAutoSessionTracking: Boolean val sessionTrackingIntervalMillis: Long diff --git a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt index 044d97e1..73bb53ae 100644 --- a/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt +++ b/sentry-kotlin-multiplatform/src/commonTest/kotlin/io/sentry/kotlin/multiplatform/SentryOptionsTest.kt @@ -114,6 +114,7 @@ class SentryOptionsTest : BaseSentryTest() { assertNull(options.beforeBreadcrumb) assertNull(options.beforeSend) assertNull(options.sdk) + assertEquals(SentryLevel.DEBUG, options.diagnosticLevel) assertEquals(DEFAULT_MAX_BREADCRUMBS, options.maxBreadcrumbs) assertEquals(DEFAULT_MAX_ATTACHMENT_SIZE, options.maxAttachmentSize) assertFalse(options.attachViewHierarchy) @@ -145,6 +146,7 @@ class SentryOptionsTest : BaseSentryTest() { dist = "dist" enableAutoSessionTracking = false sessionTrackingIntervalMillis = 1000L + diagnosticLevel = SentryLevel.ERROR maxBreadcrumbs = 10 maxAttachmentSize = 100L sampleRate = 0.5 @@ -178,6 +180,7 @@ class SentryOptionsTest : BaseSentryTest() { assertEquals(100L, platformOptions.maxAttachmentSize) assertEquals(0.5, platformOptions.sampleRate) assertEquals(0.5, platformOptions.tracesSampleRate) + assertEquals(SentryLevel.ERROR, platformOptions.diagnosticLevel) platformOptions.assertPlatformSpecificOptions(options) } diff --git a/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt b/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt index 965b3fa5..7a3afecf 100644 --- a/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt +++ b/sentry-kotlin-multiplatform/src/jvmTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.jvm.kt @@ -1,6 +1,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.kotlin.multiplatform.extensions.toJvmSentryOptionsCallback +import io.sentry.kotlin.multiplatform.extensions.toKmpSentryLevel import io.sentry.kotlin.multiplatform.utils.fakeDsn actual interface PlatformOptions : CommonPlatformOptions @@ -42,6 +43,9 @@ class SentryJvmOptionsWrapper(private val jvmOptions: JvmSentryOptions) : Platfo override val tracesSampleRate: Double? get() = jvmOptions.tracesSampleRate + override val diagnosticLevel: SentryLevel + get() = jvmOptions.diagnosticLevel.toKmpSentryLevel()!! + override fun applyFromOptions(options: SentryOptions) { options.toJvmSentryOptionsCallback().invoke(jvmOptions) } From 91f4430f301a4b440591dcfe319609f454e605ca Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Mon, 21 Oct 2024 14:23:14 +0200 Subject: [PATCH 3/8] update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4da50109..c8945a80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ Sentry.init { options -> ``` - Add `Sentry.isEnabled()` API to common code ([#273](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/273)) - Add `enableWatchdogTerminationTracking` in common options ([#281](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/281)) +- Add `diagnosticLevel` in common options ([#287](https://github.com/getsentry/sentry-kotlin-multiplatform/pull/287)) ### Dependencies From fb7fd8835ab7caa6fb47ad93fbfe2dab38b353b8 Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Tue, 22 Oct 2024 17:51:23 +0200 Subject: [PATCH 4/8] update --- .../io/sentry/kotlin/multiplatform/PlatformOptions.android.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt b/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt index 9afd3bc1..09bfb3f2 100644 --- a/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt +++ b/sentry-kotlin-multiplatform/src/androidUnitTest/kotlin/io/sentry/kotlin/multiplatform/PlatformOptions.android.kt @@ -2,6 +2,7 @@ package io.sentry.kotlin.multiplatform import io.sentry.android.core.SentryAndroidOptions import io.sentry.kotlin.multiplatform.extensions.toAndroidSentryOptionsCallback +import io.sentry.kotlin.multiplatform.extensions.toKmpSentryLevel import io.sentry.kotlin.multiplatform.utils.fakeDsn import kotlin.test.assertContains import kotlin.test.assertEquals @@ -30,6 +31,9 @@ class SentryAndroidOptionsWrapper(private val androidOptions: SentryAndroidOptio override val debug: Boolean get() = androidOptions.isDebug + override val diagnosticLevel: SentryLevel + get() = androidOptions.diagnosticLevel.toKmpSentryLevel()!! + override val environment: String? get() = androidOptions.environment From 4160a83e52d453f8891c732f30c74eba6f9874e6 Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Wed, 23 Oct 2024 16:25:23 +0200 Subject: [PATCH 5/8] update diagnostic doc --- .../kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index 58c082f3..bdc9baee 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -70,6 +70,7 @@ public open class SentryOptions { /** Information about the Sentry SDK that generated this event. */ public var sdk: SdkVersion? = null + /** Sets the minimum LogLevel if null, it uses the default min. Default is [SentryLevel.DEBUG] */ public var diagnosticLevel: SentryLevel = SentryLevel.DEBUG /** This variable controls the total amount of breadcrumbs that should be captured. Default is 100. */ From 961f3b5a0935465e6464e4c2e25c809663d17d88 Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Wed, 23 Oct 2024 16:27:03 +0200 Subject: [PATCH 6/8] update --- .../kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt index bdc9baee..a76ecb7b 100644 --- a/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt +++ b/sentry-kotlin-multiplatform/src/commonMain/kotlin/io/sentry/kotlin/multiplatform/SentryOptions.kt @@ -70,7 +70,7 @@ public open class SentryOptions { /** Information about the Sentry SDK that generated this event. */ public var sdk: SdkVersion? = null - /** Sets the minimum LogLevel if null, it uses the default min. Default is [SentryLevel.DEBUG] */ + /** Sets the minimum log level. Default is [SentryLevel.DEBUG] */ public var diagnosticLevel: SentryLevel = SentryLevel.DEBUG /** This variable controls the total amount of breadcrumbs that should be captured. Default is 100. */ From 16410634bc2ff411e2b4733cb019a5c287804ec2 Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Wed, 23 Oct 2024 23:30:25 +0200 Subject: [PATCH 7/8] update binary compat --- .../api/android/sentry-kotlin-multiplatform.api | 2 ++ .../api/jvm/sentry-kotlin-multiplatform.api | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api index 8f91313e..bcc670c4 100644 --- a/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/android/sentry-kotlin-multiplatform.api @@ -169,6 +169,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun getBeforeBreadcrumb ()Lkotlin/jvm/functions/Function1; public final fun getBeforeSend ()Lkotlin/jvm/functions/Function1; public final fun getDebug ()Z + public final fun getDiagnosticLevel ()Lio/sentry/kotlin/multiplatform/SentryLevel; public final fun getDist ()Ljava/lang/String; public final fun getDsn ()Ljava/lang/String; public final fun getEnableAppHangTracking ()Z @@ -197,6 +198,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun setBeforeBreadcrumb (Lkotlin/jvm/functions/Function1;)V public final fun setBeforeSend (Lkotlin/jvm/functions/Function1;)V public final fun setDebug (Z)V + public final fun setDiagnosticLevel (Lio/sentry/kotlin/multiplatform/SentryLevel;)V public final fun setDist (Ljava/lang/String;)V public final fun setDsn (Ljava/lang/String;)V public final fun setEnableAppHangTracking (Z)V diff --git a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api index 34b8653d..5c2b139d 100644 --- a/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api +++ b/sentry-kotlin-multiplatform/api/jvm/sentry-kotlin-multiplatform.api @@ -166,6 +166,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun getBeforeBreadcrumb ()Lkotlin/jvm/functions/Function1; public final fun getBeforeSend ()Lkotlin/jvm/functions/Function1; public final fun getDebug ()Z + public final fun getDiagnosticLevel ()Lio/sentry/kotlin/multiplatform/SentryLevel; public final fun getDist ()Ljava/lang/String; public final fun getDsn ()Ljava/lang/String; public final fun getEnableAppHangTracking ()Z @@ -194,6 +195,7 @@ public class io/sentry/kotlin/multiplatform/SentryOptions { public final fun setBeforeBreadcrumb (Lkotlin/jvm/functions/Function1;)V public final fun setBeforeSend (Lkotlin/jvm/functions/Function1;)V public final fun setDebug (Z)V + public final fun setDiagnosticLevel (Lio/sentry/kotlin/multiplatform/SentryLevel;)V public final fun setDist (Ljava/lang/String;)V public final fun setDsn (Ljava/lang/String;)V public final fun setEnableAppHangTracking (Z)V From 9d3c10a9754e560985a831be2e6e0bf0086a90c8 Mon Sep 17 00:00:00 2001 From: GIancarlo Buenaflor Date: Thu, 24 Oct 2024 00:29:15 +0200 Subject: [PATCH 8/8] format --- .../multiplatform/extensions/SentryOptionsExtensions.apple.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt index d812de23..d7c488a0 100644 --- a/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt +++ b/sentry-kotlin-multiplatform/src/appleMain/kotlin/io/sentry/kotlin/multiplatform/extensions/SentryOptionsExtensions.apple.kt @@ -32,7 +32,7 @@ internal fun CocoaSentryOptions.applyCocoaBaseOptions(kmpOptions: SentryOptions) cocoaOptions.enableAppHangTracking = kmpOptions.enableAppHangTracking cocoaOptions.enableWatchdogTerminationTracking = kmpOptions.enableWatchdogTerminationTracking cocoaOptions.appHangTimeoutInterval = kmpOptions.appHangTimeoutIntervalMillis.toDouble() - cocoaOptions.diagnosticLevel = kmpOptions.diagnosticLevel.toCocoaSentryLevel(); + cocoaOptions.diagnosticLevel = kmpOptions.diagnosticLevel.toCocoaSentryLevel() kmpOptions.sampleRate?.let { cocoaOptions.sampleRate = NSNumber(double = it) }