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
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.services.analytics.api
|
||||
|
||||
/**
|
||||
* Represents an analytics span in the Rust SDK.
|
||||
*/
|
||||
interface AnalyticsSdkSpan {
|
||||
/** Enters the span and starts collecting metrics. */
|
||||
fun enter()
|
||||
|
||||
/** Exit the span and stop collecting the metrics. A request should be sent shortly after. */
|
||||
fun exit()
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.services.analytics.api
|
||||
|
||||
interface AnalyticsSdkSpanFactory {
|
||||
/** Create an SDK span with the provided [name] and optional [parentTraceId]. */
|
||||
fun create(name: String, parentTraceId: String?): AnalyticsSdkSpan
|
||||
|
||||
/** Create a bridge span which will join our tracing spans to the SDK ones while it's active. */
|
||||
fun bridge(parentTraceId: String?): AnalyticsSdkSpan
|
||||
}
|
||||
|
|
@ -72,6 +72,8 @@ interface AnalyticsService : AnalyticsTracker, ErrorTracker {
|
|||
* Removes an ongoing [AnalyticsLongRunningTransaction] so it's no longer shared.
|
||||
*/
|
||||
fun removeLongRunningTransaction(longRunningTransaction: AnalyticsLongRunningTransaction): AnalyticsTransaction?
|
||||
|
||||
fun enterSdkSpan(name: String?, parentTraceId: String?): AnalyticsSdkSpan
|
||||
}
|
||||
|
||||
inline fun <T> AnalyticsService.recordTransaction(
|
||||
|
|
@ -110,3 +112,12 @@ fun AnalyticsService.finishLongRunningTransaction(
|
|||
it.finish()
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <T> AnalyticsService.inBridgeSdkSpan(parentTraceId: String?, block: (AnalyticsSdkSpan) -> T): T {
|
||||
val span = enterSdkSpan(name = null, parentTraceId = parentTraceId)
|
||||
return try {
|
||||
block(span)
|
||||
} finally {
|
||||
span.exit()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.services.analytics.api
|
||||
|
||||
object NoopAnalyticsSdkSpan : AnalyticsSdkSpan {
|
||||
override fun enter() {}
|
||||
override fun exit() {}
|
||||
}
|
||||
|
|
@ -13,5 +13,6 @@ object NoopAnalyticsTransaction : AnalyticsTransaction {
|
|||
override fun startChild(operation: String, description: String?): AnalyticsTransaction = NoopAnalyticsTransaction
|
||||
override fun setData(key: String, value: Any) {}
|
||||
override fun isFinished(): Boolean = true
|
||||
override fun traceId(): String? = null
|
||||
override fun finish() {}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue