Gergő Tisza has uploaded a new change for review.

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

Change subject: Add sampling to unsampled event logging
......................................................................

Add sampling to unsampled event logging

Has issues:
- needs dependency injection
- needs to be DRY
- should not load mw.eventLogging when we are not in sample

Due to urgency this will be fixed in another commit.

Change-Id: I0df067a619109a7c945f82c8d33fa2e621217f0b
Mingle: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/619
---
M MultimediaViewer.php
M MultimediaViewerHooks.php
M resources/mmv/mmv.DurationLogger.js
M resources/mmv/mmv.logger.js
M tests/qunit/mmv/mmv.DurationLogger.test.js
5 files changed, 38 insertions(+), 4 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MultimediaViewer 
refs/changes/66/133766/1

diff --git a/MultimediaViewer.php b/MultimediaViewer.php
index 6952143..a1f9f3c 100644
--- a/MultimediaViewer.php
+++ b/MultimediaViewer.php
@@ -25,6 +25,17 @@
        $wgNetworkPerformanceSamplingFactor = false;
 }
 
+if ( !isset( $wgMediaViewerSamplingFactor ) ) {
+       /**
+        * If set, records user activity and loading times. A value of 1000 
means there will be an
+        * 1:1000 chance to enable logging on page load; for that page, either 
all or none of the
+        * events will be logged.
+        * False if unset.
+        * @var int|bool
+        */
+       $wgMediaViewerSamplingFactor = false;
+}
+
 if ( !isset( $wgMediaViewerIsInBeta ) ) {
        /** @var bool: If set, Media Viewer will try to use BetaFeatures. False 
if unset. **/
        $wgMediaViewerIsInBeta = false;
diff --git a/MultimediaViewerHooks.php b/MultimediaViewerHooks.php
index a19b954..7227421 100644
--- a/MultimediaViewerHooks.php
+++ b/MultimediaViewerHooks.php
@@ -144,8 +144,8 @@
         * @return bool
         */
        public static function resourceLoaderGetConfigVars( &$vars ) {
-               global $wgAPIPropModules, $wgNetworkPerformanceSamplingFactor, 
$wgMediaViewerIsInBeta,
-                          $wgMediaViewerUseThumbnailGuessing, 
$wgMediaViewerShowSurvey;
+               global $wgAPIPropModules, $wgNetworkPerformanceSamplingFactor, 
$wgMediaViewerSamplingFactor,
+                          $wgMediaViewerIsInBeta, 
$wgMediaViewerUseThumbnailGuessing, $wgMediaViewerShowSurvey;
                $vars['wgMultimediaViewer'] = array(
                        'infoLink' => self::$infoLink,
                        'discussionLink' => self::$discussionLink,
@@ -153,6 +153,7 @@
                        'globalUsageAvailable' => isset( 
$wgAPIPropModules['globalusage'] ),
                        'useThumbnailGuessing' => 
(bool)$wgMediaViewerUseThumbnailGuessing,
                        'showSurvey' => (bool)$wgMediaViewerShowSurvey,
+                       'samplingFactor' => $wgMediaViewerSamplingFactor,
                );
                $vars['wgNetworkPerformanceSamplingFactor'] = 
$wgNetworkPerformanceSamplingFactor;
                $vars['wgMediaViewer'] = true;
diff --git a/resources/mmv/mmv.DurationLogger.js 
b/resources/mmv/mmv.DurationLogger.js
index 5a75abe..0905ad5 100644
--- a/resources/mmv/mmv.DurationLogger.js
+++ b/resources/mmv/mmv.DurationLogger.js
@@ -98,7 +98,10 @@
                                        e.country = self.Geo.country;
                                }
 
-                               self.eventLog.logEvent( self.schema, e );
+                               if ( self.isInSample() ) {
+                                       self.eventLog.logEvent( self.schema, e 
);
+                               }
+
                                mw.log( message );
                        } );
                }
@@ -138,5 +141,14 @@
                return waitForEventLog;
        };
 
+       L.isInSample = function () {
+               var factor = mw.config.get( 'wgMultimediaViewer' 
).samplingFactor;
+
+               if ( !$.isNumeric( factor ) || factor < 1 ) {
+                       return false;
+               }
+               return Math.floor( Math.random() * factor ) === 0;
+       };
+
        mw.mmv.durationLogger = new DurationLogger();
 }( mediaWiki, jQuery ) );
\ No newline at end of file
diff --git a/resources/mmv/mmv.logger.js b/resources/mmv/mmv.logger.js
index 4a9d18a..2f12138 100644
--- a/resources/mmv/mmv.logger.js
+++ b/resources/mmv/mmv.logger.js
@@ -75,7 +75,7 @@
 
                mw.log( translatedAction );
 
-               if ( mw.eventLog && !skipEventLog ) {
+               if ( mw.eventLog && !skipEventLog && this.isInSample() ) {
                        return mw.eventLog.logEvent( 'MediaViewer', {
                                version: '1.1',
                                action: action
@@ -85,5 +85,14 @@
                return $.Deferred().resolve();
        };
 
+       L.isInSample = function () {
+               var factor = mw.config.get( 'wgMultimediaViewer' 
).samplingFactor;
+
+               if ( !$.isNumeric( factor ) || factor < 1 ) {
+                       return false;
+               }
+               return Math.floor( Math.random() * factor ) === 0;
+       };
+
        mw.mmv.logger = new Logger();
 }( mediaWiki, jQuery ) );
diff --git a/tests/qunit/mmv/mmv.DurationLogger.test.js 
b/tests/qunit/mmv/mmv.DurationLogger.test.js
index 629f57a..41e3ca1 100755
--- a/tests/qunit/mmv/mmv.DurationLogger.test.js
+++ b/tests/qunit/mmv/mmv.DurationLogger.test.js
@@ -2,6 +2,7 @@
        QUnit.module( 'mmv.DurationLogger', QUnit.newMwEnvironment({
                setup: function () {
                        this.clock = this.sandbox.useFakeTimers();
+                       mw.config.get( 'wgMultimediaViewer' ).samplingFactor = 
1;
                }
        } ) );
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0df067a619109a7c945f82c8d33fa2e621217f0b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MultimediaViewer
Gerrit-Branch: master
Gerrit-Owner: GergÅ‘ Tisza <[email protected]>

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

Reply via email to