From 17c7c40945e3b7ceed98032c1460bd8403729472 Mon Sep 17 00:00:00 2001 From: Nikita Ogorodnikov Date: Thu, 7 Dec 2023 16:18:29 +0100 Subject: [PATCH] RUM-1823: Add buildId to the RUM error and Log events --- dd-sdk-android-core/api/apiSurface | 2 +- .../api/dd-sdk-android-core.api | 10 +- .../android/api/context/DatadogContext.kt | 2 + .../android/core/internal/CoreFeature.kt | 39 +++- .../core/internal/DatadogContextProvider.kt | 1 + .../core/internal/NoOpContextProvider.kt | 1 + .../android/core/internal/CoreFeatureTest.kt | 103 +++++++++ .../internal/DatadogContextProviderTest.kt | 1 + .../lifecycle/ProcessLifecycleCallbackTest.kt | 3 + .../ApplicationContextTestConfiguration.kt | 16 +- .../config/CoreFeatureTestConfiguration.kt | 4 + .../elmyr/DatadogContextForgeryFactory.kt | 2 + detekt_custom.yml | 5 + features/dd-sdk-android-logs/api/apiSurface | 2 +- .../api/dd-sdk-android-logs.api | 12 +- .../src/main/json/log/log-schema.json | 5 + .../internal/domain/DatadogLogGenerator.kt | 3 + .../android/log/assertj/LogEventAssert.kt | 10 + .../android/log/internal/LogsFeatureTest.kt | 6 + .../domain/DatadogLogGeneratorTest.kt | 20 ++ .../internal/logger/DatadogLogHandlerTest.kt | 8 + .../utils/forge/LogEventForgeryFactory.kt | 2 + features/dd-sdk-android-rum/api/apiSurface | 10 +- .../api/dd-sdk-android-rum.api | 200 +++++++++--------- .../src/main/json/rum/_common-schema.json | 5 + .../rum/internal/DatadogLateCrashReporter.kt | 2 + .../internal/domain/scope/RumResourceScope.kt | 1 + .../rum/internal/domain/scope/RumViewScope.kt | 1 + .../android/rum/assertj/ErrorEventAssert.kt | 10 + .../internal/DatadogLateCrashReporterTest.kt | 7 + .../domain/scope/RumResourceScopeTest.kt | 12 ++ .../internal/domain/scope/RumViewScopeTest.kt | 15 ++ .../utils/forge/ErrorEventForgeryFactory.kt | 1 + .../utils/forge/ErrorEventForgeryFactory.kt | 1 + 34 files changed, 409 insertions(+), 113 deletions(-) diff --git a/dd-sdk-android-core/api/apiSurface b/dd-sdk-android-core/api/apiSurface index bd6973bcc0..a722e0513c 100644 --- a/dd-sdk-android-core/api/apiSurface +++ b/dd-sdk-android-core/api/apiSurface @@ -56,7 +56,7 @@ interface com.datadog.android.api.SdkCore fun addUserProperties(Map) fun clearAllData() data class com.datadog.android.api.context.DatadogContext - constructor(com.datadog.android.DatadogSite, String, String, String, String, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, com.datadog.android.privacy.TrackingConsent, Map>) + constructor(com.datadog.android.DatadogSite, String, String, String, String, String, String, String, TimeInfo, ProcessInfo, NetworkInfo, DeviceInfo, UserInfo, com.datadog.android.privacy.TrackingConsent, String?, Map>) data class com.datadog.android.api.context.DeviceInfo constructor(String, String, String, DeviceType, String, String, String, String, String) enum com.datadog.android.api.context.DeviceType diff --git a/dd-sdk-android-core/api/dd-sdk-android-core.api b/dd-sdk-android-core/api/dd-sdk-android-core.api index 0bb4b7493f..efd9a3bb1c 100644 --- a/dd-sdk-android-core/api/dd-sdk-android-core.api +++ b/dd-sdk-android-core/api/dd-sdk-android-core.api @@ -122,14 +122,15 @@ public final class com/datadog/android/api/SdkCore$DefaultImpls { } public final class com/datadog/android/api/context/DatadogContext { - public fun (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/util/Map;)V + public fun (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)V public final fun component1 ()Lcom/datadog/android/DatadogSite; public final fun component10 ()Lcom/datadog/android/api/context/ProcessInfo; public final fun component11 ()Lcom/datadog/android/api/context/NetworkInfo; public final fun component12 ()Lcom/datadog/android/api/context/DeviceInfo; public final fun component13 ()Lcom/datadog/android/api/context/UserInfo; public final fun component14 ()Lcom/datadog/android/privacy/TrackingConsent; - public final fun component15 ()Ljava/util/Map; + public final fun component15 ()Ljava/lang/String; + public final fun component16 ()Ljava/util/Map; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; @@ -138,9 +139,10 @@ public final class com/datadog/android/api/context/DatadogContext { public final fun component7 ()Ljava/lang/String; public final fun component8 ()Ljava/lang/String; public final fun component9 ()Lcom/datadog/android/api/context/TimeInfo; - public final fun copy (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/util/Map;)Lcom/datadog/android/api/context/DatadogContext; - public static synthetic fun copy$default (Lcom/datadog/android/api/context/DatadogContext;Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/DatadogContext; + public final fun copy (Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/api/context/DatadogContext; + public static synthetic fun copy$default (Lcom/datadog/android/api/context/DatadogContext;Lcom/datadog/android/DatadogSite;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/api/context/TimeInfo;Lcom/datadog/android/api/context/ProcessInfo;Lcom/datadog/android/api/context/NetworkInfo;Lcom/datadog/android/api/context/DeviceInfo;Lcom/datadog/android/api/context/UserInfo;Lcom/datadog/android/privacy/TrackingConsent;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/api/context/DatadogContext; public fun equals (Ljava/lang/Object;)Z + public final fun getAppBuildId ()Ljava/lang/String; public final fun getClientToken ()Ljava/lang/String; public final fun getDeviceInfo ()Lcom/datadog/android/api/context/DeviceInfo; public final fun getEnv ()Ljava/lang/String; diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/context/DatadogContext.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/context/DatadogContext.kt index 6f1a3719e7..72a5ed3672 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/context/DatadogContext.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/api/context/DatadogContext.kt @@ -30,6 +30,7 @@ import com.datadog.android.privacy.TrackingConsent * @property deviceInfo information about device * @property userInfo information about the current user * @property trackingConsent information about the current tracking consent + * @property appBuildId unique build ID of the running application. Will be missing if Datadog Gradle Plugin is not applied or obfuscation is not enabled for the running build. * @property featuresContext agnostic dictionary with information from all features registered to * the parent SDK instance */ @@ -48,5 +49,6 @@ data class DatadogContext( val deviceInfo: DeviceInfo, val userInfo: UserInfo, val trackingConsent: TrackingConsent, + val appBuildId: String?, val featuresContext: Map> ) diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt index 37cbd69b90..479105ac77 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt @@ -91,6 +91,7 @@ import okhttp3.OkHttpClient import okhttp3.Protocol import okhttp3.TlsVersion import java.io.File +import java.io.FileNotFoundException import java.lang.ref.WeakReference import java.util.Locale import java.util.concurrent.ConcurrentHashMap @@ -137,6 +138,7 @@ internal class CoreFeature( internal var batchProcessingLevel: BatchProcessingLevel = BatchProcessingLevel.MEDIUM internal var ndkCrashHandler: NdkCrashHandler = NoOpNdkCrashHandler() internal var site: DatadogSite = DatadogSite.US1 + internal var appBuildId: String? = null internal lateinit var uploadExecutorService: ScheduledThreadPoolExecutor internal lateinit var persistenceExecutorService: FlushableExecutorService @@ -446,6 +448,8 @@ internal class CoreFeature( serviceName = configuration.service ?: appContext.packageName envName = configuration.env variant = configuration.variant + appBuildId = readBuildId(appContext) + contextRef = WeakReference(appContext) } @@ -455,7 +459,6 @@ internal class CoreFeature( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0)) } else { - @Suppress("DEPRECATION") getPackageInfo(packageName, 0) } } @@ -470,6 +473,31 @@ internal class CoreFeature( } } + private fun readBuildId(context: Context): String? { + return with(context.assets) { + try { + open(BUILD_ID_FILE_NAME).bufferedReader().use { + it.readText().trim() + } + } catch (@Suppress("SwallowedException") e: FileNotFoundException) { + internalLogger.log( + InternalLogger.Level.INFO, + InternalLogger.Target.USER, + { BUILD_ID_IS_MISSING_INFO_MESSAGE } + ) + null + } catch (@Suppress("TooGenericExceptionCaught") e: Exception) { + internalLogger.log( + InternalLogger.Level.ERROR, + targets = listOf(InternalLogger.Target.USER, InternalLogger.Target.TELEMETRY), + { BUILD_ID_READ_ERROR }, + e + ) + null + } + } + } + private fun readConfigurationSettings(configuration: Configuration.Core) { batchSize = configuration.batchSize uploadFrequency = configuration.uploadFrequency @@ -668,6 +696,15 @@ internal class CoreFeature( internal const val LAST_RUM_VIEW_EVENT_FILE_NAME = "last_view_event" internal const val LAST_FATAL_ANR_SENT_FILE_NAME = "last_fatal_anr_sent" + // should be the same as in dd-sdk-android-gradle-plugin + internal const val BUILD_ID_FILE_NAME = "datadog.buildId" + internal const val BUILD_ID_IS_MISSING_INFO_MESSAGE = + "Build ID is not found in the application" + + " assets. If you are using obfuscation, please use Datadog Gradle Plugin 1.13.0" + + " or above to be able to de-obfuscate stacktraces." + internal const val BUILD_ID_READ_ERROR = + "Failed to read Build ID information, de-obfuscation may not work properly." + internal val RESTRICTED_CIPHER_SUITES = arrayOf( // TLS 1.3 diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/DatadogContextProvider.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/DatadogContextProvider.kt index 1ce81e559f..9f2d651c40 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/DatadogContextProvider.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/DatadogContextProvider.kt @@ -56,6 +56,7 @@ internal class DatadogContextProvider(val coreFeature: CoreFeature) : ContextPro }, userInfo = coreFeature.userInfoProvider.getUserInfo(), trackingConsent = coreFeature.trackingConsentProvider.getConsent(), + appBuildId = coreFeature.appBuildId, // toMap call here (and in getFeatureContext) is VERY important - this will make // independent snapshot of the features context which is not affected by the // changes which can be made later by another thread. diff --git a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/NoOpContextProvider.kt b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/NoOpContextProvider.kt index dc68d917dc..45f158e82a 100644 --- a/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/NoOpContextProvider.kt +++ b/dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/NoOpContextProvider.kt @@ -47,6 +47,7 @@ internal class NoOpContextProvider : ContextProvider { deviceInfo = DeviceInfo("", "", "", DeviceType.OTHER, "", "", "", "", ""), userInfo = UserInfo(null, null, null, emptyMap()), trackingConsent = TrackingConsent.NOT_GRANTED, + appBuildId = null, featuresContext = emptyMap() ) diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt index f595b38eaa..21efdd21c4 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt @@ -41,6 +41,7 @@ import com.datadog.android.privacy.TrackingConsent import com.datadog.android.security.Encryption import com.datadog.android.utils.config.ApplicationContextTestConfiguration import com.datadog.android.utils.forge.Configurator +import com.datadog.android.utils.verifyLog import com.datadog.tools.unit.annotations.TestConfigurationsProvider import com.datadog.tools.unit.annotations.TestTargetApi import com.datadog.tools.unit.assertj.containsInstanceOf @@ -86,8 +87,13 @@ import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.mockito.quality.Strictness import java.io.File +import java.io.FileNotFoundException +import java.io.IOException +import java.io.InputStream +import java.lang.RuntimeException import java.net.Proxy import java.util.Locale +import java.util.UUID import java.util.concurrent.LinkedBlockingQueue import java.util.concurrent.ScheduledExecutorService import java.util.concurrent.ScheduledThreadPoolExecutor @@ -130,6 +136,9 @@ internal class CoreFeatureTest { @StringForgery(type = StringForgeryType.ALPHA_NUMERICAL) lateinit var fakeSdkInstanceId: String + @Forgery + lateinit var fakeBuildId: UUID + @BeforeEach fun `set up`() { CoreFeature.disableKronosBackgroundSync = true @@ -141,6 +150,9 @@ internal class CoreFeatureTest { ) whenever(appContext.mockInstance.getSystemService(Context.CONNECTIVITY_SERVICE)) .doReturn(mockConnectivityMgr) + whenever( + appContext.mockInstance.assets.open(CoreFeature.BUILD_ID_FILE_NAME) + ) doReturn fakeBuildId.toString().byteInputStream() whenever(mockPersistenceExecutorService.execute(any())) doAnswer { it.getArgument(0).run() } @@ -478,6 +490,97 @@ internal class CoreFeatureTest { assertThat(testedFeature.uploadFrequency).isEqualTo(fakeConfig.coreConfig.uploadFrequency) } + @Test + fun `𝕄 initializes build ID 𝕎 initialize()`() { + // When + testedFeature.initialize( + appContext.mockInstance, + fakeSdkInstanceId, + fakeConfig, + fakeConsent + ) + + // Then + assertThat(testedFeature.appBuildId).isEqualTo(fakeBuildId.toString()) + } + + @Test + fun `𝕄 initializes build ID 𝕎 initialize() { asset manager is closed }`() { + // Given + whenever( + appContext.mockInstance.assets.open(CoreFeature.BUILD_ID_FILE_NAME) + ) doThrow RuntimeException() + + // When + testedFeature.initialize( + appContext.mockInstance, + fakeSdkInstanceId, + fakeConfig, + fakeConsent + ) + + // Then + assertThat(testedFeature.appBuildId).isNull() + mockInternalLogger.verifyLog( + InternalLogger.Level.ERROR, + targets = listOf(InternalLogger.Target.USER, InternalLogger.Target.TELEMETRY), + message = CoreFeature.BUILD_ID_READ_ERROR, + throwableClass = RuntimeException::class.java + ) + } + + @Test + fun `𝕄 initializes build ID 𝕎 initialize() { build ID file is missing }`() { + // Given + whenever( + appContext.mockInstance.assets.open(CoreFeature.BUILD_ID_FILE_NAME) + ) doThrow FileNotFoundException() + + // When + testedFeature.initialize( + appContext.mockInstance, + fakeSdkInstanceId, + fakeConfig, + fakeConsent + ) + + // Then + assertThat(testedFeature.appBuildId).isNull() + mockInternalLogger.verifyLog( + InternalLogger.Level.INFO, + InternalLogger.Target.USER, + CoreFeature.BUILD_ID_IS_MISSING_INFO_MESSAGE + ) + } + + @Test + fun `𝕄 initializes build ID 𝕎 initialize() { IOException during build ID read }`() { + // Given + val mockBrokenStream = mock().apply { + whenever(read(any())) doThrow IOException() + } + whenever( + appContext.mockInstance.assets.open(CoreFeature.BUILD_ID_FILE_NAME) + ) doReturn mockBrokenStream + + // When + testedFeature.initialize( + appContext.mockInstance, + fakeSdkInstanceId, + fakeConfig, + fakeConsent + ) + + // Then + assertThat(testedFeature.appBuildId).isNull() + mockInternalLogger.verifyLog( + InternalLogger.Level.ERROR, + targets = listOf(InternalLogger.Target.USER, InternalLogger.Target.TELEMETRY), + message = CoreFeature.BUILD_ID_READ_ERROR, + throwableClass = IOException::class.java + ) + } + @Test fun `𝕄 initialize okhttp with strict network policy 𝕎 initialize()`() { // When diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/DatadogContextProviderTest.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/DatadogContextProviderTest.kt index 266d462178..9f48e95976 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/DatadogContextProviderTest.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/DatadogContextProviderTest.kt @@ -151,6 +151,7 @@ internal class DatadogContextProviderTest { assertThat(context.userInfo.additionalProperties) .isEqualTo(fakeUserInfo.additionalProperties) + assertThat(context.appBuildId).isEqualTo(coreFeature.mockInstance.appBuildId) assertThat(context.trackingConsent).isEqualTo(fakeTrackingConsent) assertThat(context.featuresContext).isEqualTo(coreFeature.mockInstance.featuresContext) diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallbackTest.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallbackTest.kt index 8b00a205ea..003b7cb47c 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallbackTest.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/lifecycle/ProcessLifecycleCallbackTest.kt @@ -15,10 +15,12 @@ import com.datadog.android.core.internal.data.upload.UploadWorker import com.datadog.android.core.internal.utils.TAG_DATADOG_UPLOAD import com.datadog.android.core.internal.utils.UPLOAD_WORKER_NAME import com.datadog.android.utils.config.ApplicationContextTestConfiguration +import com.datadog.android.utils.forge.Configurator import com.datadog.tools.unit.annotations.TestConfigurationsProvider import com.datadog.tools.unit.extensions.TestConfigurationExtension import com.datadog.tools.unit.extensions.config.TestConfiguration import com.datadog.tools.unit.setStaticValue +import fr.xgouchet.elmyr.junit5.ForgeConfiguration import fr.xgouchet.elmyr.junit5.ForgeExtension import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach @@ -45,6 +47,7 @@ import org.mockito.quality.Strictness ExtendWith(TestConfigurationExtension::class) ) @MockitoSettings(strictness = Strictness.LENIENT) +@ForgeConfiguration(Configurator::class) internal class ProcessLifecycleCallbackTest { lateinit var testedCallback: ProcessLifecycleCallback diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/ApplicationContextTestConfiguration.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/ApplicationContextTestConfiguration.kt index 97080617e8..2b69af3e20 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/ApplicationContextTestConfiguration.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/ApplicationContextTestConfiguration.kt @@ -10,6 +10,8 @@ import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageManager +import android.content.res.AssetManager +import com.datadog.android.core.internal.CoreFeature import com.datadog.tools.unit.extensions.config.MockTestConfiguration import fr.xgouchet.elmyr.Forge import org.mockito.kotlin.any @@ -18,6 +20,7 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.whenever import java.io.File import java.nio.file.Files +import java.util.UUID internal open class ApplicationContextTestConfiguration(klass: Class) : MockTestConfiguration(klass) { @@ -26,10 +29,12 @@ internal open class ApplicationContextTestConfiguration(klass: Clas lateinit var fakeVersionName: String var fakeVersionCode: Int = 0 lateinit var fakeVariant: String + lateinit var fakeBuildId: String lateinit var fakePackageInfo: PackageInfo lateinit var fakeAppInfo: ApplicationInfo lateinit var mockPackageManager: PackageManager + lateinit var mockAssetManager: AssetManager lateinit var fakeSandboxDir: File lateinit var fakeCacheDir: File @@ -42,11 +47,13 @@ internal open class ApplicationContextTestConfiguration(klass: Clas createFakeInfo(forge) mockPackageManager() + mockAssetManager() whenever(mockInstance.applicationContext) doReturn mockInstance whenever(mockInstance.packageManager) doReturn mockPackageManager whenever(mockInstance.packageName) doReturn fakePackageName whenever(mockInstance.applicationInfo) doReturn fakeAppInfo + whenever(mockInstance.assets) doReturn mockAssetManager // ??? whenever(mockInstance.getSystemService(Context.ACTIVITY_SERVICE)) doReturn mock() @@ -74,6 +81,7 @@ internal open class ApplicationContextTestConfiguration(klass: Clas fakeVersionName = forge.aStringMatching("[0-9](\\.[0-9]{1,3}){2,3}") fakeVersionCode = forge.anInt(1, 65536) fakeVariant = forge.anElementFrom(forge.anAlphabeticalString(), "") + fakeBuildId = forge.getForgery().toString() fakePackageInfo = PackageInfo() fakePackageInfo.packageName = fakePackageName @@ -93,9 +101,15 @@ internal open class ApplicationContextTestConfiguration(klass: Clas PackageManager.PackageInfoFlags.of(0) ) ) doReturn fakePackageInfo - @Suppress("DEPRECATION") whenever(mockPackageManager.getPackageInfo(fakePackageName, 0)) doReturn fakePackageInfo } + private fun mockAssetManager() { + mockAssetManager = mock() + whenever( + mockAssetManager.open(CoreFeature.BUILD_ID_FILE_NAME) + ) doReturn fakeBuildId.byteInputStream() + } + // endregion } diff --git a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/CoreFeatureTestConfiguration.kt b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/CoreFeatureTestConfiguration.kt index d2949036db..cafd056a47 100644 --- a/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/CoreFeatureTestConfiguration.kt +++ b/dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/CoreFeatureTestConfiguration.kt @@ -35,6 +35,7 @@ import java.io.File import java.lang.ref.WeakReference import java.nio.file.Files import java.util.Locale +import java.util.UUID import java.util.concurrent.ScheduledThreadPoolExecutor internal class CoreFeatureTestConfiguration( @@ -52,6 +53,7 @@ internal class CoreFeatureTestConfiguration( lateinit var fakeFeaturesContext: MutableMap> lateinit var fakeFilePersistenceConfig: FilePersistenceConfig lateinit var fakeBatchSize: BatchSize + var fakeBuildId: String? = null lateinit var mockUploadExecutor: ScheduledThreadPoolExecutor lateinit var mockOkHttpClient: OkHttpClient @@ -102,6 +104,7 @@ internal class CoreFeatureTestConfiguration( }.toMutableMap() fakeFilePersistenceConfig = forge.getForgery() fakeBatchSize = forge.aValueFrom(BatchSize::class.java) + fakeBuildId = forge.aNullable { getForgery().toString() } } private fun createMocks() { @@ -136,6 +139,7 @@ internal class CoreFeatureTestConfiguration( whenever(mockInstance.storageDir) doReturn fakeStorageDir whenever(mockInstance.uploadFrequency) doReturn fakeUploadFrequency whenever(mockInstance.site) doReturn fakeSite + whenever(mockInstance.appBuildId) doReturn fakeBuildId whenever(mockInstance.featuresContext) doReturn fakeFeaturesContext whenever(mockInstance.persistenceExecutorService) doReturn mockPersistenceExecutor diff --git a/dd-sdk-android-core/src/testFixtures/kotlin/com/datadog/android/tests/elmyr/DatadogContextForgeryFactory.kt b/dd-sdk-android-core/src/testFixtures/kotlin/com/datadog/android/tests/elmyr/DatadogContextForgeryFactory.kt index 6fe53633d6..b3d105a388 100644 --- a/dd-sdk-android-core/src/testFixtures/kotlin/com/datadog/android/tests/elmyr/DatadogContextForgeryFactory.kt +++ b/dd-sdk-android-core/src/testFixtures/kotlin/com/datadog/android/tests/elmyr/DatadogContextForgeryFactory.kt @@ -12,6 +12,7 @@ import com.datadog.android.privacy.TrackingConsent import fr.xgouchet.elmyr.Forge import fr.xgouchet.elmyr.ForgeryFactory import java.util.Locale +import java.util.UUID class DatadogContextForgeryFactory : ForgeryFactory { @@ -31,6 +32,7 @@ class DatadogContextForgeryFactory : ForgeryFactory { deviceInfo = forge.getForgery(), userInfo = forge.getForgery(), trackingConsent = forge.aValueFrom(TrackingConsent::class.java), + appBuildId = forge.aNullable { getForgery().toString() }, // building nested maps with default size slows down tests quite a lot, so will use // an explicit small size featuresContext = forge.aMap(size = 2) { diff --git a/detekt_custom.yml b/detekt_custom.yml index a3b47043ca..7c08721e29 100644 --- a/detekt_custom.yml +++ b/detekt_custom.yml @@ -105,6 +105,7 @@ datadog: - "android.app.ActivityManager.getHistoricalProcessExitReasons(kotlin.String?, kotlin.Int, kotlin.Int):java.lang.RuntimeException" - "android.content.pm.PackageManager.getPackageInfo(kotlin.String, android.content.pm.PackageManager.PackageInfoFlags):android.content.pm.PackageManager.NameNotFoundException" - "android.content.pm.PackageManager.getPackageInfo(kotlin.String, kotlin.Int):android.content.pm.PackageManager.NameNotFoundException" + - "android.content.res.AssetManager.open(kotlin.String):java.io.IOException" - "android.content.res.Resources.getResourceEntryName(kotlin.Int):android.content.res.Resources.NotFoundException" - "android.content.res.Resources.getResourceName(kotlin.Int):android.content.res.Resources.NotFoundException" - "android.content.res.Resources.openRawResource(kotlin.Int):android.content.res.Resources.NotFoundException" @@ -683,6 +684,8 @@ datadog: - "java.util.concurrent.atomic.AtomicReference.set(kotlin.String?)" # endregion # region Java I/O + - "java.io.BufferedReader.readText()" + - "java.io.BufferedReader.use(kotlin.Function1)" - "java.io.ByteArrayOutputStream.constructor()" - "java.io.ByteArrayOutputStream.constructor(kotlin.Int)" - "java.io.ByteArrayOutputStream.size()" @@ -717,6 +720,7 @@ datadog: - "java.io.File.safeCall(kotlin.collections.List?, com.datadog.android.api.InternalLogger, kotlin.Function1)" - "java.io.File.safeCall(kotlin.Unit?, com.datadog.android.api.InternalLogger, kotlin.Function1)" - "java.io.File.writeTextSafe(kotlin.String, java.nio.charset.Charset, com.datadog.android.api.InternalLogger)" + - "java.io.InputStream.bufferedReader(java.nio.charset.Charset)" - "java.io.InputStream.mark(kotlin.Int)" - "java.io.InputStream.markSupported()" - "java.io.InputStream.reader(java.nio.charset.Charset)" @@ -1156,6 +1160,7 @@ datadog: - "kotlin.String.toMediaTypeOrNull()" - "kotlin.String.toMethod()" - "kotlin.String.toOperationType(com.datadog.android.api.InternalLogger)" + - "kotlin.String.trim()" - "kotlin.String.trimStart()" - "kotlin.String.uppercase(java.util.Locale)" - "kotlin.String.withSdkName()" diff --git a/features/dd-sdk-android-logs/api/apiSurface b/features/dd-sdk-android-logs/api/apiSurface index 946e8cade6..8817e3d727 100644 --- a/features/dd-sdk-android-logs/api/apiSurface +++ b/features/dd-sdk-android-logs/api/apiSurface @@ -35,7 +35,7 @@ data class com.datadog.android.log.LogsConfiguration fun setEventMapper(com.datadog.android.event.EventMapper): Builder fun build(): LogsConfiguration data class com.datadog.android.log.model.LogEvent - constructor(Status, kotlin.String, kotlin.String, kotlin.String, Logger, Dd, Usr? = null, Network? = null, Error? = null, kotlin.String, kotlin.collections.MutableMap = mutableMapOf()) + constructor(Status, kotlin.String, kotlin.String, kotlin.String, Logger, Dd, Usr? = null, Network? = null, Error? = null, kotlin.String? = null, kotlin.String, kotlin.collections.MutableMap = mutableMapOf()) fun toJson(): com.google.gson.JsonElement companion object fun fromJson(kotlin.String): LogEvent diff --git a/features/dd-sdk-android-logs/api/dd-sdk-android-logs.api b/features/dd-sdk-android-logs/api/dd-sdk-android-logs.api index 6c39861a70..a271c9f4b0 100644 --- a/features/dd-sdk-android-logs/api/dd-sdk-android-logs.api +++ b/features/dd-sdk-android-logs/api/dd-sdk-android-logs.api @@ -86,11 +86,12 @@ public final class com/datadog/android/log/LogsConfiguration$Builder { public final class com/datadog/android/log/model/LogEvent { public static final field Companion Lcom/datadog/android/log/model/LogEvent$Companion; - public fun (Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/util/Map;)V - public synthetic fun (Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V + public synthetic fun (Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()Lcom/datadog/android/log/model/LogEvent$Status; public final fun component10 ()Ljava/lang/String; - public final fun component11 ()Ljava/util/Map; + public final fun component11 ()Ljava/lang/String; + public final fun component12 ()Ljava/util/Map; public final fun component2 ()Ljava/lang/String; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; @@ -99,12 +100,13 @@ public final class com/datadog/android/log/model/LogEvent { public final fun component7 ()Lcom/datadog/android/log/model/LogEvent$Usr; public final fun component8 ()Lcom/datadog/android/log/model/LogEvent$Network; public final fun component9 ()Lcom/datadog/android/log/model/LogEvent$Error; - public final fun copy (Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent; - public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent; + public final fun copy (Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lcom/datadog/android/log/model/LogEvent; + public static synthetic fun copy$default (Lcom/datadog/android/log/model/LogEvent;Lcom/datadog/android/log/model/LogEvent$Status;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/log/model/LogEvent$Logger;Lcom/datadog/android/log/model/LogEvent$Dd;Lcom/datadog/android/log/model/LogEvent$Usr;Lcom/datadog/android/log/model/LogEvent$Network;Lcom/datadog/android/log/model/LogEvent$Error;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;ILjava/lang/Object;)Lcom/datadog/android/log/model/LogEvent; public fun equals (Ljava/lang/Object;)Z public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/log/model/LogEvent; public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/log/model/LogEvent; public final fun getAdditionalProperties ()Ljava/util/Map; + public final fun getBuildId ()Ljava/lang/String; public final fun getDate ()Ljava/lang/String; public final fun getDd ()Lcom/datadog/android/log/model/LogEvent$Dd; public final fun getDdtags ()Ljava/lang/String; diff --git a/features/dd-sdk-android-logs/src/main/json/log/log-schema.json b/features/dd-sdk-android-logs/src/main/json/log/log-schema.json index 297f8d28d0..b775590f2e 100644 --- a/features/dd-sdk-android-logs/src/main/json/log/log-schema.json +++ b/features/dd-sdk-android-logs/src/main/json/log/log-schema.json @@ -221,6 +221,11 @@ }, "readOnly": true }, + "build_id": { + "type": "string", + "description": "Generated unique ID of the application build. Unlike version or build_version this field is not meant to be coming from the user, but rather generated by the tooling for each build.", + "readOnly": true + }, "ddtags": { "type": "string", "description": "The list of tags joined into a String and divided by ',' ", diff --git a/features/dd-sdk-android-logs/src/main/kotlin/com/datadog/android/log/internal/domain/DatadogLogGenerator.kt b/features/dd-sdk-android-logs/src/main/kotlin/com/datadog/android/log/internal/domain/DatadogLogGenerator.kt index 7c95ca2b11..8341dec6fc 100644 --- a/features/dd-sdk-android-logs/src/main/kotlin/com/datadog/android/log/internal/domain/DatadogLogGenerator.kt +++ b/features/dd-sdk-android-logs/src/main/kotlin/com/datadog/android/log/internal/domain/DatadogLogGenerator.kt @@ -179,6 +179,9 @@ internal class DatadogLogGenerator( status = resolveLogLevelStatus(level), message = message, date = formattedDate, + // TODO RUM-3832 If NDK crash, the it should be a value from previous build + // (or whatever distinguishes debug symbols for native libs) + buildId = datadogContext.appBuildId, error = error, logger = loggerInfo, dd = LogEvent.Dd( diff --git a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/assertj/LogEventAssert.kt b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/assertj/LogEventAssert.kt index 1bb39f7c21..523cb5168d 100644 --- a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/assertj/LogEventAssert.kt +++ b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/assertj/LogEventAssert.kt @@ -233,6 +233,16 @@ internal class LogEventAssert(actual: LogEvent) : return this } + fun hasBuildId(buildId: String?): LogEventAssert { + assertThat(actual.buildId) + .overridingErrorMessage( + "Expected LogEvent to have build ID: $buildId" + + " but instead was ${actual.buildId}" + ) + .isEqualTo(buildId) + return this + } + companion object { private val dateFormatter = diff --git a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/LogsFeatureTest.kt b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/LogsFeatureTest.kt index c827008eb1..f7b976c632 100644 --- a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/LogsFeatureTest.kt +++ b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/LogsFeatureTest.kt @@ -405,6 +405,7 @@ internal class LogsFeatureTest { .hasDate((fakeTimestamp + fakeServerTimeOffset).toIsoFormattedTimestamp()) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -529,6 +530,7 @@ internal class LogsFeatureTest { .hasDate((fakeTimestamp + fakeServerTimeOffset).toIsoFormattedTimestamp()) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -681,6 +683,7 @@ internal class LogsFeatureTest { .hasDate((fakeTimestamp + fakeServerTimeOffset).toIsoFormattedTimestamp()) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes(fakeAttributes) .hasExactlyTags( setOf( @@ -730,6 +733,7 @@ internal class LogsFeatureTest { .hasDate((fakeTimestamp + fakeServerTimeOffset).toIsoFormattedTimestamp()) .hasUserInfo(fakeDatadogContext.userInfo) .hasNetworkInfo(fakeNetworkInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes(fakeAttributes) .hasExactlyTags( setOf( @@ -779,6 +783,7 @@ internal class LogsFeatureTest { .hasDate((fakeTimestamp + fakeServerTimeOffset).toIsoFormattedTimestamp()) .hasUserInfo(fakeUserInfo) .hasNetworkInfo(fakeDatadogContext.networkInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes(fakeAttributes) .hasExactlyTags( setOf( @@ -885,6 +890,7 @@ internal class LogsFeatureTest { .hasDate((fakeTimestamp + fakeServerTimeOffset).toIsoFormattedTimestamp()) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, diff --git a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/domain/DatadogLogGeneratorTest.kt b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/domain/DatadogLogGeneratorTest.kt index 48b5777789..f862526d41 100644 --- a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/domain/DatadogLogGeneratorTest.kt +++ b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/domain/DatadogLogGeneratorTest.kt @@ -266,6 +266,26 @@ internal class DatadogLogGeneratorTest { assertThat(log).hasThreadName(fakeThreadName) } + @Test + fun `M add build ID W creating the Log`() { + // WHEN + val log = testedLogGenerator.generateLog( + fakeLevel, + fakeLogMessage, + fakeThrowable, + fakeAttributes, + fakeTags, + fakeTimestamp, + fakeThreadName, + fakeDatadogContext, + attachNetworkInfo = true, + fakeLoggerName + ) + + // THEN + assertThat(log).hasBuildId(fakeDatadogContext.appBuildId) + } + @Test fun `M add the log timestamp and correct the server offset W creating the Log`() { // WHEN diff --git a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/logger/DatadogLogHandlerTest.kt b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/logger/DatadogLogHandlerTest.kt index bc5c76de44..b780a5e6df 100644 --- a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/logger/DatadogLogHandlerTest.kt +++ b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/log/internal/logger/DatadogLogHandlerTest.kt @@ -180,6 +180,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -252,6 +253,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -308,6 +310,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -543,6 +546,7 @@ internal class DatadogLogHandlerTest { .hasDate((customTimestamp + serverTimeOffsetMs).toIsoFormattedTimestamp()) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -595,6 +599,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -645,6 +650,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .doesNotHaveNetworkInfo() .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, @@ -704,6 +710,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .doesNotHaveNetworkInfo() .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes(emptyMap()) .hasExactlyTags( setOf( @@ -993,6 +1000,7 @@ internal class DatadogLogHandlerTest { .hasDateAround(now) .hasNetworkInfo(fakeDatadogContext.networkInfo) .hasUserInfo(fakeDatadogContext.userInfo) + .hasBuildId(fakeDatadogContext.appBuildId) .hasExactlyAttributes( fakeAttributes + mapOf( LogAttributes.RUM_APPLICATION_ID to fakeRumApplicationId, diff --git a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/utils/forge/LogEventForgeryFactory.kt b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/utils/forge/LogEventForgeryFactory.kt index b63e0a7a63..00c0b15c92 100644 --- a/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/utils/forge/LogEventForgeryFactory.kt +++ b/features/dd-sdk-android-logs/src/test/kotlin/com/datadog/android/utils/forge/LogEventForgeryFactory.kt @@ -13,6 +13,7 @@ import com.datadog.tools.unit.forge.aThrowable import com.datadog.tools.unit.forge.exhaustiveAttributes import fr.xgouchet.elmyr.Forge import fr.xgouchet.elmyr.ForgeryFactory +import java.util.UUID internal class LogEventForgeryFactory : ForgeryFactory { override fun getForgery(forge: Forge): LogEvent { @@ -29,6 +30,7 @@ internal class LogEventForgeryFactory : ForgeryFactory { status = forge.aValueFrom(LogEvent.Status::class.java), message = forge.anAlphabeticalString(), date = forge.aFormattedTimestamp(), + buildId = forge.aNullable { getForgery().toString() }, error = forge.aNullable { val throwable = forge.aNullable { aThrowable() } LogEvent.Error( diff --git a/features/dd-sdk-android-rum/api/apiSurface b/features/dd-sdk-android-rum/api/apiSurface index ebc142cc36..f62f78f285 100644 --- a/features/dd-sdk-android-rum/api/apiSurface +++ b/features/dd-sdk-android-rum/api/apiSurface @@ -268,7 +268,7 @@ data class com.datadog.android.rum.model.ActionChildProperties fun fromJson(kotlin.String): Action fun fromJsonObject(com.google.gson.JsonObject): Action data class com.datadog.android.rum.model.ActionEvent - constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ActionEventSession, ActionEventSource? = null, ActionEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Container? = null, ActionEventAction) + constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ActionEventSession, ActionEventSource? = null, ActionEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Container? = null, ActionEventAction) val type: kotlin.String fun toJson(): com.google.gson.JsonElement companion object @@ -548,7 +548,7 @@ data class com.datadog.android.rum.model.ActionEvent companion object fun fromJson(kotlin.String): Type data class com.datadog.android.rum.model.ErrorEvent - constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ErrorEventSession, ErrorEventSource? = null, ErrorEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Action? = null, Container? = null, Error, Context? = null) + constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ErrorEventSession, ErrorEventSource? = null, ErrorEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Action? = null, Container? = null, Error, Context? = null) val type: kotlin.String fun toJson(): com.google.gson.JsonElement companion object @@ -869,7 +869,7 @@ data class com.datadog.android.rum.model.ErrorEvent companion object fun fromJson(kotlin.String): ProviderType data class com.datadog.android.rum.model.LongTaskEvent - constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, LongTaskEventSession, LongTaskEventSource? = null, LongTaskEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Action? = null, Container? = null, LongTask) + constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, LongTaskEventSession, LongTaskEventSource? = null, LongTaskEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Action? = null, Container? = null, LongTask) val type: kotlin.String fun toJson(): com.google.gson.JsonElement companion object @@ -1079,7 +1079,7 @@ data class com.datadog.android.rum.model.LongTaskEvent companion object fun fromJson(kotlin.String): SessionPrecondition data class com.datadog.android.rum.model.ResourceEvent - constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ResourceEventSession, ResourceEventSource? = null, ResourceEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Action? = null, Container? = null, Resource) + constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ResourceEventSession, ResourceEventSource? = null, ResourceEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Action? = null, Container? = null, Resource) val type: kotlin.String fun toJson(): com.google.gson.JsonElement companion object @@ -1430,7 +1430,7 @@ data class com.datadog.android.rum.model.ViewContainerSchema companion object fun fromJson(kotlin.String): Source data class com.datadog.android.rum.model.ViewEvent - constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ViewEventSession, ViewEventSource? = null, ViewEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Container? = null, Context? = null, Privacy? = null) + constructor(kotlin.Long, Application, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, kotlin.String? = null, ViewEventSession, ViewEventSource? = null, ViewEventView, Usr? = null, Connectivity? = null, Display? = null, Synthetics? = null, CiTest? = null, Os? = null, Device? = null, Dd, Context? = null, Container? = null, Context? = null, Privacy? = null) val type: kotlin.String fun toJson(): com.google.gson.JsonElement companion object diff --git a/features/dd-sdk-android-rum/api/dd-sdk-android-rum.api b/features/dd-sdk-android-rum/api/dd-sdk-android-rum.api index 81c50e51b2..11f29f19d6 100644 --- a/features/dd-sdk-android-rum/api/dd-sdk-android-rum.api +++ b/features/dd-sdk-android-rum/api/dd-sdk-android-rum.api @@ -332,34 +332,36 @@ public final class com/datadog/android/rum/model/ActionChildProperties$Companion public final class com/datadog/android/rum/model/ActionEvent { public static final field Companion Lcom/datadog/android/rum/model/ActionEvent$Companion; - public fun (JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;)V - public synthetic fun (JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;)V + public synthetic fun (JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()J - public final fun component10 ()Lcom/datadog/android/rum/model/ActionEvent$Connectivity; - public final fun component11 ()Lcom/datadog/android/rum/model/ActionEvent$Display; - public final fun component12 ()Lcom/datadog/android/rum/model/ActionEvent$Synthetics; - public final fun component13 ()Lcom/datadog/android/rum/model/ActionEvent$CiTest; - public final fun component14 ()Lcom/datadog/android/rum/model/ActionEvent$Os; - public final fun component15 ()Lcom/datadog/android/rum/model/ActionEvent$Device; - public final fun component16 ()Lcom/datadog/android/rum/model/ActionEvent$Dd; - public final fun component17 ()Lcom/datadog/android/rum/model/ActionEvent$Context; - public final fun component18 ()Lcom/datadog/android/rum/model/ActionEvent$Container; - public final fun component19 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction; + public final fun component10 ()Lcom/datadog/android/rum/model/ActionEvent$Usr; + public final fun component11 ()Lcom/datadog/android/rum/model/ActionEvent$Connectivity; + public final fun component12 ()Lcom/datadog/android/rum/model/ActionEvent$Display; + public final fun component13 ()Lcom/datadog/android/rum/model/ActionEvent$Synthetics; + public final fun component14 ()Lcom/datadog/android/rum/model/ActionEvent$CiTest; + public final fun component15 ()Lcom/datadog/android/rum/model/ActionEvent$Os; + public final fun component16 ()Lcom/datadog/android/rum/model/ActionEvent$Device; + public final fun component17 ()Lcom/datadog/android/rum/model/ActionEvent$Dd; + public final fun component18 ()Lcom/datadog/android/rum/model/ActionEvent$Context; + public final fun component19 ()Lcom/datadog/android/rum/model/ActionEvent$Container; public final fun component2 ()Lcom/datadog/android/rum/model/ActionEvent$Application; + public final fun component20 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; public final fun component5 ()Ljava/lang/String; - public final fun component6 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession; - public final fun component7 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource; - public final fun component8 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventView; - public final fun component9 ()Lcom/datadog/android/rum/model/ActionEvent$Usr; - public final fun copy (JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;)Lcom/datadog/android/rum/model/ActionEvent; - public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ActionEvent;JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ActionEvent; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession; + public final fun component8 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource; + public final fun component9 ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventView; + public final fun copy (JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;)Lcom/datadog/android/rum/model/ActionEvent; + public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ActionEvent;JLcom/datadog/android/rum/model/ActionEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSession;Lcom/datadog/android/rum/model/ActionEvent$ActionEventSource;Lcom/datadog/android/rum/model/ActionEvent$ActionEventView;Lcom/datadog/android/rum/model/ActionEvent$Usr;Lcom/datadog/android/rum/model/ActionEvent$Connectivity;Lcom/datadog/android/rum/model/ActionEvent$Display;Lcom/datadog/android/rum/model/ActionEvent$Synthetics;Lcom/datadog/android/rum/model/ActionEvent$CiTest;Lcom/datadog/android/rum/model/ActionEvent$Os;Lcom/datadog/android/rum/model/ActionEvent$Device;Lcom/datadog/android/rum/model/ActionEvent$Dd;Lcom/datadog/android/rum/model/ActionEvent$Context;Lcom/datadog/android/rum/model/ActionEvent$Container;Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ActionEvent; public fun equals (Ljava/lang/Object;)Z public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/rum/model/ActionEvent; public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/rum/model/ActionEvent; public final fun getAction ()Lcom/datadog/android/rum/model/ActionEvent$ActionEventAction; public final fun getApplication ()Lcom/datadog/android/rum/model/ActionEvent$Application; + public final fun getBuildId ()Ljava/lang/String; public final fun getBuildVersion ()Ljava/lang/String; public final fun getCiTest ()Lcom/datadog/android/rum/model/ActionEvent$CiTest; public final fun getConnectivity ()Lcom/datadog/android/rum/model/ActionEvent$Connectivity; @@ -1235,36 +1237,38 @@ public final class com/datadog/android/rum/model/ActionEvent$Viewport$Companion public final class com/datadog/android/rum/model/ErrorEvent { public static final field Companion Lcom/datadog/android/rum/model/ErrorEvent$Companion; - public fun (JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;)V - public synthetic fun (JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;)V + public synthetic fun (JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()J - public final fun component10 ()Lcom/datadog/android/rum/model/ErrorEvent$Connectivity; - public final fun component11 ()Lcom/datadog/android/rum/model/ErrorEvent$Display; - public final fun component12 ()Lcom/datadog/android/rum/model/ErrorEvent$Synthetics; - public final fun component13 ()Lcom/datadog/android/rum/model/ErrorEvent$CiTest; - public final fun component14 ()Lcom/datadog/android/rum/model/ErrorEvent$Os; - public final fun component15 ()Lcom/datadog/android/rum/model/ErrorEvent$Device; - public final fun component16 ()Lcom/datadog/android/rum/model/ErrorEvent$Dd; - public final fun component17 ()Lcom/datadog/android/rum/model/ErrorEvent$Context; - public final fun component18 ()Lcom/datadog/android/rum/model/ErrorEvent$Action; - public final fun component19 ()Lcom/datadog/android/rum/model/ErrorEvent$Container; + public final fun component10 ()Lcom/datadog/android/rum/model/ErrorEvent$Usr; + public final fun component11 ()Lcom/datadog/android/rum/model/ErrorEvent$Connectivity; + public final fun component12 ()Lcom/datadog/android/rum/model/ErrorEvent$Display; + public final fun component13 ()Lcom/datadog/android/rum/model/ErrorEvent$Synthetics; + public final fun component14 ()Lcom/datadog/android/rum/model/ErrorEvent$CiTest; + public final fun component15 ()Lcom/datadog/android/rum/model/ErrorEvent$Os; + public final fun component16 ()Lcom/datadog/android/rum/model/ErrorEvent$Device; + public final fun component17 ()Lcom/datadog/android/rum/model/ErrorEvent$Dd; + public final fun component18 ()Lcom/datadog/android/rum/model/ErrorEvent$Context; + public final fun component19 ()Lcom/datadog/android/rum/model/ErrorEvent$Action; public final fun component2 ()Lcom/datadog/android/rum/model/ErrorEvent$Application; - public final fun component20 ()Lcom/datadog/android/rum/model/ErrorEvent$Error; - public final fun component21 ()Lcom/datadog/android/rum/model/ErrorEvent$Context; + public final fun component20 ()Lcom/datadog/android/rum/model/ErrorEvent$Container; + public final fun component21 ()Lcom/datadog/android/rum/model/ErrorEvent$Error; + public final fun component22 ()Lcom/datadog/android/rum/model/ErrorEvent$Context; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; public final fun component5 ()Ljava/lang/String; - public final fun component6 ()Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession; - public final fun component7 ()Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource; - public final fun component8 ()Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView; - public final fun component9 ()Lcom/datadog/android/rum/model/ErrorEvent$Usr; - public final fun copy (JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;)Lcom/datadog/android/rum/model/ErrorEvent; - public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ErrorEvent;JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ErrorEvent; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession; + public final fun component8 ()Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource; + public final fun component9 ()Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView; + public final fun copy (JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;)Lcom/datadog/android/rum/model/ErrorEvent; + public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ErrorEvent;JLcom/datadog/android/rum/model/ErrorEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSession;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventSource;Lcom/datadog/android/rum/model/ErrorEvent$ErrorEventView;Lcom/datadog/android/rum/model/ErrorEvent$Usr;Lcom/datadog/android/rum/model/ErrorEvent$Connectivity;Lcom/datadog/android/rum/model/ErrorEvent$Display;Lcom/datadog/android/rum/model/ErrorEvent$Synthetics;Lcom/datadog/android/rum/model/ErrorEvent$CiTest;Lcom/datadog/android/rum/model/ErrorEvent$Os;Lcom/datadog/android/rum/model/ErrorEvent$Device;Lcom/datadog/android/rum/model/ErrorEvent$Dd;Lcom/datadog/android/rum/model/ErrorEvent$Context;Lcom/datadog/android/rum/model/ErrorEvent$Action;Lcom/datadog/android/rum/model/ErrorEvent$Container;Lcom/datadog/android/rum/model/ErrorEvent$Error;Lcom/datadog/android/rum/model/ErrorEvent$Context;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ErrorEvent; public fun equals (Ljava/lang/Object;)Z public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/rum/model/ErrorEvent; public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/rum/model/ErrorEvent; public final fun getAction ()Lcom/datadog/android/rum/model/ErrorEvent$Action; public final fun getApplication ()Lcom/datadog/android/rum/model/ErrorEvent$Application; + public final fun getBuildId ()Ljava/lang/String; public final fun getBuildVersion ()Ljava/lang/String; public final fun getCiTest ()Lcom/datadog/android/rum/model/ErrorEvent$CiTest; public final fun getConnectivity ()Lcom/datadog/android/rum/model/ErrorEvent$Connectivity; @@ -2245,35 +2249,37 @@ public final class com/datadog/android/rum/model/ErrorEvent$Viewport$Companion { public final class com/datadog/android/rum/model/LongTaskEvent { public static final field Companion Lcom/datadog/android/rum/model/LongTaskEvent$Companion; - public fun (JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;)V - public synthetic fun (JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;)V + public synthetic fun (JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()J - public final fun component10 ()Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity; - public final fun component11 ()Lcom/datadog/android/rum/model/LongTaskEvent$Display; - public final fun component12 ()Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics; - public final fun component13 ()Lcom/datadog/android/rum/model/LongTaskEvent$CiTest; - public final fun component14 ()Lcom/datadog/android/rum/model/LongTaskEvent$Os; - public final fun component15 ()Lcom/datadog/android/rum/model/LongTaskEvent$Device; - public final fun component16 ()Lcom/datadog/android/rum/model/LongTaskEvent$Dd; - public final fun component17 ()Lcom/datadog/android/rum/model/LongTaskEvent$Context; - public final fun component18 ()Lcom/datadog/android/rum/model/LongTaskEvent$Action; - public final fun component19 ()Lcom/datadog/android/rum/model/LongTaskEvent$Container; + public final fun component10 ()Lcom/datadog/android/rum/model/LongTaskEvent$Usr; + public final fun component11 ()Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity; + public final fun component12 ()Lcom/datadog/android/rum/model/LongTaskEvent$Display; + public final fun component13 ()Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics; + public final fun component14 ()Lcom/datadog/android/rum/model/LongTaskEvent$CiTest; + public final fun component15 ()Lcom/datadog/android/rum/model/LongTaskEvent$Os; + public final fun component16 ()Lcom/datadog/android/rum/model/LongTaskEvent$Device; + public final fun component17 ()Lcom/datadog/android/rum/model/LongTaskEvent$Dd; + public final fun component18 ()Lcom/datadog/android/rum/model/LongTaskEvent$Context; + public final fun component19 ()Lcom/datadog/android/rum/model/LongTaskEvent$Action; public final fun component2 ()Lcom/datadog/android/rum/model/LongTaskEvent$Application; - public final fun component20 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTask; + public final fun component20 ()Lcom/datadog/android/rum/model/LongTaskEvent$Container; + public final fun component21 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTask; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; public final fun component5 ()Ljava/lang/String; - public final fun component6 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession; - public final fun component7 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource; - public final fun component8 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView; - public final fun component9 ()Lcom/datadog/android/rum/model/LongTaskEvent$Usr; - public final fun copy (JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;)Lcom/datadog/android/rum/model/LongTaskEvent; - public static synthetic fun copy$default (Lcom/datadog/android/rum/model/LongTaskEvent;JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;ILjava/lang/Object;)Lcom/datadog/android/rum/model/LongTaskEvent; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession; + public final fun component8 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource; + public final fun component9 ()Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView; + public final fun copy (JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;)Lcom/datadog/android/rum/model/LongTaskEvent; + public static synthetic fun copy$default (Lcom/datadog/android/rum/model/LongTaskEvent;JLcom/datadog/android/rum/model/LongTaskEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSession;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventSource;Lcom/datadog/android/rum/model/LongTaskEvent$LongTaskEventView;Lcom/datadog/android/rum/model/LongTaskEvent$Usr;Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity;Lcom/datadog/android/rum/model/LongTaskEvent$Display;Lcom/datadog/android/rum/model/LongTaskEvent$Synthetics;Lcom/datadog/android/rum/model/LongTaskEvent$CiTest;Lcom/datadog/android/rum/model/LongTaskEvent$Os;Lcom/datadog/android/rum/model/LongTaskEvent$Device;Lcom/datadog/android/rum/model/LongTaskEvent$Dd;Lcom/datadog/android/rum/model/LongTaskEvent$Context;Lcom/datadog/android/rum/model/LongTaskEvent$Action;Lcom/datadog/android/rum/model/LongTaskEvent$Container;Lcom/datadog/android/rum/model/LongTaskEvent$LongTask;ILjava/lang/Object;)Lcom/datadog/android/rum/model/LongTaskEvent; public fun equals (Ljava/lang/Object;)Z public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/rum/model/LongTaskEvent; public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/rum/model/LongTaskEvent; public final fun getAction ()Lcom/datadog/android/rum/model/LongTaskEvent$Action; public final fun getApplication ()Lcom/datadog/android/rum/model/LongTaskEvent$Application; + public final fun getBuildId ()Ljava/lang/String; public final fun getBuildVersion ()Ljava/lang/String; public final fun getCiTest ()Lcom/datadog/android/rum/model/LongTaskEvent$CiTest; public final fun getConnectivity ()Lcom/datadog/android/rum/model/LongTaskEvent$Connectivity; @@ -2927,35 +2933,37 @@ public final class com/datadog/android/rum/model/LongTaskEvent$Viewport$Companio public final class com/datadog/android/rum/model/ResourceEvent { public static final field Companion Lcom/datadog/android/rum/model/ResourceEvent$Companion; - public fun (JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;)V - public synthetic fun (JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;)V + public synthetic fun (JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()J - public final fun component10 ()Lcom/datadog/android/rum/model/ResourceEvent$Connectivity; - public final fun component11 ()Lcom/datadog/android/rum/model/ResourceEvent$Display; - public final fun component12 ()Lcom/datadog/android/rum/model/ResourceEvent$Synthetics; - public final fun component13 ()Lcom/datadog/android/rum/model/ResourceEvent$CiTest; - public final fun component14 ()Lcom/datadog/android/rum/model/ResourceEvent$Os; - public final fun component15 ()Lcom/datadog/android/rum/model/ResourceEvent$Device; - public final fun component16 ()Lcom/datadog/android/rum/model/ResourceEvent$Dd; - public final fun component17 ()Lcom/datadog/android/rum/model/ResourceEvent$Context; - public final fun component18 ()Lcom/datadog/android/rum/model/ResourceEvent$Action; - public final fun component19 ()Lcom/datadog/android/rum/model/ResourceEvent$Container; + public final fun component10 ()Lcom/datadog/android/rum/model/ResourceEvent$Usr; + public final fun component11 ()Lcom/datadog/android/rum/model/ResourceEvent$Connectivity; + public final fun component12 ()Lcom/datadog/android/rum/model/ResourceEvent$Display; + public final fun component13 ()Lcom/datadog/android/rum/model/ResourceEvent$Synthetics; + public final fun component14 ()Lcom/datadog/android/rum/model/ResourceEvent$CiTest; + public final fun component15 ()Lcom/datadog/android/rum/model/ResourceEvent$Os; + public final fun component16 ()Lcom/datadog/android/rum/model/ResourceEvent$Device; + public final fun component17 ()Lcom/datadog/android/rum/model/ResourceEvent$Dd; + public final fun component18 ()Lcom/datadog/android/rum/model/ResourceEvent$Context; + public final fun component19 ()Lcom/datadog/android/rum/model/ResourceEvent$Action; public final fun component2 ()Lcom/datadog/android/rum/model/ResourceEvent$Application; - public final fun component20 ()Lcom/datadog/android/rum/model/ResourceEvent$Resource; + public final fun component20 ()Lcom/datadog/android/rum/model/ResourceEvent$Container; + public final fun component21 ()Lcom/datadog/android/rum/model/ResourceEvent$Resource; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; public final fun component5 ()Ljava/lang/String; - public final fun component6 ()Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession; - public final fun component7 ()Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource; - public final fun component8 ()Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView; - public final fun component9 ()Lcom/datadog/android/rum/model/ResourceEvent$Usr; - public final fun copy (JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;)Lcom/datadog/android/rum/model/ResourceEvent; - public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ResourceEvent;JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ResourceEvent; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession; + public final fun component8 ()Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource; + public final fun component9 ()Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView; + public final fun copy (JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;)Lcom/datadog/android/rum/model/ResourceEvent; + public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ResourceEvent;JLcom/datadog/android/rum/model/ResourceEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSession;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventSource;Lcom/datadog/android/rum/model/ResourceEvent$ResourceEventView;Lcom/datadog/android/rum/model/ResourceEvent$Usr;Lcom/datadog/android/rum/model/ResourceEvent$Connectivity;Lcom/datadog/android/rum/model/ResourceEvent$Display;Lcom/datadog/android/rum/model/ResourceEvent$Synthetics;Lcom/datadog/android/rum/model/ResourceEvent$CiTest;Lcom/datadog/android/rum/model/ResourceEvent$Os;Lcom/datadog/android/rum/model/ResourceEvent$Device;Lcom/datadog/android/rum/model/ResourceEvent$Dd;Lcom/datadog/android/rum/model/ResourceEvent$Context;Lcom/datadog/android/rum/model/ResourceEvent$Action;Lcom/datadog/android/rum/model/ResourceEvent$Container;Lcom/datadog/android/rum/model/ResourceEvent$Resource;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ResourceEvent; public fun equals (Ljava/lang/Object;)Z public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/rum/model/ResourceEvent; public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/rum/model/ResourceEvent; public final fun getAction ()Lcom/datadog/android/rum/model/ResourceEvent$Action; public final fun getApplication ()Lcom/datadog/android/rum/model/ResourceEvent$Application; + public final fun getBuildId ()Ljava/lang/String; public final fun getBuildVersion ()Ljava/lang/String; public final fun getCiTest ()Lcom/datadog/android/rum/model/ResourceEvent$CiTest; public final fun getConnectivity ()Lcom/datadog/android/rum/model/ResourceEvent$Connectivity; @@ -4022,34 +4030,36 @@ public final class com/datadog/android/rum/model/ViewContainerSchema$View$Compan public final class com/datadog/android/rum/model/ViewEvent { public static final field Companion Lcom/datadog/android/rum/model/ViewEvent$Companion; - public fun (JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;)V - public synthetic fun (JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;)V + public synthetic fun (JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public final fun component1 ()J - public final fun component10 ()Lcom/datadog/android/rum/model/ViewEvent$Connectivity; - public final fun component11 ()Lcom/datadog/android/rum/model/ViewEvent$Display; - public final fun component12 ()Lcom/datadog/android/rum/model/ViewEvent$Synthetics; - public final fun component13 ()Lcom/datadog/android/rum/model/ViewEvent$CiTest; - public final fun component14 ()Lcom/datadog/android/rum/model/ViewEvent$Os; - public final fun component15 ()Lcom/datadog/android/rum/model/ViewEvent$Device; - public final fun component16 ()Lcom/datadog/android/rum/model/ViewEvent$Dd; - public final fun component17 ()Lcom/datadog/android/rum/model/ViewEvent$Context; - public final fun component18 ()Lcom/datadog/android/rum/model/ViewEvent$Container; - public final fun component19 ()Lcom/datadog/android/rum/model/ViewEvent$Context; + public final fun component10 ()Lcom/datadog/android/rum/model/ViewEvent$Usr; + public final fun component11 ()Lcom/datadog/android/rum/model/ViewEvent$Connectivity; + public final fun component12 ()Lcom/datadog/android/rum/model/ViewEvent$Display; + public final fun component13 ()Lcom/datadog/android/rum/model/ViewEvent$Synthetics; + public final fun component14 ()Lcom/datadog/android/rum/model/ViewEvent$CiTest; + public final fun component15 ()Lcom/datadog/android/rum/model/ViewEvent$Os; + public final fun component16 ()Lcom/datadog/android/rum/model/ViewEvent$Device; + public final fun component17 ()Lcom/datadog/android/rum/model/ViewEvent$Dd; + public final fun component18 ()Lcom/datadog/android/rum/model/ViewEvent$Context; + public final fun component19 ()Lcom/datadog/android/rum/model/ViewEvent$Container; public final fun component2 ()Lcom/datadog/android/rum/model/ViewEvent$Application; - public final fun component20 ()Lcom/datadog/android/rum/model/ViewEvent$Privacy; + public final fun component20 ()Lcom/datadog/android/rum/model/ViewEvent$Context; + public final fun component21 ()Lcom/datadog/android/rum/model/ViewEvent$Privacy; public final fun component3 ()Ljava/lang/String; public final fun component4 ()Ljava/lang/String; public final fun component5 ()Ljava/lang/String; - public final fun component6 ()Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession; - public final fun component7 ()Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource; - public final fun component8 ()Lcom/datadog/android/rum/model/ViewEvent$ViewEventView; - public final fun component9 ()Lcom/datadog/android/rum/model/ViewEvent$Usr; - public final fun copy (JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;)Lcom/datadog/android/rum/model/ViewEvent; - public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ViewEvent;JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ViewEvent; + public final fun component6 ()Ljava/lang/String; + public final fun component7 ()Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession; + public final fun component8 ()Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource; + public final fun component9 ()Lcom/datadog/android/rum/model/ViewEvent$ViewEventView; + public final fun copy (JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;)Lcom/datadog/android/rum/model/ViewEvent; + public static synthetic fun copy$default (Lcom/datadog/android/rum/model/ViewEvent;JLcom/datadog/android/rum/model/ViewEvent$Application;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSession;Lcom/datadog/android/rum/model/ViewEvent$ViewEventSource;Lcom/datadog/android/rum/model/ViewEvent$ViewEventView;Lcom/datadog/android/rum/model/ViewEvent$Usr;Lcom/datadog/android/rum/model/ViewEvent$Connectivity;Lcom/datadog/android/rum/model/ViewEvent$Display;Lcom/datadog/android/rum/model/ViewEvent$Synthetics;Lcom/datadog/android/rum/model/ViewEvent$CiTest;Lcom/datadog/android/rum/model/ViewEvent$Os;Lcom/datadog/android/rum/model/ViewEvent$Device;Lcom/datadog/android/rum/model/ViewEvent$Dd;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Container;Lcom/datadog/android/rum/model/ViewEvent$Context;Lcom/datadog/android/rum/model/ViewEvent$Privacy;ILjava/lang/Object;)Lcom/datadog/android/rum/model/ViewEvent; public fun equals (Ljava/lang/Object;)Z public static final fun fromJson (Ljava/lang/String;)Lcom/datadog/android/rum/model/ViewEvent; public static final fun fromJsonObject (Lcom/google/gson/JsonObject;)Lcom/datadog/android/rum/model/ViewEvent; public final fun getApplication ()Lcom/datadog/android/rum/model/ViewEvent$Application; + public final fun getBuildId ()Ljava/lang/String; public final fun getBuildVersion ()Ljava/lang/String; public final fun getCiTest ()Lcom/datadog/android/rum/model/ViewEvent$CiTest; public final fun getConnectivity ()Lcom/datadog/android/rum/model/ViewEvent$Connectivity; diff --git a/features/dd-sdk-android-rum/src/main/json/rum/_common-schema.json b/features/dd-sdk-android-rum/src/main/json/rum/_common-schema.json index e122d2b4be..4e330374c0 100644 --- a/features/dd-sdk-android-rum/src/main/json/rum/_common-schema.json +++ b/features/dd-sdk-android-rum/src/main/json/rum/_common-schema.json @@ -41,6 +41,11 @@ "description": "The build version for this application", "readOnly": true }, + "build_id": { + "type": "string", + "description": "Generated unique ID of the application build. Unlike version or build_version this field is not meant to be coming from the user, but rather generated by the tooling for each build.", + "readOnly": true + }, "session": { "type": "object", "description": "Session properties", diff --git a/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporter.kt b/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporter.kt index 679fca7eb1..4b9a96f5a7 100644 --- a/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporter.kt +++ b/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporter.kt @@ -192,7 +192,9 @@ internal class DatadogLateCrashReporter( val deviceInfo = datadogContext.deviceInfo return ErrorEvent( + // TODO RUM-3832 NDK/fatal ANRs reported should have build ID from the previous application run date = timestamp + datadogContext.time.serverTimeOffsetMs, + buildId = datadogContext.appBuildId, application = ErrorEvent.Application(viewEvent.application.id), service = viewEvent.service, session = ErrorEvent.ErrorEventSession( diff --git a/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScope.kt b/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScope.kt index 1eb717b3bf..0932f99cc6 100644 --- a/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScope.kt +++ b/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScope.kt @@ -365,6 +365,7 @@ internal class RumResourceScope( rumContext.viewId.orEmpty() ) ErrorEvent( + buildId = datadogContext.appBuildId, date = eventTimestamp, error = ErrorEvent.Error( message = message, diff --git a/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScope.kt b/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScope.kt index a166934370..e0cc6cf23f 100644 --- a/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScope.kt +++ b/features/dd-sdk-android-rum/src/main/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScope.kt @@ -418,6 +418,7 @@ internal open class RumViewScope( ErrorEvent.ErrorEventSessionType.SYNTHETICS } ErrorEvent( + buildId = datadogContext.appBuildId, date = event.eventTime.timestamp + serverTimeOffsetInMs, featureFlags = ErrorEvent.Context(eventFeatureFlags), error = ErrorEvent.Error( diff --git a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/assertj/ErrorEventAssert.kt b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/assertj/ErrorEventAssert.kt index 89247e9811..d9fc83fccc 100644 --- a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/assertj/ErrorEventAssert.kt +++ b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/assertj/ErrorEventAssert.kt @@ -601,6 +601,16 @@ internal class ErrorEventAssert(actual: ErrorEvent) : return this } + fun hasBuildId(buildId: String?): ErrorEventAssert { + assertThat(actual.buildId) + .overridingErrorMessage( + "Expected RUM event to have build ID: $buildId" + + " but instead was ${actual.buildId}" + ) + .isEqualTo(buildId) + return this + } + companion object { internal const val TIMESTAMP_THRESHOLD_MS = 50L internal fun assertThat(actual: ErrorEvent): ErrorEventAssert = diff --git a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporterTest.kt b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporterTest.kt index cbe0c22da7..4dc64e6a5a 100644 --- a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporterTest.kt +++ b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/DatadogLateCrashReporterTest.kt @@ -171,6 +171,7 @@ internal class DatadogLateCrashReporterTest { fakeViewEvent.view.name, fakeViewEvent.view.url ) + .hasBuildId(fakeDatadogContext.appBuildId) .hasMessage(crashMessage) .hasStackTrace(fakeStacktrace) .isCrash(true) @@ -271,6 +272,7 @@ internal class DatadogLateCrashReporterTest { fakeViewEvent.view.name, fakeViewEvent.view.url ) + .hasBuildId(fakeDatadogContext.appBuildId) .hasMessage(crashMessage) .hasStackTrace(fakeStacktrace) .isCrash(true) @@ -422,6 +424,7 @@ internal class DatadogLateCrashReporterTest { fakeViewEvent.view.name, fakeViewEvent.view.url ) + .hasBuildId(fakeDatadogContext.appBuildId) .hasMessage(crashMessage) .hasStackTrace(fakeStacktrace) .isCrash(true) @@ -512,6 +515,7 @@ internal class DatadogLateCrashReporterTest { ErrorEventAssert.assertThat(firstValue as ErrorEvent) .hasApplicationId(fakeViewEvent.application.id) .hasSessionId(fakeViewEvent.session.id) + .hasBuildId(fakeDatadogContext.appBuildId) .hasView( fakeViewEvent.view.id, fakeViewEvent.view.name, @@ -713,6 +717,7 @@ internal class DatadogLateCrashReporterTest { fakeViewEvent.view.name, fakeViewEvent.view.url ) + .hasBuildId(fakeDatadogContext.appBuildId) .hasMessage(ANRDetectorRunnable.ANR_MESSAGE) .hasStackTrace(fakeThreadsDump.first { it.name == "main" }.stack) .isCrash(true) @@ -802,6 +807,7 @@ internal class DatadogLateCrashReporterTest { fakeViewEvent.view.name, fakeViewEvent.view.url ) + .hasBuildId(fakeDatadogContext.appBuildId) .hasMessage(ANRDetectorRunnable.ANR_MESSAGE) .hasStackTrace(fakeThreadsDump.first { it.name == "main" }.stack) .isCrash(true) @@ -889,6 +895,7 @@ internal class DatadogLateCrashReporterTest { fakeViewEvent.view.name, fakeViewEvent.view.url ) + .hasBuildId(fakeDatadogContext.appBuildId) .hasMessage(ANRDetectorRunnable.ANR_MESSAGE) .hasStackTrace(fakeThreadsDump.first { it.name == "main" }.stack) .isCrash(true) diff --git a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScopeTest.kt b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScopeTest.kt index efc8a51a30..5ba1396942 100644 --- a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScopeTest.kt +++ b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumResourceScopeTest.kt @@ -1224,6 +1224,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1379,6 +1380,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1473,6 +1475,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1568,6 +1571,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1660,6 +1664,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1753,6 +1758,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1832,6 +1838,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1911,6 +1918,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -1989,6 +1997,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -2068,6 +2077,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -2152,6 +2162,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) @@ -2236,6 +2247,7 @@ internal class RumResourceScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verify(mockParentScope, never()).handleEvent(any(), any()) diff --git a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScopeTest.kt b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScopeTest.kt index c660ae14ee..be53a31575 100644 --- a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScopeTest.kt +++ b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/internal/domain/scope/RumViewScopeTest.kt @@ -4500,6 +4500,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -4580,6 +4581,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -4726,6 +4728,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -4800,6 +4803,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -4876,6 +4880,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -4930,6 +4935,7 @@ internal class RumViewScopeTest { hasUserSession() hasNoSyntheticsTest() hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -5008,6 +5014,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -5085,6 +5092,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -5163,6 +5171,7 @@ internal class RumViewScopeTest { hasConnectivityInfo(fakeDatadogContext.networkInfo) hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) + hasBuildId(fakeDatadogContext.appBuildId) } assertThat(lastValue as ViewEvent) .apply { @@ -5373,6 +5382,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -5453,6 +5463,7 @@ internal class RumViewScopeTest { hasConnectivityInfo(fakeDatadogContext.networkInfo) hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) + hasBuildId(fakeDatadogContext.appBuildId) } assertThat(lastValue as ViewEvent) .apply { @@ -5598,6 +5609,7 @@ internal class RumViewScopeTest { hasConnectivityInfo(fakeDatadogContext.networkInfo) hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) + hasBuildId(fakeDatadogContext.appBuildId) } assertThat(lastValue as ViewEvent) .apply { @@ -5728,6 +5740,7 @@ internal class RumViewScopeTest { hasConnectivityInfo(fakeDatadogContext.networkInfo) hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -5809,6 +5822,7 @@ internal class RumViewScopeTest { hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) hasSampleRate(fakeSampleRate) + hasBuildId(fakeDatadogContext.appBuildId) } } verifyNoMoreInteractions(mockWriter) @@ -5890,6 +5904,7 @@ internal class RumViewScopeTest { hasConnectivityInfo(fakeDatadogContext.networkInfo) hasServiceName(fakeDatadogContext.service) hasVersion(fakeDatadogContext.version) + hasBuildId(fakeDatadogContext.appBuildId) } assertThat(lastValue as ViewEvent) .apply { diff --git a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/utils/forge/ErrorEventForgeryFactory.kt b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/utils/forge/ErrorEventForgeryFactory.kt index 4e6f621081..9c4d8f151e 100644 --- a/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/utils/forge/ErrorEventForgeryFactory.kt +++ b/features/dd-sdk-android-rum/src/test/kotlin/com/datadog/android/rum/utils/forge/ErrorEventForgeryFactory.kt @@ -20,6 +20,7 @@ internal class ErrorEventForgeryFactory : ForgeryFactory { override fun getForgery(forge: Forge): ErrorEvent { return ErrorEvent( + buildId = forge.aNullable { getForgery().toString() }, date = forge.aTimestamp(), error = ErrorEvent.Error( id = forge.aNullable { getForgery().toString() }, diff --git a/features/dd-sdk-android-webview/src/test/kotlin/com/datadog/android/utils/forge/ErrorEventForgeryFactory.kt b/features/dd-sdk-android-webview/src/test/kotlin/com/datadog/android/utils/forge/ErrorEventForgeryFactory.kt index 702600e7d2..2d889ef004 100644 --- a/features/dd-sdk-android-webview/src/test/kotlin/com/datadog/android/utils/forge/ErrorEventForgeryFactory.kt +++ b/features/dd-sdk-android-webview/src/test/kotlin/com/datadog/android/utils/forge/ErrorEventForgeryFactory.kt @@ -21,6 +21,7 @@ internal class ErrorEventForgeryFactory : ForgeryFactory { override fun getForgery(forge: Forge): ErrorEvent { return ErrorEvent( + buildId = forge.aNullable { getForgery().toString() }, date = forge.aTimestamp(), error = ErrorEvent.Error( id = forge.aNullable { getForgery().toString() },