Skip to content

Commit

Permalink
Add Sync Success Rate pixel (#2277)
Browse files Browse the repository at this point in the history
Task/Issue URL: https://app.asana.com/0/0/1206206145252506/f
https://app.asana.com/0/0/1204831721662171/f
Tech Design URL:
CC:

Description:

Add Sync success rate pixel.

Steps to test this PR:

Ensure pixel is sent once a day with correct parameters.
  • Loading branch information
bwaresiak authored Dec 20, 2023
1 parent e876d89 commit 0d613be
Show file tree
Hide file tree
Showing 12 changed files with 23 additions and 21 deletions.
4 changes: 0 additions & 4 deletions Core/BookmarksModelsErrorHandling.swift
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,6 @@ public class BookmarksModelsErrorHandling: EventMapping<BookmarksModelError> {

case .missingParent(let object):
domainEvent = .missingParent(object)
case .orphanedBookmarksPresent:
if let syncService, syncService.authState == .inactive {
domainEvent = .orphanedBookmarksPresent
}
}

if let domainEvent {
Expand Down
6 changes: 5 additions & 1 deletion Core/DailyPixel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,14 @@ public final class DailyPixel {
/// Does not append any suffix unlike the alternative function below
public static func fire(pixel: Pixel.Event,
withAdditionalParameters params: [String: String] = [:],
includedParameters: [Pixel.QueryParameters] = [.atb, .appVersion],
onComplete: @escaping (Swift.Error?) -> Void = { _ in }) {

if !pixel.hasBeenFiredToday(dailyPixelStorage: storage) {
Pixel.fire(pixel: pixel, withAdditionalParameters: params, onComplete: onComplete)
Pixel.fire(pixel: pixel,
withAdditionalParameters: params,
includedParameters: includedParameters,
onComplete: onComplete)
updatePixelLastFireDate(pixel: pixel)
} else {
onComplete(Error.alreadyFired)
Expand Down
2 changes: 0 additions & 2 deletions Core/PixelEvent.swift
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,6 @@ extension Pixel {
case indexOutOfRange(BookmarksModelError.ModelType)
case saveFailed(BookmarksModelError.ModelType)
case missingParent(BookmarksModelError.ObjectType)
case orphanedBookmarksPresent

case bookmarksCouldNotLoadDatabase
case bookmarksCouldNotPrepareDatabase
Expand Down Expand Up @@ -1036,7 +1035,6 @@ extension Pixel.Event {
case .indexOutOfRange(let modelType): return "m_d_bookmarks_index_out_of_range_\(modelType.rawValue)"
case .saveFailed(let modelType): return "m_d_bookmarks_view_model_save_failed_\(modelType.rawValue)"
case .missingParent(let objectType): return "m_d_bookmark_model_missing_parent_\(objectType.rawValue)"
case .orphanedBookmarksPresent: return "m_d_bookmarks_orphans_present"

case .bookmarksCouldNotLoadDatabase: return "m_d_bookmarks_could_not_load_database"
case .bookmarksCouldNotPrepareDatabase: return "m_d_bookmarks_could_not_prepare_database"
Expand Down
4 changes: 2 additions & 2 deletions Core/SyncMetricsEventsHandler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ public class SyncMetricsEventsHandler: EventMapping<MetricsEvent> {
super.init { event, _, _, _ in
switch event {
case .overrideEmailProtectionSettings:
Pixel.fire(pixel: .syncDuckAddressOverride)
Pixel.fire(pixel: .syncDuckAddressOverride, includedParameters: [.appVersion])
case .localTimestampResolutionTriggered(let feature):
Pixel.fire(pixel: .syncLocalTimestampResolutionTriggered(feature))
Pixel.fire(pixel: .syncLocalTimestampResolutionTriggered(feature), includedParameters: [.appVersion])
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -9221,7 +9221,7 @@
repositoryURL = "https://github.com/DuckDuckGo/BrowserServicesKit";
requirement = {
kind = exactVersion;
version = 95.0.0;
version = 96.0.0;
};
};
C14882EB27F211A000D59F0C /* XCRemoteSwiftPackageReference "SwiftSoup" */ = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/DuckDuckGo/BrowserServicesKit",
"state" : {
"revision" : "ae9e9180f74d92c83fc3cc1d2fc23f4855fb361c",
"version" : "95.0.0"
"revision" : "e5c9e31b19b3cf78e2b704a60882ba24b9bc680d",
"version" : "96.0.0"
}
},
{
Expand Down
10 changes: 7 additions & 3 deletions DuckDuckGo/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -289,9 +289,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {

isSyncInProgressCancellable = syncService.isSyncInProgressPublisher
.filter { $0 }
.prefix(1)
.sink { _ in
DailyPixel.fire(pixel: .syncDaily)
.sink { [weak syncService] _ in
DailyPixel.fire(pixel: .syncDaily, includedParameters: [.appVersion])
syncService?.syncDailyStats.sendStatsIfNeeded(handler: { params in
Pixel.fire(pixel: .syncSuccessRateDaily,
withAdditionalParameters: params,
includedParameters: [.appVersion])
})
}

#if APP_TRACKING_PROTECTION
Expand Down
2 changes: 1 addition & 1 deletion DuckDuckGo/SyncSettingsViewController+SyncDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ extension SyncSettingsViewController: SyncManagementViewModelDelegate {
self.dismissPresentedViewController()
self.showPreparingSync()
try await syncService.createAccount(deviceName: deviceName, deviceType: deviceType)
Pixel.fire(pixel: .syncSignupDirect)
Pixel.fire(pixel: .syncSignupDirect, includedParameters: [.appVersion])
self.rootView.model.syncEnabled(recoveryCode: recoveryCode)
self.refreshDevices()
navigationController?.topViewController?.dismiss(animated: true, completion: showRecoveryPDF)
Expand Down
4 changes: 2 additions & 2 deletions DuckDuckGo/SyncSettingsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ extension SyncSettingsViewController: ScanOrPasteCodeViewModelDelegate {
func loginAndShowDeviceConnected(recoveryKey: SyncCode.RecoveryKey) async throws {
let registeredDevices = try await syncService.login(recoveryKey, deviceName: deviceName, deviceType: deviceType)
mapDevices(registeredDevices)
Pixel.fire(pixel: .syncLogin)
Pixel.fire(pixel: .syncLogin, includedParameters: [.appVersion])
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.dismissVCAndShowRecoveryPDF()
}
Expand Down Expand Up @@ -281,7 +281,7 @@ extension SyncSettingsViewController: ScanOrPasteCodeViewModelDelegate {
showPreparingSync()
if syncService.account == nil {
try await syncService.createAccount(deviceName: deviceName, deviceType: deviceType)
Pixel.fire(pixel: .syncSignupConnect)
Pixel.fire(pixel: .syncSignupConnect, includedParameters: [.appVersion])
self.dismissVCAndShowRecoveryPDF()
shouldShowSyncEnabled = false
rootView.model.syncEnabled(recoveryCode: recoveryCode)
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/DuckUI/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ let package = Package(
targets: ["DuckUI"])
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "95.0.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "96.0.0"),
],
targets: [
.target(
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/SyncUI/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ let package = Package(
],
dependencies: [
.package(path: "../DuckUI"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "95.0.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "96.0.0"),
.package(url: "https://github.com/duckduckgo/DesignResourcesKit", exact: "2.0.0")
],
targets: [
Expand Down
2 changes: 1 addition & 1 deletion LocalPackages/Waitlist/Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ let package = Package(
targets: ["Waitlist", "WaitlistMocks"])
],
dependencies: [
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "95.0.0"),
.package(url: "https://github.com/duckduckgo/BrowserServicesKit", exact: "96.0.0"),
.package(url: "https://github.com/duckduckgo/DesignResourcesKit", exact: "2.0.0")
],
targets: [
Expand Down

0 comments on commit 0d613be

Please sign in to comment.