Skip to content

Commit

Permalink
Update WaitingTimeTracker interface. capture elapsed time in ms
Browse files Browse the repository at this point in the history
  • Loading branch information
iamgabrielma committed Feb 6, 2025
1 parent 47924ea commit 4d49861
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class AppStartupWaitingTimeTracker: WaitingTimeTracker {

init(analyticsService: Analytics = ServiceLocator.analytics,
currentTimeInMillis: @escaping () -> TimeInterval = { Date().timeIntervalSince1970 }) {
super.init(trackScenario: .appStartup, analyticsService: analyticsService, currentTimeInMillis: currentTimeInMillis)
super.init(trackScenario: .appStartup, analyticsService: analyticsService, currentTime: currentTimeInMillis)
}

/// Ends the waiting time for the provided startup action.
Expand Down
21 changes: 15 additions & 6 deletions WooCommerce/Classes/Analytics/WaitingTimeTracker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,35 @@ import protocol WooFoundation.Analytics
///
class WaitingTimeTracker {
private let trackScenario: WooAnalyticsEvent.WaitingTime.Scenario
private let currentTimeInMillis: () -> TimeInterval
private let currentTime: () -> TimeInterval
private let analyticsService: Analytics
private let waitingStartedTimestamp: TimeInterval

init(trackScenario: WooAnalyticsEvent.WaitingTime.Scenario,
analyticsService: Analytics = ServiceLocator.analytics,
currentTimeInMillis: @escaping () -> TimeInterval = { Date().timeIntervalSince1970 }
currentTime: @escaping () -> TimeInterval = { Date().timeIntervalSince1970 }
) {
self.trackScenario = trackScenario
self.analyticsService = analyticsService
self.currentTimeInMillis = currentTimeInMillis
waitingStartedTimestamp = currentTimeInMillis()
self.currentTime = currentTime
waitingStartedTimestamp = currentTime()
}

/// End the waiting time by evaluating the elapsed time from the init,
/// and sending it as an analytics event.
/// and sending it as an analytics event, in seconds.
///
func end() {
let elapsedTime = currentTimeInMillis() - waitingStartedTimestamp
let elapsedTime = currentTime() - waitingStartedTimestamp
let analyticsEvent = WooAnalyticsEvent.WaitingTime.waitingFinished(scenario: trackScenario, elapsedTime: elapsedTime)
analyticsService.track(event: analyticsEvent)
}

/// End the waiting time by evaluating the elapsed time from the init,
/// and sending it as an analytics event, in milliseconds
///
func endInMilliseconds() {
let elapsedTimeMs = (currentTime() - waitingStartedTimestamp) * 1000
let analyticsEvent = WooAnalyticsEvent.WaitingTime.waitingFinished(scenario: trackScenario, elapsedTime: elapsedTimeMs)
analyticsService.track(event: analyticsEvent)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ struct PointOfSaleLoadingView: View {

private extension PointOfSaleLoadingView {
func trackTimeOnAppear() {
waitingTimeTracker = WaitingTimeTracker(trackScenario: .pointOfSaleLoaded, analyticsService: ServiceLocator.analytics)
waitingTimeTracker = WaitingTimeTracker(trackScenario: .pointOfSaleLoaded)
}

func trackElapsedTimeOnDisappear() {
if let waitingTimeTracker = waitingTimeTracker {
waitingTimeTracker.end()
waitingTimeTracker.endInMilliseconds()
}
}
}
Expand Down

0 comments on commit 4d49861

Please sign in to comment.