Add Sentry transaction so we can check how long it takes to vacuum and if there were any errors when doing it
This commit is contained in:
committed by
Jorge Martin Espinosa
parent
09cab10abc
commit
7e3acd6b58
@@ -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<MetroWorkerFactory.WorkerInstanceFactory<*>>())
|
||||
|
||||
@@ -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() {}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ interface AnalyticsTransaction {
|
||||
fun setData(key: String, value: Any)
|
||||
fun isFinished(): Boolean
|
||||
fun traceId(): String?
|
||||
fun attachError(throwable: Throwable)
|
||||
fun finish()
|
||||
}
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user