Reading depth hook should send additional sampling bucket parameter

The hook that enables the Reading depth test should send an
additional paramter that specifies which test bucket the hook
being is calling from.

Bug: T191532
Change-Id: Ifd9f43220c476ece8a0c0cee46b62b58a717c616
This commit is contained in:
Jan Drewniak 2018-07-02 15:15:04 +02:00 committed by Jdlrobson
parent b340e04a22
commit e27cbf2a49
4 changed files with 40 additions and 25 deletions

View File

@ -122,11 +122,11 @@ Group membership can be debugged from the console via:
```js
const AB = mw.mobileFrontend.require('skins.minerva.scripts/AB')
new AB(
'WME.PageIssuesAB',
mw.config.get( 'wgMinervaABSamplingRate', 0 ),
mw.user.sessionId()
).getBucket()
new AB({
testName: 'WME.PageIssuesAB',
samplingRate: mw.config.get( 'wgMinervaABSamplingRate', 0 ),
sessionId: mw.user.sessionId()
}).getBucket()
```
And since session ID is an input in calculating the group, reassignment occurs

View File

@ -11,14 +11,21 @@
/**
* Buckets users based on params and exposes an `isEnabled` and `getBucket` method.
*
* @param {string} testName name of the AB-test.
* @param {number} samplingRate sampling rate for the AB-test.
* @param {number} sessionId session ID for user bucketing.
* @param {Object} config configuration object for AB test.
* @param {string} config.testName
* @param {number} config.samplingRate sampling rate for the AB-test.
* @param {number} config.sessionId session ID for user bucketing
* @param {function} [config.onABStart] function that triggers event-logging when user is either
* in bucket A or B.
* @constructor
*/
function AB( testName, samplingRate, sessionId ) {
function AB( config ) {
var CONTROL_BUCKET = 'control',
testName = config.testName,
samplingRate = config.samplingRate,
sessionId = config.sessionId,
onABStart = config.onABStart || function () {},
test = {
name: testName,
enabled: !!samplingRate,
@ -28,13 +35,6 @@
B: samplingRate / 2
}
};
/**
* Starts the AB-test and enters the user into the Reading Depth test.
*/
function startABTest() {
// See: https://gerrit.wikimedia.org/r/#/c/mediawiki/extensions/WikimediaEvents/+/437686/
mw.track( 'wikimedia.event.ReadingDepthSchema.enable' );
}
/**
* Gets the users AB-test bucket
@ -61,7 +61,7 @@
*/
function init() {
if ( isEnabled() ) {
startABTest();
onABStart( getBucket() );
}
}

View File

@ -6,11 +6,20 @@
NS_MAIN = 0,
NS_TALK = 1,
NS_CATEGORY = 14,
isInGroupB = new AB(
'WME.PageIssuesAB',
mw.config.get( 'wgMinervaABSamplingRate', 0 ),
mw.user.sessionId()
).getBucket() === 'B',
isInGroupB = new AB( {
testName: 'WME.PageIssuesAB',
samplingRate: mw.config.get( 'wgMinervaABSamplingRate', 0 ),
sessionId: mw.user.sessionId(),
onABStart: function ( bucket ) {
// See: https://gerrit.wikimedia.org/r/#/c/mediawiki/extensions/WikimediaEvents/+/437686/
var READING_DEPTH_BUCKET_KEYS = {
A: 'page-issues-a_sample',
B: 'page-issues-b_sample'
},
readingDepthBucket = READING_DEPTH_BUCKET_KEYS[ bucket ];
mw.track( 'wikimedia.event.ReadingDepthSchema.enable', readingDepthBucket );
}
} ).getBucket() === 'B',
Icon = M.require( 'mobile.startup/Icon' );
( function () {

View File

@ -1,8 +1,12 @@
( function ( M ) {
var AB = M.require( 'skins.minerva.scripts/AB' ),
aBName = 'WME.MinervaABTest',
samplingRate = 0.5;
util = M.require( 'mobile.startup/util' ),
defaultConfig = {
testName: 'WME.MinervaABTest',
samplingRate: 0.5,
sessionId: mw.user.generateRandomSessionId()
};
QUnit.module( 'Minerva AB-test' );
@ -14,10 +18,12 @@
},
maxUsers = 1000,
bucketingTest,
config,
i;
for ( i = 0; i < maxUsers; i++ ) {
bucketingTest = new AB( aBName, samplingRate, mw.user.generateRandomSessionId() );
config = util.extend( {}, defaultConfig, { sessionId: mw.user.generateRandomSessionId() } );
bucketingTest = new AB( config );
userBuckets[ bucketingTest.getBucket() ] += 1;
}