From 40714f32fd09ae8c897250514e83188132f8cee5 Mon Sep 17 00:00:00 2001 From: Valere Date: Thu, 12 Dec 2024 18:50:54 +0100 Subject: [PATCH] feat(posthog): wire support for extra utd error properties --- .../UserSessionFlowCoordinator.swift | 36 ++++++++++--------- .../Services/Analytics/AnalyticsService.swift | 19 ++++++---- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift index acd4cc44e0..3642c5c548 100644 --- a/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift @@ -5,6 +5,7 @@ // Please see LICENSE in the repository root for full details. // +import AnalyticsEvents import AVKit import Combine import MatrixRustSDK @@ -382,24 +383,25 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol { timeToDecryptMs = -1 } - switch info.cause { - case .unknown: - analytics.trackError(context: nil, domain: .E2EE, name: .OlmKeysNotSentError, timeToDecryptMillis: timeToDecryptMs) - case .unknownDevice: - analytics.trackError(context: nil, domain: .E2EE, name: .ExpectedSentByInsecureDevice, timeToDecryptMillis: timeToDecryptMs) - case .unsignedDevice: - analytics.trackError(context: nil, domain: .E2EE, name: .ExpectedSentByInsecureDevice, timeToDecryptMillis: timeToDecryptMs) - case .verificationViolation: - analytics.trackError(context: nil, domain: .E2EE, name: .ExpectedVerificationViolation, timeToDecryptMillis: timeToDecryptMs) - case .sentBeforeWeJoined: - analytics.trackError(context: nil, domain: .E2EE, name: .ExpectedDueToMembership, timeToDecryptMillis: timeToDecryptMs) - case .historicalMessage: - analytics.trackError(context: nil, domain: .E2EE, name: .HistoricalMessage, timeToDecryptMillis: timeToDecryptMs) - case .withheldForUnverifiedOrInsecureDevice: - analytics.trackError(context: nil, domain: .E2EE, name: .RoomKeysWithheldForUnverifiedDevice, timeToDecryptMillis: timeToDecryptMs) - case .withheldBySender: - analytics.trackError(context: nil, domain: .E2EE, name: .OlmKeysNotSentError, timeToDecryptMillis: timeToDecryptMs) + let errorName: AnalyticsEvent.Error.Name = switch info.cause { + case .unknown: .OlmKeysNotSentError + case .unknownDevice, .unsignedDevice: .ExpectedSentByInsecureDevice + case .verificationViolation: .ExpectedVerificationViolation + case .sentBeforeWeJoined: .ExpectedDueToMembership + case .historicalMessage: .HistoricalMessage + case .withheldForUnverifiedOrInsecureDevice: .RoomKeysWithheldForUnverifiedDevice + case .withheldBySender: .OlmKeysNotSentError } + + analytics.trackError(context: nil, + domain: .E2EE, + name: errorName, + timeToDecryptMillis: timeToDecryptMs, + eventLocalAgeMillis: Int(truncatingIfNeeded: info.eventLocalAgeMillis), + isFederated: info.ownHomeserver != info.senderHomeserver, + isMatrixDotOrg: info.ownHomeserver == "matrix.org", + userTrustsOwnIdentity: info.userTrustsOwnIdentity, + wasVisibleToUser: nil) } .store(in: &cancellables) diff --git a/ElementX/Sources/Services/Analytics/AnalyticsService.swift b/ElementX/Sources/Services/Analytics/AnalyticsService.swift index 3ecbed8054..a3dc13d932 100644 --- a/ElementX/Sources/Services/Analytics/AnalyticsService.swift +++ b/ElementX/Sources/Services/Analytics/AnalyticsService.swift @@ -122,19 +122,26 @@ extension AnalyticsService { /// - Parameter name: The name of the error /// - Parameter timeToDecryptMillis: The time it took to decrypt the event in milliseconds, needs to be used only to track UTD errors, otherwise if the error is nort related to UTD it should be nil. /// Can be found in `UnableToDecryptInfo`. In case the `UnableToDecryptInfo` contains the value as nil, pass it as `-1` - func trackError(context: String?, domain: AnalyticsEvent.Error.Domain, name: AnalyticsEvent.Error.Name, timeToDecryptMillis: Int? = nil) { + func trackError(context: String?, domain: AnalyticsEvent.Error.Domain, + name: AnalyticsEvent.Error.Name, + timeToDecryptMillis: Int? = nil, + eventLocalAgeMillis: Int? = nil, + isFederated: Bool? = nil, + isMatrixDotOrg: Bool? = nil, + userTrustsOwnIdentity: Bool? = nil, + wasVisibleToUser: Bool? = nil) { // CryptoModule is deprecated capture(event: AnalyticsEvent.Error(context: context, cryptoModule: .Rust, cryptoSDK: .Rust, domain: domain, - eventLocalAgeMillis: nil, - isFederated: nil, - isMatrixDotOrg: nil, + eventLocalAgeMillis: eventLocalAgeMillis, + isFederated: isFederated, + isMatrixDotOrg: isMatrixDotOrg, name: name, timeToDecryptMillis: timeToDecryptMillis, - userTrustsOwnIdentity: nil, - wasVisibleToUser: nil)) + userTrustsOwnIdentity: userTrustsOwnIdentity, + wasVisibleToUser: wasVisibleToUser)) } /// Track the creation of a room