Allow bridging Sentry spans to the SDK ones.
Add distributed tracing for `Room.timelineWithConfiguration`, so we can inspect the associated Rust trace.
This commit is contained in:
parent
6c404fda36
commit
bd427735ff
15 changed files with 195 additions and 10 deletions
|
|
@ -20,7 +20,10 @@ import io.element.android.libraries.di.annotations.AppCoroutineScope
|
|||
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
|
||||
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
|
||||
import io.element.android.services.analytics.api.AnalyticsLongRunningTransaction
|
||||
import io.element.android.services.analytics.api.AnalyticsSdkSpan
|
||||
import io.element.android.services.analytics.api.AnalyticsSdkSpanFactory
|
||||
import io.element.android.services.analytics.api.AnalyticsService
|
||||
import io.element.android.services.analytics.api.NoopAnalyticsSdkSpan
|
||||
import io.element.android.services.analytics.api.NoopAnalyticsTransaction
|
||||
import io.element.android.services.analytics.impl.log.analyticsTag
|
||||
import io.element.android.services.analytics.impl.store.AnalyticsStore
|
||||
|
|
@ -43,6 +46,7 @@ class DefaultAnalyticsService(
|
|||
@AppCoroutineScope
|
||||
private val coroutineScope: CoroutineScope,
|
||||
private val sessionObserver: SessionObserver,
|
||||
private val analyticsSdkSpanFactory: AnalyticsSdkSpanFactory,
|
||||
) : AnalyticsService, SessionListener {
|
||||
private val pendingLongRunningTransactions = ConcurrentHashMap<AnalyticsLongRunningTransaction, AnalyticsTransaction>()
|
||||
|
||||
|
|
@ -171,4 +175,16 @@ class DefaultAnalyticsService(
|
|||
override fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction? {
|
||||
return pendingLongRunningTransactions.remove(longRunningTransaction)
|
||||
}
|
||||
|
||||
override fun enterSdkSpan(name: String?, parentTraceId: String?): AnalyticsSdkSpan {
|
||||
return if (userConsent.get()) {
|
||||
if (name != null) {
|
||||
analyticsSdkSpanFactory.create(name, parentTraceId)
|
||||
} else {
|
||||
analyticsSdkSpanFactory.bridge(parentTraceId)
|
||||
}.apply { enter() }
|
||||
} else {
|
||||
NoopAnalyticsSdkSpan
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
|
|||
import io.element.android.libraries.sessionstorage.test.observer.NoOpSessionObserver
|
||||
import io.element.android.services.analytics.impl.store.AnalyticsStore
|
||||
import io.element.android.services.analytics.impl.store.FakeAnalyticsStore
|
||||
import io.element.android.services.analytics.test.FakeAnalyticsSdkSpanFactory
|
||||
import io.element.android.services.analyticsproviders.api.AnalyticsProvider
|
||||
import io.element.android.services.analyticsproviders.test.FakeAnalyticsProvider
|
||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||
|
|
@ -278,6 +279,7 @@ class DefaultAnalyticsServiceTest {
|
|||
analyticsStore = analyticsStore,
|
||||
coroutineScope = coroutineScope,
|
||||
sessionObserver = sessionObserver,
|
||||
analyticsSdkSpanFactory = FakeAnalyticsSdkSpanFactory(),
|
||||
).also {
|
||||
// Wait for the service to be ready
|
||||
delay(1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue