Bartosz Dziewoński has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/284832

Change subject: Log all failing API responses when uploading
......................................................................

Log all failing API responses when uploading

This is mostly separate from the current code. The purpose of logging
we had so far was to log the errors users see. The purpose of this is
to log the exact API responses, so that we can better guess what
caused the error seen by the user.

Bug: T130485
Change-Id: I9853e618d5d3e3c7e1297d768ff30db0f95e1dd4
---
M UploadWizard.php
M resources/handlers/mw.ApiUploadFormDataHandler.js
M resources/handlers/mw.ApiUploadPostHandler.js
M resources/mw.UploadWizardDetails.js
M resources/uw.EventFlowLogger.js
5 files changed, 67 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/UploadWizard 
refs/changes/32/284832/1

diff --git a/UploadWizard.php b/UploadWizard.php
index 78efff6..3cb77e9 100644
--- a/UploadWizard.php
+++ b/UploadWizard.php
@@ -142,6 +142,9 @@
                ),
                'dependencies' => array(
                        'uw.base',
+                       'json',
+                       'es5-shim',
+                       'oojs',
                ),
                'localBasePath' => __DIR__,
                'remoteExtPath' => 'UploadWizard',
diff --git a/resources/handlers/mw.ApiUploadFormDataHandler.js 
b/resources/handlers/mw.ApiUploadFormDataHandler.js
index 52075a3..e2bde28 100644
--- a/resources/handlers/mw.ApiUploadFormDataHandler.js
+++ b/resources/handlers/mw.ApiUploadFormDataHandler.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, uw ) {
        /**
         * Represents an object which configures an html5 FormData object to 
upload.
         * Large files are uploaded in chunks.
@@ -67,11 +67,15 @@
                                                        
handler.upload.setTransportProgress( fraction );
                                                }
                                        } ).then( function ( result ) {
+                                               if ( !result || result.error || 
( result.upload && result.upload.warnings ) ) {
+                                                       
uw.eventFlowLogger.logApiError( 'file', result );
+                                               }
                                                handler.upload.setTransported( 
result );
                                        } );
-                       }, function ( code, info ) {
+                       }, function ( code, info, result ) {
+                               uw.eventFlowLogger.logApiError( 'file', result 
);
                                handler.upload.setError( code, info );
                        } );
                }
        };
-}( mediaWiki ) );
+}( mediaWiki, mediaWiki.uploadWizard ) );
diff --git a/resources/handlers/mw.ApiUploadPostHandler.js 
b/resources/handlers/mw.ApiUploadPostHandler.js
index 50e48ac..181f4ba 100644
--- a/resources/handlers/mw.ApiUploadPostHandler.js
+++ b/resources/handlers/mw.ApiUploadPostHandler.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, uw ) {
        /**
         * Represents an object which send a direct request to the MediaWiki 
API.
         * This is used when there is no actual file payload (eg. Flickr import)
@@ -25,12 +25,16 @@
                                url: this.upload.providedFile.url,
                                filename: this.beginTime.toString() + 
this.upload.filename
                        } )
-                       .fail( function ( code, result ) {
-                               handler.upload.setError( result.error.code, 
result.error.info );
+                       .fail( function ( code, info, result ) {
+                               uw.eventFlowLogger.logApiError( 'file', result 
);
+                               handler.upload.setError( code, info );
                        } )
                        .done( function ( result ) {
+                               if ( !result || result.error || ( result.upload 
&& result.upload.warnings ) ) {
+                                       uw.eventFlowLogger.logApiError( 'file', 
result );
+                               }
                                handler.upload.setTransported( result );
                        } );
                }
        };
-}( mediaWiki ) );
+}( mediaWiki, mediaWiki.uploadWizard ) );
diff --git a/resources/mw.UploadWizardDetails.js 
b/resources/mw.UploadWizardDetails.js
index e05c42c..1d7dae9 100644
--- a/resources/mw.UploadWizardDetails.js
+++ b/resources/mw.UploadWizardDetails.js
@@ -874,10 +874,13 @@
                                return details.upload.api.postWithEditToken( 
params )
                                        .then(
                                                function ( result ) {
+                                                       if ( !result || 
result.error || ( result.upload && result.upload.warnings ) ) {
+                                                               
uw.eventFlowLogger.logApiError( 'details', result );
+                                                       }
                                                        return 
details.handleSubmitResult( result, params );
                                                },
-
-                                               function ( code, info ) {
+                                               function ( code, info, result ) 
{
+                                                       
uw.eventFlowLogger.logApiError( 'details', result );
                                                        details.upload.state = 
'error';
                                                        details.processError( 
code, info );
                                                        return 
$.Deferred().reject( code, info );
@@ -923,8 +926,14 @@
                                                                        
checkstatus: true,
                                                                        
filekey: details.upload.fileKey
                                                                } ).then( 
function ( result ) {
+                                                                       if ( 
!result || result.error || ( result.upload && result.upload.warnings ) ) {
+                                                                               
uw.eventFlowLogger.logApiError( 'details', result );
+                                                                       }
                                                                        return 
details.handleSubmitResult( result ).then( deferred.resolve, deferred.reject );
-                                                               }, 
deferred.reject );
+                                                               }, function ( 
code, info, result ) {
+                                                                       
uw.eventFlowLogger.logApiError( 'details', result );
+                                                                       
deferred.reject( code, info );
+                                                               } );
                                                        } else {
                                                                
deferred.resolve( 'aborted' );
                                                        }
@@ -969,8 +978,12 @@
                        } else if ( ignoreTheseWarnings ) {
                                params.ignorewarnings = 1;
                                return this.upload.api.postWithEditToken( 
params ).then( function ( result ) {
+                                       if ( !result || result.error || ( 
result.upload && result.upload.warnings ) ) {
+                                               uw.eventFlowLogger.logApiError( 
'details', result );
+                                       }
                                        return details.handleSubmitResult( 
result );
                                }, function ( code, info ) {
+                                       uw.eventFlowLogger.logApiError( 
'details', result );
                                        return $.Deferred().reject( code, info 
);
                                } );
                        } else if ( result && result.upload.warnings ) {
@@ -992,8 +1005,12 @@
                                                // let's steamroll over it and 
re-call this handler.
                                                params.ignorewarnings = true;
                                                return 
this.upload.api.postWithEditToken( params ).then( function ( result ) {
+                                                       if ( !result || 
result.error || ( result.upload && result.upload.warnings ) ) {
+                                                               
uw.eventFlowLogger.logApiError( 'details', result );
+                                                       }
                                                        return 
details.handleSubmitResult( result );
                                                }, function ( code, info ) {
+                                                       
uw.eventFlowLogger.logApiError( 'details', result );
                                                        return 
$.Deferred().reject( code, info );
                                                } );
                                        } else {
diff --git a/resources/uw.EventFlowLogger.js b/resources/uw.EventFlowLogger.js
index 5914c8a..9ac739a 100644
--- a/resources/uw.EventFlowLogger.js
+++ b/resources/uw.EventFlowLogger.js
@@ -132,6 +132,35 @@
                } );
        };
 
+       uw.EventFlowLogger.prototype.logApiError = function ( step, result ) {
+               var code, message;
+               if ( !result ) {
+                       code = 'api/empty';
+               } else if ( result.error ) {
+                       code = 'api/error/' + result.error.code;
+               } else if ( result.upload ) {
+                       code = 'api/warning/' + Object.keys( 
result.upload.warnings || {} ).sort().join( ',' );
+               } else {
+                       code = '???';
+               }
+               if ( result && result.upload && result.upload.imageinfo ) {
+                       // This can contain stupid amounts of data and exceed 
the length of what EventLogging can log.
+                       // Let's hope we won't need to look at anything in 
there.
+                       result = OO.copy( result );
+                       delete result.upload.imageinfo;
+               }
+               try {
+                       message = JSON.stringify( result );
+               } catch ( er ) {
+                       message = String( result );
+               }
+               this.log( 'UploadWizardErrorFlowEvent', {
+                       step: step,
+                       code: code,
+                       message: message
+               } );
+       };
+
        /**
         * Logs an upload event.
         *

-- 
To view, visit https://gerrit.wikimedia.org/r/284832
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9853e618d5d3e3c7e1297d768ff30db0f95e1dd4
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: Bartosz Dziewoński <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to