diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt index 2f799b362b..d52edddbb4 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/workmanager/VacuumDatabaseWorker.kt @@ -21,6 +21,8 @@ import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.workmanager.api.di.MetroWorkerFactory import io.element.android.libraries.workmanager.api.di.WorkerKey +import io.element.android.services.analytics.api.AnalyticsService +import io.element.android.services.analytics.api.recordTransaction import timber.log.Timber @AssistedInject @@ -28,6 +30,7 @@ class VacuumDatabaseWorker( @Assisted workerParams: WorkerParameters, @ApplicationContext private val context: Context, private val matrixClientProvider: MatrixClientProvider, + private val analyticsService: AnalyticsService, ) : CoroutineWorker(context, workerParams) { companion object { const val SESSION_ID_PARAM = "session_id" @@ -37,17 +40,20 @@ class VacuumDatabaseWorker( Timber.d("Starting database vacuuming...") val sessionId = inputData.getString(SESSION_ID_PARAM)?.let(::SessionId) ?: return Result.failure() val client = matrixClientProvider.getOrRestore(sessionId).getOrNull() ?: return Result.failure() - return client.performDatabaseVacuum() - .fold( - onSuccess = { - Timber.d("Database vacuuming finished successfully") - Result.success() - }, - onFailure = { - Timber.e(it, "Database vacuuming failed") - Result.failure() - } - ) + return analyticsService.recordTransaction("Vacuuming DBs", "vacuuming") { transaction -> + client.performDatabaseVacuum() + .fold( + onSuccess = { + Timber.d("Database vacuuming finished successfully") + Result.success() + }, + onFailure = { error -> + transaction.attachError(error) + Timber.e(error, "Database vacuuming failed") + Result.failure() + } + ) + } } @ContributesIntoMap(AppScope::class, binding = binding>()) diff --git a/services/analytics/api/src/main/kotlin/io/element/android/services/analytics/api/NoopAnalyticsTransaction.kt b/services/analytics/api/src/main/kotlin/io/element/android/services/analytics/api/NoopAnalyticsTransaction.kt index 024a7ac05e..e6f69ae99b 100644 --- a/services/analytics/api/src/main/kotlin/io/element/android/services/analytics/api/NoopAnalyticsTransaction.kt +++ b/services/analytics/api/src/main/kotlin/io/element/android/services/analytics/api/NoopAnalyticsTransaction.kt @@ -14,5 +14,6 @@ object NoopAnalyticsTransaction : AnalyticsTransaction { override fun setData(key: String, value: Any) {} override fun isFinished(): Boolean = true override fun traceId(): String? = null + override fun attachError(throwable: Throwable) {} override fun finish() {} } diff --git a/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsTransaction.kt b/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsTransaction.kt index ea63a7f167..84575d5dd0 100644 --- a/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsTransaction.kt +++ b/services/analyticsproviders/api/src/main/kotlin/io/element/android/services/analyticsproviders/api/AnalyticsTransaction.kt @@ -12,6 +12,7 @@ interface AnalyticsTransaction { fun setData(key: String, value: Any) fun isFinished(): Boolean fun traceId(): String? + fun attachError(throwable: Throwable) fun finish() } diff --git a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsTransaction.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsTransaction.kt index 75872b7d44..77a008b0a4 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsTransaction.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsTransaction.kt @@ -23,6 +23,9 @@ class SentryAnalyticsTransaction private constructor(span: ISpan) : AnalyticsTra override fun setData(key: String, value: Any) = inner.setData(key, value) override fun traceId(): String? = inner.toSentryTrace().value override fun isFinished(): Boolean = inner.isFinished + override fun attachError(throwable: Throwable) { + inner.throwable = throwable + } override fun finish() { val name = if (inner is ITransaction) inner.name else inner.operation Timber.d("Finishing transaction: $name")