Have long running analytic transactions return actual transactions.

Also add `AnalyticsService.getLongRunningTransaction` and change `AnalyticsService.stopLongRunningTransaction` to `removeLongRunningTransaction`.
This commit is contained in:
Jorge Martín
2025-11-19 17:24:35 +01:00
committed by Jorge Martin Espinosa
parent d6adf93906
commit 766c23721e
5 changed files with 40 additions and 11 deletions

View File

@@ -55,9 +55,20 @@ interface AnalyticsService : AnalyticsTracker, ErrorTracker {
*/
fun startTransaction(name: String, operation: String? = null): AnalyticsTransaction
fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction)
/**
* Starts an [AnalyticsLongRunningTransaction], that can be shared with other components.
*/
fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction
fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction)
/**
* Gets an ongoing [AnalyticsLongRunningTransaction], if it exists.
*/
fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction?
/**
* Removes an ongoing [AnalyticsLongRunningTransaction] so it's no longer shared.
*/
fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction?
}
inline fun <T> AnalyticsService.recordTransaction(name: String, operation: String, block: (AnalyticsTransaction) -> T): T {

View File

@@ -153,11 +153,17 @@ class DefaultAnalyticsService(
} ?: NoopAnalyticsTransaction
}
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {
pendingLongRunningTransactions[longRunningTransaction] = startTransaction(longRunningTransaction.name, longRunningTransaction.operation)
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction {
val transaction = startTransaction(longRunningTransaction.name, longRunningTransaction.operation)
pendingLongRunningTransactions[longRunningTransaction] = transaction
return transaction
}
override fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {
pendingLongRunningTransactions.remove(longRunningTransaction)?.finish()
override fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return pendingLongRunningTransactions[longRunningTransaction]
}
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return pendingLongRunningTransactions.remove(longRunningTransaction)
}
}

View File

@@ -39,6 +39,7 @@ class NoopAnalyticsService : AnalyticsService {
override fun trackError(throwable: Throwable) = Unit
override fun updateSuperProperties(updatedProperties: SuperProperties) = Unit
override fun startTransaction(name: String, operation: String?): AnalyticsTransaction = NoopAnalyticsTransaction
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {}
override fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {}
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction = NoopAnalyticsTransaction
override fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? = null
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) = NoopAnalyticsTransaction
}

View File

@@ -31,6 +31,7 @@ class FakeAnalyticsService(
val screenEvents = mutableListOf<VectorAnalyticsScreen>()
val trackedErrors = mutableListOf<Throwable>()
val capturedUserProperties = mutableListOf<UserProperties>()
val longRunningTransactions = mutableMapOf<AnalyticsLongRunningTransaction, AnalyticsTransaction>()
override fun getAvailableAnalyticsProviders(): Set<AnalyticsProvider> = emptySet()
@@ -70,6 +71,16 @@ class FakeAnalyticsService(
}
override fun startTransaction(name: String, operation: String?): AnalyticsTransaction = NoopAnalyticsTransaction
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {}
override fun stopLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction) {}
override fun startLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction {
longRunningTransactions[longRunningTransaction] = NoopAnalyticsTransaction
return NoopAnalyticsTransaction
}
override fun getLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return longRunningTransactions[longRunningTransaction]
}
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
return longRunningTransactions.remove(longRunningTransaction)
}
}