Brion VIBBER has submitted this change and it was merged. Change subject: Added more logging events. ......................................................................
Added more logging events. Fixed bug where edit right arrow tap after captcha or abuse filter messages were shown would cause the sign-on/save-anon choice buttons to be presented again instead of taking proper progressive action. Change-Id: I675dd35bdb931f610f7a6bb4982ff23255a2c34d --- M wikipedia/Categories/UIViewController+LogEvent.h M wikipedia/Categories/UIViewController+LogEvent.m M wikipedia/Data/Operations/LogEventOp.m M wikipedia/View Controllers/AccountCreation/AccountCreationViewController.m M wikipedia/View Controllers/Login/LoginViewController.m M wikipedia/View Controllers/Preview/PreviewAndSaveViewController.m M wikipedia/View Controllers/TopNav/NavController.h M wikipedia/View Controllers/TopNav/NavController.m M wikipedia/View Controllers/WebView/WebViewController.m 9 files changed, 159 insertions(+), 7 deletions(-) Approvals: Brion VIBBER: Verified; Looks good to me, approved diff --git a/wikipedia/Categories/UIViewController+LogEvent.h b/wikipedia/Categories/UIViewController+LogEvent.h index 8bb5785..cb099b3 100644 --- a/wikipedia/Categories/UIViewController+LogEvent.h +++ b/wikipedia/Categories/UIViewController+LogEvent.h @@ -6,6 +6,7 @@ @interface UIViewController (LogEvent) --(void)logEvent:(NSDictionary *)event schema:(EventLogSchema)schema; +-(void)logEvent: (NSDictionary *)event + schema: (EventLogSchema)schema; @end diff --git a/wikipedia/Categories/UIViewController+LogEvent.m b/wikipedia/Categories/UIViewController+LogEvent.m index 35b61d3..58febfe 100644 --- a/wikipedia/Categories/UIViewController+LogEvent.m +++ b/wikipedia/Categories/UIViewController+LogEvent.m @@ -6,9 +6,12 @@ @implementation UIViewController (LogEvent) --(void)logEvent:(NSDictionary *)event schema:(EventLogSchema)schema +-(void)logEvent: (NSDictionary *)event + schema: (EventLogSchema)schema { - LogEventOp *logOp = [[LogEventOp alloc] initWithSchema:schema event:event]; + LogEventOp *logOp = [[LogEventOp alloc] initWithSchema: schema + event: event]; + [[QueuesSingleton sharedInstance].eventLoggingQ addOperation:logOp]; } diff --git a/wikipedia/Data/Operations/LogEventOp.m b/wikipedia/Data/Operations/LogEventOp.m index addfff7..31b9083 100644 --- a/wikipedia/Data/Operations/LogEventOp.m +++ b/wikipedia/Data/Operations/LogEventOp.m @@ -7,6 +7,8 @@ #define LOG_ENDPOINT @"https://bits.wikimedia.org/event.gif" +//#define LOG_ENDPOINT @"http://localhost:8000/event.gif" + @implementation LogEventOp -(NSDictionary *)getSchemaData diff --git a/wikipedia/View Controllers/AccountCreation/AccountCreationViewController.m b/wikipedia/View Controllers/AccountCreation/AccountCreationViewController.m index f27baa2..7df4311 100644 --- a/wikipedia/View Controllers/AccountCreation/AccountCreationViewController.m +++ b/wikipedia/View Controllers/AccountCreation/AccountCreationViewController.m @@ -15,6 +15,7 @@ #import "LoginViewController.h" #import "UINavigationController+SearchNavStack.h" #import "WMF_Colors.h" +#import "UIViewController+LogEvent.h" #define NAV ((NavController *)self.navigationController) @@ -71,6 +72,9 @@ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(navItemTappedNotification:) name:@"NavItemTapped" object:nil]; [self.usernameField becomeFirstResponder]; + + [self logEvent: @{@"action": @"start"} + schema: LOG_SCHEMA_CREATEACCOUNT]; //[self prepopulateTextFieldsForDebugging]; } @@ -153,7 +157,11 @@ if (_showCaptchaContainer != showCaptchaContainer) { _showCaptchaContainer = showCaptchaContainer; if (showCaptchaContainer){ - [self.captchaViewController.captchaTextBox performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.4f]; + [self.captchaViewController.captchaTextBox performSelector: @selector(becomeFirstResponder) + withObject: nil afterDelay:0.4f]; + + [self logEvent: @{@"action": @"captchaShown"} + schema: LOG_SCHEMA_CREATEACCOUNT]; } } } @@ -312,6 +320,9 @@ //NSLog(@"AccountCreationOp result = %@", result); + [self logEvent: @{@"action": @"accountCreated"} + schema: LOG_SCHEMA_CREATEACCOUNT]; + dispatch_async(dispatch_get_main_queue(), ^(){ [self showAlert:result]; [self showAlert:@""]; @@ -327,6 +338,12 @@ } errorBlock: ^(NSError *error){ [self showAlert:error.localizedDescription]; + [self logEvent: @{@"action": @"error"} + schema: LOG_SCHEMA_CREATEACCOUNT]; + + [self logEvent: @{@"errorText": error.localizedDescription} + schema: LOG_SCHEMA_CREATEACCOUNT]; + switch (error.code) { case ACCOUNT_CREATION_ERROR_NEEDS_CAPTCHA:{ self.captchaId = error.userInfo[@"captchaId"]; diff --git a/wikipedia/View Controllers/Login/LoginViewController.m b/wikipedia/View Controllers/Login/LoginViewController.m index 96fd8f9..4be9318 100644 --- a/wikipedia/View Controllers/Login/LoginViewController.m +++ b/wikipedia/View Controllers/Login/LoginViewController.m @@ -13,6 +13,7 @@ #import "AccountCreationViewController.h" #import "UIButton+ColorMask.h" #import "WMF_Colors.h" +#import "UIViewController+LogEvent.h" #define NAV ((NavController *)self.navigationController) @@ -125,10 +126,26 @@ // Listen for nav bar taps. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(navItemTappedNotification:) name:@"NavItemTapped" object:nil]; + + [self logEvent: @{@"action": @"start"} + schema: LOG_SCHEMA_LOGIN]; + + if (NAV.isEditorOnNavstack) { + [self logEvent: @{@"source": @"edit"} + schema: LOG_SCHEMA_LOGIN]; + }else{ + [self logEvent: @{@"source": @"navigation"} + schema: LOG_SCHEMA_LOGIN]; + } } -(void)save { + if (NAV.isEditorOnNavstack) { + [self logEvent: @{@"action": @"loginAttempt"} + schema: LOG_SCHEMA_EDIT]; + } + [self loginWithUserName: self.usernameField.text password: self.passwordField.text onSuccess: ^{ @@ -203,6 +220,14 @@ [self cloneSessionCookies]; //printCookies(); + + [self logEvent: @{@"action": @"login"} + schema: LOG_SCHEMA_LOGIN]; + + if (NAV.isEditorOnNavstack) { + [self logEvent: @{@"action": @"loginSuccess"} + schema: LOG_SCHEMA_EDIT]; + } } cancelledBlock: ^(NSError *error){ @@ -216,6 +241,16 @@ [self showAlert:error.localizedDescription]; [[NSOperationQueue mainQueue] addOperationWithBlock:failBlock]; + + + [self logEvent: @{@"action": @"error"} + schema: LOG_SCHEMA_LOGIN]; + + if (NAV.isEditorOnNavstack) { + [self logEvent: @{@"action": @"loginFailure"} + schema: LOG_SCHEMA_EDIT]; + } + }]; @@ -228,6 +263,9 @@ NSLog(@"loginTokenOp token = %@", tokenRetrieved); loginOp.token = tokenRetrieved; + [self logEvent: @{@"loginSessionToken": tokenRetrieved} + schema: LOG_SCHEMA_LOGIN]; + } cancelledBlock: ^(NSError *error){ [self showAlert:@""]; @@ -239,6 +277,10 @@ [self showAlert:error.localizedDescription]; [[NSOperationQueue mainQueue] addOperationWithBlock:failBlock]; + + [self logEvent: @{@"errorText": error.localizedDescription} + schema: LOG_SCHEMA_LOGIN]; + }]; @@ -278,6 +320,9 @@ - (IBAction)createAccountButtonPushed:(id)sender { + [self logEvent: @{@"action": @"createAccountAttempt"} + schema: LOG_SCHEMA_LOGIN]; + AccountCreationViewController *createAcctVC = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"AccountCreationViewController"]; [self.navigationController pushViewController:createAcctVC animated:YES]; } diff --git a/wikipedia/View Controllers/Preview/PreviewAndSaveViewController.m b/wikipedia/View Controllers/Preview/PreviewAndSaveViewController.m index 44deed1..37bc1b7 100644 --- a/wikipedia/View Controllers/Preview/PreviewAndSaveViewController.m +++ b/wikipedia/View Controllers/Preview/PreviewAndSaveViewController.m @@ -25,6 +25,7 @@ #import "Defines.h" #import "WMF_Colors.h" #import "CommunicationBridge.h" +#import "UIViewController+LogEvent.h" #define NAV ((NavController *)self.navigationController) @@ -81,11 +82,23 @@ switch (tappedItem.tag) { case NAVBAR_BUTTON_ARROW_LEFT: [self.navigationController popViewControllerAnimated:YES]; + + if(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_WARNING){ + [self logEvent: @{@"action": @"abuseFilterWarningBack"} + schema: LOG_SCHEMA_EDIT]; + } + break; case NAVBAR_BUTTON_CHECK: case NAVBAR_BUTTON_ARROW_RIGHT: /* for captcha submit button */ { [self saveOrShowSignInActionSheetIfNotLoggedIn]; + + if(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_WARNING){ + [self logEvent: @{@"action": @"abuseFilterWarningIgnore"} + schema: LOG_SCHEMA_EDIT]; + } + } break; default: @@ -117,6 +130,9 @@ object: nil]; self.previewWebViewBottomConstraint.constant = EDIT_SUMMARY_DOCK_DISTANCE_FROM_BOTTOM; + + [self logEvent: @{@"action": @"preview"} + schema: LOG_SCHEMA_EDIT]; } -(void)htmlAlertWasHidden @@ -272,6 +288,10 @@ } break; case TOP_ACTION_SHEET_SAVE: + + [self logEvent: @{@"action": @"saveAnonExplicit"} + schema: LOG_SCHEMA_EDIT]; + [self save]; break; default: @@ -284,7 +304,15 @@ - (void)saveOrShowSignInActionSheetIfNotLoggedIn { - if(![SessionSingleton sharedInstance].keychainCredentials.userName){ + if( + ![SessionSingleton sharedInstance].keychainCredentials.userName + && + !(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_CAPTCHA) + && + !(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_WARNING) + && + !(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_DISALLOW) + ){ NAV.navBarMode = NAVBAR_MODE_EDIT_WIKITEXT_LOGIN_OR_SAVE_ANONYMOUSLY; @@ -316,6 +344,15 @@ - (void)save { + [self logEvent: @{@"action": @"save"} + schema: LOG_SCHEMA_EDIT]; + + NSString *userName = [SessionSingleton sharedInstance].keychainCredentials.userName; + if (userName) { + [self logEvent: @{@"userName": userName} + schema: LOG_SCHEMA_EDIT]; + } + NSString *editSummary = [self.editSummaryViewController getSummary]; // Use static flag to prevent save when save already in progress. @@ -343,6 +380,11 @@ }]; } + if(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_CAPTCHA){ + [self logEvent: @{@"action": @"captchaSolve"} + schema: LOG_SCHEMA_EDIT]; + } + } cancelledBlock:^(NSError *error){ NSString *errorMsg = error.localizedDescription; [self showAlert:errorMsg]; @@ -356,6 +398,12 @@ switch (error.code) { case WIKITEXT_UPLOAD_ERROR_NEEDS_CAPTCHA: { + + if(NAV.navBarMode == NAVBAR_MODE_EDIT_WIKITEXT_CAPTCHA){ + [self logEvent: @{@"action": @"captchaFailure"} + schema: LOG_SCHEMA_EDIT]; + } + // If the server said a captcha was required, present the captcha image. NSString *captchaUrl = error.userInfo[@"captchaUrl"]; NSString *captchaId = error.userInfo[@"captchaId"]; @@ -418,10 +466,18 @@ NAV.navBarMode = NAVBAR_MODE_EDIT_WIKITEXT_DISALLOW; bannerImage = @"abuse-filter-disallowed.png"; bannerColor = WMF_COLOR_RED; + + [self logEvent: @{@"action": @"abuseFilterError"} + schema: LOG_SCHEMA_EDIT]; + }else{ NAV.navBarMode = NAVBAR_MODE_EDIT_WIKITEXT_WARNING; bannerImage = @"abuse-filter-flag-white.png"; bannerColor = WMF_COLOR_ORANGE; + + [self logEvent: @{@"action": @"abuseFilterWarning"} + schema: LOG_SCHEMA_EDIT]; + } NSString *restyledWarningHtml = [self restyleAbuseFilterWarningHtml:warningHtml]; @@ -432,6 +488,17 @@ ]; }); } + break; + + case WIKITEXT_UPLOAD_ERROR_SERVER: + case WIKITEXT_UPLOAD_ERROR_UNKNOWN: + + [self logEvent: @{@"action": @"error"} + schema: LOG_SCHEMA_EDIT]; + + [self logEvent: @{@"errorText": error.localizedDescription} + schema: LOG_SCHEMA_EDIT]; + break; default: @@ -456,6 +523,9 @@ //NSLog(@"article.domain = %@", article.domain); editTokens[article.domain] = editToken; [SessionSingleton sharedInstance].keychainCredentials.editTokens = editTokens; + + [self logEvent: @{@"editSessionToken": editToken} + schema: LOG_SCHEMA_EDIT]; } }]; } @@ -527,6 +597,9 @@ -(void)revealCaptcha { + [self logEvent: @{@"action": @"captchaShown"} + schema: LOG_SCHEMA_EDIT]; + [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.35]; [UIView setAnimationTransition: UIViewAnimationTransitionNone diff --git a/wikipedia/View Controllers/TopNav/NavController.h b/wikipedia/View Controllers/TopNav/NavController.h index 399b111..28c0f20 100644 --- a/wikipedia/View Controllers/TopNav/NavController.h +++ b/wikipedia/View Controllers/TopNav/NavController.h @@ -47,6 +47,7 @@ @property (nonatomic) NavBarStyle navBarStyle; @property (nonatomic) NavBarMode navBarMode; +@property (nonatomic, readonly) BOOL isEditorOnNavstack; -(id)getNavBarItem:(NavBarItemTag)tag; diff --git a/wikipedia/View Controllers/TopNav/NavController.m b/wikipedia/View Controllers/TopNav/NavController.m index 7e15691..8195975 100644 --- a/wikipedia/View Controllers/TopNav/NavController.m +++ b/wikipedia/View Controllers/TopNav/NavController.m @@ -19,6 +19,7 @@ #import "SessionSingleton.h" #import "WebViewController.h" #import "UIView+TemporaryAnimatedXF.h" +#import "SectionEditorViewController.h" @interface NavController (){ @@ -791,4 +792,12 @@ } } +#pragma mark Is editing + +-(BOOL)isEditorOnNavstack +{ + id editVC = [self searchNavStackForViewControllerOfClass:[SectionEditorViewController class]]; + return editVC ? YES : NO; +} + @end diff --git a/wikipedia/View Controllers/WebView/WebViewController.m b/wikipedia/View Controllers/WebView/WebViewController.m index d7bef80..e93ad9c 100644 --- a/wikipedia/View Controllers/WebView/WebViewController.m +++ b/wikipedia/View Controllers/WebView/WebViewController.m @@ -184,6 +184,9 @@ -(void)showSectionEditor { + [self logEvent: @{@"action": @"start"} + schema: LOG_SCHEMA_EDIT]; + SectionEditorViewController *sectionEditVC = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"SectionEditorViewController"]; @@ -608,8 +611,6 @@ [self.bridge addListener:@"editClicked" withBlock:^(NSString *messageType, NSDictionary *payload) { [weakSelf tocHide]; weakSelf.sectionToEditIndex = [[payload[@"href"] stringByReplacingOccurrencesOfString:@"edit_section_" withString:@""] integerValue]; - - [weakSelf logEvent:@{@"action": @"start"} schema:LOG_SCHEMA_EDIT]; [weakSelf.self showSectionEditor]; }]; -- To view, visit https://gerrit.wikimedia.org/r/125935 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I675dd35bdb931f610f7a6bb4982ff23255a2c34d Gerrit-PatchSet: 3 Gerrit-Project: apps/ios/wikipedia Gerrit-Branch: master Gerrit-Owner: Mhurd <mh...@wikimedia.org> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits