diff --git a/.github/workflows/benchmark_suite.yml b/.github/workflows/benchmark_suite.yml
index c7828fa9e99..c4b503729af 100644
--- a/.github/workflows/benchmark_suite.yml
+++ b/.github/workflows/benchmark_suite.yml
@@ -41,6 +41,6 @@ jobs:
script: |
adb root
./gradlew --no-configuration-cache -PmanifestEndpoint=https://api-sandbox.simple.org/api/ installQaDebug installQaDebugAndroidTest lockClocks
- adb shell am instrument -w -e filter org.simple.clinic.benchmark.SelectBenchmarkTests -e benchmark_app_performance true -e dd_client_token ${{ secrets.DD_PERF_CLIENT_TOKEN }} -e dd_application_id ${{ secrets.DD_PERF_APPLICATION_ID }} org.simple.clinic.qa.debug.test/org.simple.clinic.AndroidTestJUnitRunner
+ adb shell am instrument -w -e filter org.simple.clinic.benchmark.SelectBenchmarkTests -e benchmark_app_performance true -e sentry_dsn ${{ secrets.SENTRY_DSN }} org.simple.clinic.qa.debug.test/org.simple.clinic.AndroidTestJUnitRunner
adb uninstall org.simple.clinic.qa.debug
adb uninstall org.simple.clinic.qa.debug.test
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6ea61015c61..d20be76807e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -67,6 +67,7 @@
- Bump AGP to v8.8.2
- Calculate lab-based CVD risk score
- Update copy of statin nudge to support lab-based nudge
+- Report SQL performance metrics to Sentry
### Fixes
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index d602037db47..aecedac2199 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,17 +1,18 @@
@file:Suppress("UnstableApiUsage")
import com.android.build.gradle.internal.tasks.databinding.DataBindingGenBaseClassesTask
+import io.sentry.android.gradle.extensions.InstrumentationFeature
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool
import org.simple.rmg.RoomMetadataGenerator
+import java.util.EnumSet
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.sentry)
- alias(libs.plugins.datadog)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.compose.compiler)
alias(libs.plugins.google.services)
@@ -33,7 +34,8 @@ sentry {
// We are using our own instrumentation tooling for Room queries
// Look at [ADR 013: SQL Performance Profiling (v2)]
tracingInstrumentation {
- enabled.set(false)
+ enabled = true
+ features.set(EnumSet.allOf(InstrumentationFeature::class.java) - InstrumentationFeature.DATABASE)
}
}
@@ -87,22 +89,12 @@ android {
val manifestEndpoint: String by project
val disableScreenshot: String by project
val allowRootedDevice: String by project
- val datadogServiceName: String by project
- val datadogApplicationId: String by project
- val datadogClientToken: String by project
- val datadogEnvironment: String by project
-
- addManifestPlaceholders(mapOf(
- "sentryDsn" to sentryDsn,
- "sentryEnvironment" to sentryEnvironment
- ))
+
+ buildConfigField("String", "SENTRY_DSN", "\"$sentryDsn\"")
+ buildConfigField("String", "SENTRY_ENVIRONMENT", "\"$sentryEnvironment\"")
buildConfigField("String", "MANIFEST_ENDPOINT", "\"$manifestEndpoint\"")
buildConfigField("boolean", "DISABLE_SCREENSHOT", disableScreenshot)
buildConfigField("boolean", "ALLOW_ROOTED_DEVICE", allowRootedDevice)
- buildConfigField("String", "DATADOG_SERVICE_NAME", "\"$datadogServiceName\"")
- buildConfigField("String", "DATADOG_APPLICATION_ID", "\"$datadogApplicationId\"")
- buildConfigField("String", "DATADOG_CLIENT_TOKEN", "\"$datadogClientToken\"")
- buildConfigField("String", "DATADOG_ENVIRONMENT", "\"$datadogEnvironment\"")
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
@@ -482,8 +474,6 @@ dependencies {
runtimeOnly(libs.jackson.core)
- implementation(libs.datadog.sdk)
-
androidTestImplementation(libs.apache.commons.math)
}
diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml
index a96b7099289..253a4e418a6 100644
--- a/app/src/androidTest/AndroidManifest.xml
+++ b/app/src/androidTest/AndroidManifest.xml
@@ -6,7 +6,7 @@
+ android:value="org.simple.clinic.benchmark.WaitForSentryToUpload" />
diff --git a/app/src/androidTest/java/org/simple/clinic/TestClinicApp.kt b/app/src/androidTest/java/org/simple/clinic/TestClinicApp.kt
index 30677ac954d..2972abb65c1 100644
--- a/app/src/androidTest/java/org/simple/clinic/TestClinicApp.kt
+++ b/app/src/androidTest/java/org/simple/clinic/TestClinicApp.kt
@@ -1,19 +1,11 @@
package org.simple.clinic
import android.app.Application
-import android.content.Context
import androidx.test.platform.app.InstrumentationRegistry
-import com.datadog.android.Datadog
-import com.datadog.android.core.configuration.Configuration
-import com.datadog.android.core.configuration.Credentials
-import com.datadog.android.core.configuration.UploadFrequency
-import com.datadog.android.privacy.TrackingConsent
-import com.datadog.android.rum.GlobalRum
-import com.datadog.android.rum.RumMonitor
-import com.datadog.android.rum.tracking.ViewTrackingStrategy
-import com.datadog.android.tracing.AndroidTracer
import com.tspoon.traceur.Traceur
-import io.opentracing.util.GlobalTracer
+import io.sentry.SentryLevel
+import io.sentry.SentryOptions
+import io.sentry.android.core.SentryAndroid
import org.simple.clinic.TestClinicApp.Companion.appComponent
import org.simple.clinic.benchmark.BackupBenchmarkDatabase
import org.simple.clinic.di.DaggerTestAppComponent
@@ -100,9 +92,8 @@ class TestClinicApp : Application() {
dataSync.syncTheWorld()
backupBenchmarkDatabase.backup()
- setupDatadog(
- clientToken = instrumentationArgs.getString("dd_client_token")!!,
- applicationId = instrumentationArgs.getString("dd_application_id")!!
+ setupSentry(
+ dsn = instrumentationArgs.getString("sentry_dsn")!!,
)
}
}
@@ -155,39 +146,20 @@ class TestClinicApp : Application() {
.build()
}
- private fun setupDatadog(
- clientToken: String,
- applicationId: String
- ) {
- val datadogConfig = Configuration
- .Builder(
- logsEnabled = true,
- tracesEnabled = true,
- crashReportsEnabled = false,
- rumEnabled = false
- )
- .useViewTrackingStrategy(NoopViewTrackingStrategy())
- .setUploadFrequency(UploadFrequency.FREQUENT)
- .build()
- val credentials = Credentials(
- clientToken = clientToken,
- envName = "test",
- variant = BuildConfig.FLAVOR,
- rumApplicationId = applicationId,
- serviceName = "simple-android-perf-regression"
- )
- Datadog.initialize(this, credentials, datadogConfig, TrackingConsent.GRANTED)
- GlobalRum.registerIfAbsent(RumMonitor.Builder().build())
- GlobalTracer.registerIfAbsent(AndroidTracer.Builder().setPartialFlushThreshold(5).build())
- }
-
- private class NoopViewTrackingStrategy : ViewTrackingStrategy {
- override fun register(context: Context) {
- // No need to track views in tests
- }
-
- override fun unregister(context: Context?) {
- // No need to track views in tests
+ private fun setupSentry(dsn: String) {
+ SentryAndroid.init(this) { options ->
+ options.dsn = dsn
+ options.environment = "test"
+ options.sampleRate = 0.0
+ options.tracesSampleRate = 1.0
+
+ options.beforeSend = SentryOptions.BeforeSendCallback { event, _ ->
+ if (event.level != SentryLevel.DEBUG) {
+ event
+ } else {
+ null
+ }
+ }
}
}
}
diff --git a/app/src/androidTest/java/org/simple/clinic/benchmark/BenchmarkTestRule.kt b/app/src/androidTest/java/org/simple/clinic/benchmark/BenchmarkTestRule.kt
index 78e402f3228..f0a29c9bb43 100644
--- a/app/src/androidTest/java/org/simple/clinic/benchmark/BenchmarkTestRule.kt
+++ b/app/src/androidTest/java/org/simple/clinic/benchmark/BenchmarkTestRule.kt
@@ -1,13 +1,16 @@
package org.simple.clinic.benchmark
import android.util.Log
-import io.opentracing.util.GlobalTracer
+import io.sentry.Sentry
+import io.sentry.SentryLongDate
+import io.sentry.SpanStatus
+import io.sentry.TransactionOptions
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import org.simple.clinic.TestClinicApp
-import java.util.concurrent.TimeUnit.MICROSECONDS
+import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeUnit.MILLISECONDS
import javax.inject.Inject
@@ -65,19 +68,22 @@ class BenchmarkTestRule(
Log.i("PerfRegression", "Median benchmark for $testClass#$testMethod: ${medianTimeTaken}ms")
- val tracer = GlobalTracer.get()
- val adjustedStartTime = millisToMicros(System.currentTimeMillis() - medianTimeTaken)
- val span = tracer
- .buildSpan("test.method")
- .withTag("class", testClass)
- .withTag("method", testMethod)
- .withStartTimestamp(adjustedStartTime)
- .start()
+ val adjustedStartTime = millisToNanos(System.currentTimeMillis() - medianTimeTaken)
- span.finish(adjustedStartTime + millisToMicros(medianTimeTaken))
+ val span = Sentry.startTransaction(
+ /* name = */ "test.method",
+ /* operation = */ "$testClass/$testMethod",
+ /* transactionOptions = */ TransactionOptions().apply {
+ startTimestamp = SentryLongDate(adjustedStartTime)
+ }
+ )
+
+ span.finish(
+ SpanStatus.OK,
+ SentryLongDate(adjustedStartTime + millisToNanos(medianTimeTaken)))
}
- private fun millisToMicros(millis: Long) = MICROSECONDS.convert(millis, MILLISECONDS)
+ private fun millisToNanos(millis: Long) = TimeUnit.NANOSECONDS.convert(millis, MILLISECONDS)
}
}
}
diff --git a/app/src/androidTest/java/org/simple/clinic/benchmark/WaitForDatadogToUpload.kt b/app/src/androidTest/java/org/simple/clinic/benchmark/WaitForSentryToUpload.kt
similarity index 59%
rename from app/src/androidTest/java/org/simple/clinic/benchmark/WaitForDatadogToUpload.kt
rename to app/src/androidTest/java/org/simple/clinic/benchmark/WaitForSentryToUpload.kt
index 4873676d1ca..63f77a0a234 100644
--- a/app/src/androidTest/java/org/simple/clinic/benchmark/WaitForDatadogToUpload.kt
+++ b/app/src/androidTest/java/org/simple/clinic/benchmark/WaitForSentryToUpload.kt
@@ -3,21 +3,19 @@ package org.simple.clinic.benchmark
import android.os.Bundle
import android.util.Log
import androidx.test.internal.runner.listener.InstrumentationRunListener
-import io.opentracing.util.GlobalTracer
import org.junit.runner.Result
import org.simple.clinic.TestClinicApp
import java.io.PrintStream
import java.time.Duration
-class WaitForDatadogToUpload : InstrumentationRunListener() {
+class WaitForSentryToUpload : InstrumentationRunListener() {
override fun instrumentationRunFinished(streamResult: PrintStream?, resultBundle: Bundle?, junitResults: Result?) {
- // We don't have a way to force Datadog to upload all its traces, so we'll wait for a few seconds
- // for DD to upload, and then we'll finish it.
+ // We don't have a way to force Sentry to upload all its traces, so we'll wait for a few seconds
+ // for Sentry to upload, and then we'll finish it.
if (TestClinicApp.isInBenchmarkMode) {
- Log.i("PerfRegression", "Wait for Datadog upload")
+ Log.i("PerfRegression", "Wait for Sentry upload")
Thread.sleep(Duration.ofMinutes(1).toMillis())
- GlobalTracer.get().close()
}
}
}
diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml
index c78f17c58dd..46d68f828ec 100644
--- a/app/src/debug/AndroidManifest.xml
+++ b/app/src/debug/AndroidManifest.xml
@@ -8,10 +8,6 @@
tools:ignore="GoogleAppIndexingWarning"
tools:replace="android:name,android:icon">
-
-
-
-
-
-
+ android:name="io.sentry.auto-init"
+ android:value="false" />
if (!error.canBeIgnoredSafely()) {
@@ -107,42 +100,39 @@ abstract class ClinicApp : Application(), CameraXConfig.Provider {
analyticsReporters.forEach { reporter ->
Analytics.addReporter(reporter)
}
- SqlPerformanceReporter.addSink(DatadogSqlPerformanceReportingSink())
+ SqlPerformanceReporter.addSink(SentrySqlPerformanceReportingSink())
registerActivityLifecycleCallbacks(closeActivitiesWhenUserIsUnauthorized)
}
- private fun setupApplicationPerformanceMonitoring() {
- val samplingRate = remoteConfig
- .double("datadog_sample_rate", 0.0)
- .toFloat()
- .clamp(0F, 100F)
-
- val datadogConfig = Configuration
- .Builder(
- logsEnabled = false,
- tracesEnabled = true,
- crashReportsEnabled = false,
- rumEnabled = true
- )
- .trackBackgroundRumEvents(true)
- .trackLongTasks(5000)
- .useViewTrackingStrategy(FragmentViewTrackingStrategy(
- trackArguments = false,
- supportFragmentComponentPredicate = ResolveScreenNamesForDatadog()
- ))
- .sampleRumSessions(samplingRate = samplingRate)
- .build()
- val credentials = Credentials(
- clientToken = BuildConfig.DATADOG_CLIENT_TOKEN,
- envName = BuildConfig.DATADOG_ENVIRONMENT,
- variant = BuildConfig.FLAVOR,
- rumApplicationId = BuildConfig.DATADOG_APPLICATION_ID,
- serviceName = BuildConfig.DATADOG_SERVICE_NAME
- )
- Datadog.initialize(this, credentials, datadogConfig, TrackingConsent.GRANTED)
- GlobalRum.registerIfAbsent(RumMonitor.Builder().build())
- GlobalTracer.registerIfAbsent(AndroidTracer.Builder().build())
+ private fun setupSentry() {
+ SentryAndroid.init(this) { options ->
+ options.dsn = BuildConfig.SENTRY_DSN
+ options.environment = BuildConfig.SENTRY_ENVIRONMENT
+
+ options.sampleRate = remoteConfig
+ .double("sentry_errors_sample_rate", 0.0)
+ .coerceIn(0.0, 1.0)
+ options.tracesSampleRate = remoteConfig
+ .double("sentry_traces_sample_rate", 0.0)
+ .coerceIn(0.0, 1.0)
+
+ options.beforeSend = BeforeSendCallback { event, hint ->
+ if (event.level != SentryLevel.DEBUG) {
+ event
+ } else {
+ null
+ }
+ }
+
+ options.addIntegration(
+ FragmentLifecycleIntegration(
+ application = this,
+ enableFragmentLifecycleBreadcrumbs = true,
+ enableAutoFragmentLifecycleTracing = true,
+ )
+ )
+ }
}
override fun getCameraXConfig(): CameraXConfig {
diff --git a/app/src/main/java/org/simple/clinic/analytics/ResolveScreenNamesForDatadog.kt b/app/src/main/java/org/simple/clinic/analytics/ResolveScreenNamesForDatadog.kt
deleted file mode 100644
index c2acaa24000..00000000000
--- a/app/src/main/java/org/simple/clinic/analytics/ResolveScreenNamesForDatadog.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.simple.clinic.analytics
-
-import androidx.fragment.app.Fragment
-import com.datadog.android.rum.tracking.AcceptAllSupportFragments
-import org.simple.clinic.navigation.v2.compat.ScreenFragmentCompat
-import org.simple.clinic.navigation.v2.fragments.BaseBottomSheet
-import org.simple.clinic.navigation.v2.fragments.BaseDialog
-import org.simple.clinic.navigation.v2.fragments.BaseScreen
-
-class ResolveScreenNamesForDatadog: AcceptAllSupportFragments() {
-
- override fun getViewName(component: Fragment): String? {
- return when(component) {
- is ScreenFragmentCompat -> component.screenName
- is BaseScreen<*, *, *, *, *, *> -> component.screenName
- is BaseBottomSheet<*, *, *, *, *, *> -> component.screenName
- is BaseDialog<*, *, *, *, *, *> -> component.screenName
- else -> super.getViewName(component)
- }
- }
-}
diff --git a/app/src/main/java/org/simple/clinic/plumbing/infrastructure/DatadogInfrastructure.kt b/app/src/main/java/org/simple/clinic/plumbing/infrastructure/DatadogInfrastructure.kt
deleted file mode 100644
index 200e8846177..00000000000
--- a/app/src/main/java/org/simple/clinic/plumbing/infrastructure/DatadogInfrastructure.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.simple.clinic.plumbing.infrastructure
-
-import com.datadog.android.Datadog
-import org.simple.clinic.appconfig.Country
-import org.simple.clinic.appconfig.Deployment
-import org.simple.clinic.user.User
-import javax.inject.Inject
-
-class DatadogInfrastructure @Inject constructor() : Infrastructure {
-
- override fun addDetails(user: User, country: Country, deployment: Deployment) {
- Datadog.setUserInfo(
- id = user.uuid.toString(),
- extraInfo = mapOf(
- "facilityId" to user.currentFacilityUuid.toString(),
- "countryCode" to country.isoCountryCode,
- "deployment" to deployment.endPoint.toString()
- )
- )
- }
-
- override fun clear() {
- Datadog.setUserInfo(id = null, extraInfo = emptyMap())
- }
-}
diff --git a/app/src/main/java/org/simple/clinic/plumbing/infrastructure/InfrastructureModule.kt b/app/src/main/java/org/simple/clinic/plumbing/infrastructure/InfrastructureModule.kt
index 3ac3be667d3..10b706c73ea 100644
--- a/app/src/main/java/org/simple/clinic/plumbing/infrastructure/InfrastructureModule.kt
+++ b/app/src/main/java/org/simple/clinic/plumbing/infrastructure/InfrastructureModule.kt
@@ -9,7 +9,6 @@ class InfrastructureModule {
@Provides
fun provideInfrastructure(
sentryInfrastructure: SentryInfrastructure,
- datadogInfrastructure: DatadogInfrastructure,
firebaseAnalyticsInfrastructure: FirebaseAnalyticsInfrastructure
- ) = listOf(sentryInfrastructure, datadogInfrastructure, firebaseAnalyticsInfrastructure)
+ ) = listOf(sentryInfrastructure, firebaseAnalyticsInfrastructure)
}
diff --git a/app/src/main/java/org/simple/clinic/storage/monitoring/DatadogSqlPerformanceReportingSink.kt b/app/src/main/java/org/simple/clinic/storage/monitoring/SentrySqlPerformanceReportingSink.kt
similarity index 76%
rename from app/src/main/java/org/simple/clinic/storage/monitoring/DatadogSqlPerformanceReportingSink.kt
rename to app/src/main/java/org/simple/clinic/storage/monitoring/SentrySqlPerformanceReportingSink.kt
index c1c91c97c48..af66012df04 100644
--- a/app/src/main/java/org/simple/clinic/storage/monitoring/DatadogSqlPerformanceReportingSink.kt
+++ b/app/src/main/java/org/simple/clinic/storage/monitoring/SentrySqlPerformanceReportingSink.kt
@@ -1,11 +1,12 @@
package org.simple.clinic.storage.monitoring
-import io.opentracing.Span
-import io.opentracing.util.GlobalTracer
+import io.sentry.ISpan
+import io.sentry.Sentry
+import io.sentry.TransactionOptions
import org.simple.clinic.storage.monitoring.SqlPerformanceReporter.ReportSink
import org.simple.clinic.storage.monitoring.SqlPerformanceReporter.SqlOperation
-class DatadogSqlPerformanceReportingSink : ReportSink {
+class SentrySqlPerformanceReportingSink : ReportSink {
/**
* Maintains the list of running spans for every DB call.
@@ -16,15 +17,14 @@ class DatadogSqlPerformanceReportingSink : ReportSink {
*
* Something to investigate at a later date.
**/
- private var runningSpans = emptyMap()
+ private var runningSpans = emptyMap()
override fun begin(operation: SqlOperation) {
- val tracer = GlobalTracer.get()
- val span = tracer
- .buildSpan("room.query")
- .withTag("dao", operation.daoName)
- .withTag("method", operation.methodName)
- .start()
+ val span = Sentry.startTransaction(
+ /* name = */ "room.query",
+ /* operation = */ "${operation.daoName}/${operation.methodName}"
+ )
+ span.setTag("op_thread", operation.threadName)
runningSpans = runningSpans + (operation to span)
}
diff --git a/app/src/main/java/org/simple/clinic/storage/monitoring/SqlPerformanceReporter.kt b/app/src/main/java/org/simple/clinic/storage/monitoring/SqlPerformanceReporter.kt
index 9b9aa4532b7..20547844e77 100644
--- a/app/src/main/java/org/simple/clinic/storage/monitoring/SqlPerformanceReporter.kt
+++ b/app/src/main/java/org/simple/clinic/storage/monitoring/SqlPerformanceReporter.kt
@@ -18,9 +18,10 @@ class SqlPerformanceReporter {
fun begin(
daoName: String,
startTimeMillis: Long,
- methodName: String
+ methodName: String,
+ threadName: String,
) {
- val operation = SqlOperation(daoName, startTimeMillis, methodName)
+ val operation = SqlOperation(daoName, startTimeMillis, methodName, threadName)
INSTANCE.onEachSink { it.begin(operation) }
}
@@ -29,9 +30,10 @@ class SqlPerformanceReporter {
fun end(
daoName: String,
startTimeMillis: Long,
- methodName: String
+ methodName: String,
+ threadName: String,
) {
- val operation = SqlOperation(daoName, startTimeMillis, methodName)
+ val operation = SqlOperation(daoName, startTimeMillis, methodName, threadName)
INSTANCE.onEachSink { it.end(operation) }
}
@@ -60,6 +62,7 @@ class SqlPerformanceReporter {
data class SqlOperation(
val daoName: String,
val startTimeMillis: Long,
- val methodName: String
+ val methodName: String,
+ val threadName: String,
)
}
diff --git a/app/src/release/java/org/simple/clinic/di/network/HttpInterceptorsModule.kt b/app/src/release/java/org/simple/clinic/di/network/HttpInterceptorsModule.kt
index 37efb6286d7..1d4fa2408cc 100644
--- a/app/src/release/java/org/simple/clinic/di/network/HttpInterceptorsModule.kt
+++ b/app/src/release/java/org/simple/clinic/di/network/HttpInterceptorsModule.kt
@@ -1,8 +1,8 @@
package org.simple.clinic.di.network
-import com.datadog.android.DatadogInterceptor
import dagger.Module
import dagger.Provides
+import io.sentry.okhttp.SentryOkHttpInterceptor
import okhttp3.Interceptor
import org.simple.clinic.analytics.NetworkAnalyticsInterceptor
import org.simple.clinic.user.LoggedInUserHttpInterceptor
@@ -18,7 +18,7 @@ class HttpInterceptorsModule {
compressRequestInterceptor: CompressRequestInterceptor
): List {
return listOf(
- DatadogInterceptor(),
+ SentryOkHttpInterceptor(),
loggedInInterceptor,
appInfoHttpInterceptor,
compressRequestInterceptor,
diff --git a/build.gradle.kts b/build.gradle.kts
index e5aee9ca6bd..b13ef7c9ad4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -10,7 +10,6 @@ plugins {
alias(libs.plugins.ksp) apply false
alias(libs.plugins.google.services) apply false
alias(libs.plugins.sentry) apply false
- alias(libs.plugins.datadog) apply false
}
buildscript {
diff --git a/buildTooling/room-metadata-generator-2.0.1.jar b/buildTooling/room-metadata-generator-2.1.0.jar
similarity index 95%
rename from buildTooling/room-metadata-generator-2.0.1.jar
rename to buildTooling/room-metadata-generator-2.1.0.jar
index 6bfcdb9f704..9c3e33ff8f3 100644
Binary files a/buildTooling/room-metadata-generator-2.0.1.jar and b/buildTooling/room-metadata-generator-2.1.0.jar differ
diff --git a/gradle.properties b/gradle.properties
index 4e5188547e6..7e234bdf671 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -45,10 +45,5 @@ sentryUploadProguard=true
# App behaviour
disableScreenshot=false
allowRootedDevice=true
-# Datadog config
-datadogApplicationId=do_not_change_here
-datadogClientToken=do_not_change_here
-datadogEnvironment=qa
-datadogServiceName=simple-android
maestroTests=false
org.gradle.unsafe.configuration-cache=true
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 01fe5e5fda2..060ec8bf452 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -30,7 +30,7 @@ okhttp = "4.12.0"
retrofit = "2.11.0"
-room-metadataGenerator = "2.0.1"
+room-metadataGenerator = "2.1.0"
rx-binding = "3.1.0"
@@ -201,8 +201,6 @@ uuid-generator = "com.fasterxml.uuid:java-uuid-generator:5.1.0"
#noinspection GradleDependency
viewpump = "io.github.inflationx:viewpump:2.0.3"
-datadog-sdk = "com.datadoghq:dd-sdk-android:1.19.3"
-
#noinspection GradleDependency
zxing = "com.google.zxing:core:3.3.3"
@@ -236,7 +234,6 @@ kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
google-services = { id = "com.google.gms.google-services", version = "4.4.2" }
sentry = { id = "io.sentry.android.gradle", version = "5.1.0" }
-datadog = { id = "com.datadoghq.dd-sdk-android-gradle-plugin", version = "1.15.0" }
[bundles]
androidx-camera = ["androidx-camera-core", "androidx-camera-camera2", "androidx-camera-view", "androidx-camera-lifecycle"]