From 013bf62f7c807d5ae648badef6c705ec061052ac Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 26 Jul 2017 14:48:36 -0400 Subject: [PATCH] Streamline analytics properties. // FREEBIE --- Signal/src/AppDelegate.m | 1 - SignalServiceKit/src/Util/OWSAnalytics.h | 2 - SignalServiceKit/src/Util/OWSAnalytics.m | 106 ++++++++--------------- 3 files changed, 38 insertions(+), 71 deletions(-) diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index d6c131d7c..f64715365 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -795,7 +795,6 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; [DeviceSleepManager.sharedInstance removeBlockWithBlockObject:self]; - [OWSAnalytics appLaunchDidComplete]; [AppVersion.instance appLaunchDidComplete]; [self ensureRootViewController]; diff --git a/SignalServiceKit/src/Util/OWSAnalytics.h b/SignalServiceKit/src/Util/OWSAnalytics.h index f49bc058e..1fd8aa2a1 100755 --- a/SignalServiceKit/src/Util/OWSAnalytics.h +++ b/SignalServiceKit/src/Util/OWSAnalytics.h @@ -38,8 +38,6 @@ typedef NS_ENUM(NSUInteger, OWSAnalyticsSeverity) { + (void)appLaunchDidBegin; -+ (void)appLaunchDidComplete; - + (long)orderOfMagnitudeOf:(long)value; @end diff --git a/SignalServiceKit/src/Util/OWSAnalytics.m b/SignalServiceKit/src/Util/OWSAnalytics.m index 3106f5259..4fa32b049 100755 --- a/SignalServiceKit/src/Util/OWSAnalytics.m +++ b/SignalServiceKit/src/Util/OWSAnalytics.m @@ -3,20 +3,14 @@ // #import "OWSAnalytics.h" -#import "AppVersion.h" #import "OWSQueues.h" #import "TSStorageManager.h" #import #import +#include NS_ASSUME_NONNULL_BEGIN -#if TARGET_IPHONE_SIMULATOR - -#define NO_SIGNAL_ANALYTICS - -#else - #ifdef DEBUG // TODO: Disable analytics for debug builds. @@ -24,14 +18,8 @@ NS_ASSUME_NONNULL_BEGIN #endif -#endif - NSString *const kOWSAnalytics_EventsCollection = @"kOWSAnalytics_EventsCollection"; -NSString *const kOWSAnalytics_Collection = @"kOWSAnalytics_Collection"; -NSString *const kOWSAnalytics_KeyLaunchCount = @"kOWSAnalytics_KeyLaunchCount"; -NSString *const kOWSAnalytics_KeyLaunchCompleteCount = @"kOWSAnalytics_KeyLaunchCompleteCount"; - // Percentage of analytics events to discard. 0 <= x <= 100. const int kOWSAnalytics_DiscardFrequency = 0; @@ -54,9 +42,6 @@ NSString *NSStringForOWSAnalyticsSeverity(OWSAnalyticsSeverity severity) @property (atomic) BOOL hasRequestInFlight; -@property (atomic) NSNumber *launchCount; -@property (atomic) NSNumber *launchCompleteCount; - @end #pragma mark - @@ -276,25 +261,46 @@ NSString *NSStringForOWSAnalyticsSeverity(OWSAnalyticsSeverity severity) return queue; } +- (NSString *)operatingSystemVersionString +{ + static NSString *result = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSOperatingSystemVersion operatingSystemVersion = [[NSProcessInfo processInfo] operatingSystemVersion]; + result = [NSString stringWithFormat:@"%zd.%zd.%zd", + operatingSystemVersion.majorVersion, + operatingSystemVersion.minorVersion, + operatingSystemVersion.patchVersion]; + }); + return result; +} + +- (NSString *)deviceHardwareModel +{ + static NSString *result = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + size_t size; + char *kHwModel = "hw.model"; + sysctlbyname(kHwModel, NULL, &size, NULL, 0); + + char *answer = malloc(size); + sysctlbyname(kHwModel, answer, &size, NULL, 0); + + result = [NSString stringWithCString:answer encoding:NSUTF8StringEncoding]; + + free(answer); + }); + return result; +} + - (NSDictionary *)eventSuperProperties { NSMutableDictionary *result = [NSMutableDictionary new]; - if (AppVersion.instance.firstAppVersion) { - result[@"app_version_first"] = AppVersion.instance.firstAppVersion; - } - if (AppVersion.instance.lastAppVersion) { - result[@"app_version_last"] = AppVersion.instance.lastAppVersion; - } - if (AppVersion.instance.currentAppVersion) { - result[@"app_version_current"] = AppVersion.instance.currentAppVersion; - } - NSNumber *launchCount = self.launchCount; - if (launchCount) { - result[@"launch_count"] = @([self orderOfMagnitudeOf:launchCount.longValue]); - } - // TODO: Order of magnitude: thread count. - // TODO: Order of magnitude: total message count. - + result[@"app_version"] = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + result[@"platform"] = @"ios"; + result[@"ios_version"] = self.operatingSystemVersionString; + result[@"device_model"] = self.deviceHardwareModel; return result; } @@ -426,42 +432,6 @@ NSString *NSStringForOWSAnalyticsSeverity(OWSAnalyticsSeverity severity) - (void)appLaunchDidBegin { OWSProdInfo(@"app_launch"); - - [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { - NSNumber *oldLaunchCount = - [transaction objectForKey:kOWSAnalytics_KeyLaunchCount inCollection:kOWSAnalytics_Collection]; - NSNumber *newLaunchCount = @(oldLaunchCount.longValue + 1); - self.launchCount = newLaunchCount; - - NSNumber *oldLaunchCompleteCount = - [transaction objectForKey:kOWSAnalytics_KeyLaunchCompleteCount inCollection:kOWSAnalytics_Collection]; - self.launchCompleteCount = @(oldLaunchCompleteCount.longValue); - }]; - [self.dbConnection - asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { - [transaction setObject:self.launchCount - forKey:kOWSAnalytics_KeyLaunchCount - inCollection:kOWSAnalytics_Collection]; - }]; -} - -+ (void)appLaunchDidComplete -{ - [self.sharedInstance appLaunchDidComplete]; -} - -- (void)appLaunchDidComplete -{ - OWSProdInfo(@"app_launch_complete"); - - self.launchCompleteCount = @(self.launchCompleteCount.longValue + 1); - - [self.dbConnection - asyncReadWriteWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) { - [transaction setObject:self.launchCompleteCount - forKey:kOWSAnalytics_KeyLaunchCompleteCount - inCollection:kOWSAnalytics_Collection]; - }]; } #pragma mark - Logging