Clean up the Signposter implementation and align on new metrics

This commit is contained in:
Stefan Ceriu
2026-01-28 11:59:05 +02:00
committed by Stefan Ceriu
parent 8b768f74f8
commit a2a8527ffc
10 changed files with 159 additions and 145 deletions
@@ -12,10 +12,12 @@ import Foundation
import MatrixRustSDK
import OrderedCollections
// swiftlint:disable:next type_body_length
class ClientProxy: ClientProxyProtocol {
private let client: ClientProtocol
private let networkMonitor: NetworkMonitorProtocol
private let appSettings: AppSettings
private let analyticsService: AnalyticsService
let mediaLoader: MediaLoaderProtocol
private let clientQueue: DispatchQueue
@@ -37,7 +39,10 @@ class ClientProxy: ClientProxyProtocol {
private var verificationStateListenerTaskHandle: TaskHandle?
// periphery:ignore - required for instance retention in the rust codebase
private var sendQueueListenerTaskHandle: TaskHandle?
private var sendQueueStatusListenerTaskHandle: TaskHandle?
// periphery:ignore - required for instance retention in the rust codebase
private var sendQueueUpdatesListenerTaskHandle: TaskHandle?
// periphery:ignore - required for instance retention in the rust codebase
private var mediaPreviewConfigListenerTaskHandle: TaskHandle?
@@ -184,10 +189,12 @@ class ClientProxy: ClientProxyProtocol {
init(client: ClientProtocol,
networkMonitor: NetworkMonitorProtocol,
appSettings: AppSettings) async throws {
appSettings: AppSettings,
analyticsService: AnalyticsService) async throws {
self.client = client
self.networkMonitor = networkMonitor
self.appSettings = appSettings
self.analyticsService = analyticsService
clientQueue = .init(label: "ClientProxyQueue", attributes: .concurrent)
@@ -243,11 +250,22 @@ class ClientProxy: ClientProxyProtocol {
Task { await self?.updateVerificationState(verificationState) }
})
sendQueueListenerTaskHandle = client.subscribeToSendQueueStatus(listener: SDKListener { [weak self] roomID, error in
sendQueueStatusListenerTaskHandle = client.subscribeToSendQueueStatus(listener: SDKListener { [weak self] roomID, error in
MXLog.error("Send queue failed in room: \(roomID) with error: \(error)")
self?.sendQueueStatusSubject.send(false)
})
sendQueueUpdatesListenerTaskHandle = try? await client.subscribeToSendQueueUpdates(listener: SDKListener { _, update in
switch update {
case .newLocalEvent(let transactionID):
analyticsService.signpost.startTransaction(.sendMessage(uuid: transactionID))
case .sentEvent(let transactionID, _):
analyticsService.signpost.finishTransaction(.sendMessage(uuid: transactionID))
default:
break
}
})
sendQueueStatusSubject
.combineLatest(homeserverReachabilityPublisher)
.debounce(for: 1.0, scheduler: DispatchQueue.main)
@@ -1136,7 +1154,8 @@ class ClientProxy: ClientProxyProtocol {
case .joined:
let roomProxy = try await JoinedRoomProxy(roomListService: roomListService,
room: room,
appSettings: appSettings)
appSettings: appSettings,
analyticsService: analyticsService)
return .joined(roomProxy)
case .left: