Skip to content

Commit

Permalink
Updated milliseconds_since_order_sync_success
Browse files Browse the repository at this point in the history
We track this property when the order is created or updated
  • Loading branch information
iamgabrielma committed Feb 19, 2025
1 parent 7a7492b commit 1bafc53
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin
var connectedReaderModel: String?

private var customerInteractionStarted: Double = 0
private var orderCreated: Double = 0
private var orderSync: Double = 0
private var cardReaderReady: Double = 0
private var cardReaderTapped: Double = 0
private var checkoutTapCount: Int = 0
Expand All @@ -24,8 +24,8 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin
// Property: milliseconds_since_customer_interaction_started
let elapsedTimeSinceCustomerInteraction = calculateElapsedTimeInMilliseconds(since: customerInteractionStarted)

// Property: milliseconds_since_order_creation_success
let elapsedTimeSinceOrderCreation = calculateElapsedTimeInMilliseconds(since: orderCreated)
// Property: milliseconds_since_order_sync_success
let elapsedTimeSinceOrderSync = calculateElapsedTimeInMilliseconds(since: orderSync)

// Property: milliseconds_since_reader_ready_to_collect_payment
let elapsedTimeSinceCardReaderReady = calculateElapsedTimeInMilliseconds(since: cardReaderReady)
Expand All @@ -35,7 +35,7 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin

analytics.track(event: .PointOfSale.cardPresentCollectPaymentSuccess(
millisecondsSinceCustomerIteractionStarted: elapsedTimeSinceCustomerInteraction,
millisecondsSinceOrderCreationSuccess: elapsedTimeSinceOrderCreation,
millisecondsSinceOrderSyncSuccess: elapsedTimeSinceOrderSync,
millisecondsSinceReaderReadyToCollect: elapsedTimeSinceCardReaderReady,
millisecondsSinceCardTapped: elapsedTimeSinceCardTapped,
checkoutTapCount: checkoutTapCount
Expand Down Expand Up @@ -69,15 +69,15 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin
customerInteractionStarted = Date().timeIntervalSince1970
}

func trackOrderCreationSuccess() {
orderCreated = trackCurrentTime()
func trackOrderSyncSuccess() {
orderSync = trackCurrentTime()
}

func trackCardReaderReady() {
cardReaderReady = trackCurrentTime()

// As a side effect of knowing when the reader is ready, we track the elapsed from order creation
trackElapsedTimeFromOrderCreationToCardReady()
// As a side effect of knowing when the reader is ready, we track the elapsed from order sync (created or updated)
trackElapsedTimeFromOrderSyncToCardReady()
}

// The Stripe SDK returns multiple `.processing` events, but we want to capture the first one in the stream only.
Expand All @@ -97,8 +97,8 @@ final class POSCollectOrderPaymentAnalytics: CollectOrderPaymentAnalyticsTrackin
checkoutTapCount = 0
}

private func trackElapsedTimeFromOrderCreationToCardReady() {
let elapsedTime = cardReaderReady - orderCreated
private func trackElapsedTimeFromOrderSyncToCardReady() {
let elapsedTime = cardReaderReady - orderSync
analytics.track(event: .PointOfSale.cardReaderReadyForCardPayment(waitingTime: elapsedTime))
}
}
Expand All @@ -119,7 +119,7 @@ private extension POSCollectOrderPaymentAnalytics {
}

private func resetAllCountersOnInteractionStarted() {
orderCreated = 0
orderSync = 0
cardReaderReady = 0
cardReaderTapped = 0
resetCheckoutTapCountTracker()
Expand All @@ -131,7 +131,7 @@ private extension POSCollectOrderPaymentAnalytics {
// https://github.com/woocommerce/woocommerce-ios/issues/15149
extension CollectOrderPaymentAnalytics {
func trackCustomerInteractionStarted() { }
func trackOrderCreationSuccess() { }
func trackOrderSyncSuccess() { }
func trackCardReaderReady() { }
func trackCardReaderTapped() { }
func trackCheckoutTapped() { }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ extension WooAnalyticsEvent {
static let itemType = "product_type"
static let itemsInCart = "items_in_cart"
static let millisecondsSinceCustomerInteractionStarted = "milliseconds_since_customer_interaction_started"
static let millisecondsSinceOrderCreationSuccess = "milliseconds_since_order_creation_success"
static let millisecondsSinceOrderSyncSuccess = "milliseconds_since_order_sync_success"
static let millisecondsSinceReaderReadyToCollect = "milliseconds_since_reader_ready_to_collect_payment"
static let millisecondsSinceCardTapped = "milliseconds_since_card_tapped"
static let checkoutTapCount = "checkout_tap_count"
Expand Down Expand Up @@ -46,13 +46,13 @@ extension WooAnalyticsEvent {
}

static func cardPresentCollectPaymentSuccess(millisecondsSinceCustomerIteractionStarted: Double,
millisecondsSinceOrderCreationSuccess: Double,
millisecondsSinceOrderSyncSuccess: Double,
millisecondsSinceReaderReadyToCollect: Double,
millisecondsSinceCardTapped: Double,
checkoutTapCount: Int) -> WooAnalyticsEvent {
WooAnalyticsEvent(statName: .collectPaymentSuccess, properties: [
Key.millisecondsSinceCustomerInteractionStarted: "\(millisecondsSinceCustomerIteractionStarted)",
Key.millisecondsSinceOrderCreationSuccess: "\(millisecondsSinceOrderCreationSuccess)",
Key.millisecondsSinceOrderSyncSuccess: "\(millisecondsSinceOrderSyncSuccess)",
Key.millisecondsSinceReaderReadyToCollect: "\(millisecondsSinceReaderReadyToCollect)",
Key.millisecondsSinceCardTapped: "\(millisecondsSinceCardTapped)",
Key.checkoutTapCount: "\(checkoutTapCount)"
Expand Down
20 changes: 17 additions & 3 deletions WooCommerce/Classes/POS/Models/PointOfSaleAggregateModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,22 @@ private extension PointOfSaleAggregateModel {
collectOrderPaymentAnalyticsTracker.trackCustomerInteractionStarted()
}
}

// Tracks when the order is created or updated successfully
// pdfdoF-6hn#comment-7625-p2
func trackOrderSyncState(_ result: Result<SyncOrderState, Error>) {
switch result {
case .success(let syncState):
switch syncState {
case .newOrder, .orderUpdated:
collectOrderPaymentAnalyticsTracker.trackOrderSyncSuccess()
default:
break
}
case .failure:
break
}
}
}

// MARK: - Card payments
Expand Down Expand Up @@ -453,9 +469,7 @@ extension PointOfSaleAggregateModel {
let syncOrderResult = await orderController.syncOrder(for: cart, retryHandler: { [weak self] in
await self?.checkOut()
})
if case .success(.newOrder) = syncOrderResult {
collectOrderPaymentAnalyticsTracker.trackOrderCreationSuccess()
}
trackOrderSyncState(syncOrderResult)
await startPaymentWhenCardReaderConnected()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protocol CollectOrderPaymentAnalyticsTracking {
func trackReceiptPrintFailed(error: Error)

func trackCustomerInteractionStarted()
func trackOrderCreationSuccess()
func trackOrderSyncSuccess()
func trackCardReaderReady()
func trackCardReaderTapped()
func trackCheckoutTapped()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ final class MockCollectOrderPaymentAnalyticsTracker: CollectOrderPaymentAnalytic
// no-op
}

func trackOrderCreationSuccess() {
func trackOrderSyncSuccess() {
// no-op
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ struct POSCollectOrderPaymentAnalyticsTests {
let capturedPaymentData = CardPresentCapturedPaymentData(paymentMethod: .cardPresent(details: .fake()), receiptParameters: nil)
let expectedEvent = "card_present_collect_payment_success"
let expectedProperties = [
"milliseconds_since_order_creation_success",
"milliseconds_since_order_sync_success",
"milliseconds_since_reader_ready_to_collect_payment",
"milliseconds_since_card_tapped",
"milliseconds_since_customer_interaction_started",
Expand Down

0 comments on commit 1bafc53

Please sign in to comment.