From 33a7484676e3258a49d3592c662e53c96df29baf Mon Sep 17 00:00:00 2001 From: jdlrobson Date: Tue, 2 Oct 2018 14:54:11 -0700 Subject: [PATCH] Move MainMenu click tracking schema from MobileFrontend to Minerva Additional changes: * Rename hook prefix from 'mf.' to 'minerva.' * Remove now unnecessary RL call Bug: T204584 Change-Id: I50619e71c5a98e95c8aed3c3f346d4cb8a70abbe --- README.md | 7 +++ includes/MinervaHooks.php | 2 + resources/skins.minerva.mainMenu/MainMenu.js | 4 +- resources/skins.minerva.mainMenu/schema.js | 47 ++++++++++++++++++++ skin.json | 2 + 5 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 resources/skins.minerva.mainMenu/schema.js diff --git a/README.md b/README.md index b223b96..629125c 100644 --- a/README.md +++ b/README.md @@ -142,3 +142,10 @@ Group membership can be debugged from the console via: And since session ID is an input in calculating the group, reassignment occurs when clearing it: `mw.storage.session.remove('mwuser-sessionId')`. + +#### $wgMinervaSchemaMainMenuClickTrackingSampleRate + +Defines the sampling rate for the MobileWebMainMenuClickTracking schema. + +* Type: `Number` +* Default: `0.5` diff --git a/includes/MinervaHooks.php b/includes/MinervaHooks.php index 7a5b8c3..fee4cd8 100644 --- a/includes/MinervaHooks.php +++ b/includes/MinervaHooks.php @@ -194,6 +194,8 @@ class MinervaHooks { ->makeConfig( 'minerva' ); $vars += [ + 'wgMinervaSchemaMainMenuClickTrackingSampleRate' => + $config->get( 'MinervaSchemaMainMenuClickTrackingSampleRate' ), 'wgMinervaABSamplingRate' => $config->get( 'MinervaABSamplingRate' ), 'wgMinervaErrorLogSamplingRate' => $config->get( 'MinervaErrorLogSamplingRate' ), 'wgMinervaReadOnly' => wfReadOnly() diff --git a/resources/skins.minerva.mainMenu/MainMenu.js b/resources/skins.minerva.mainMenu/MainMenu.js index 67bae9d..cbe0504 100644 --- a/resources/skins.minerva.mainMenu/MainMenu.js +++ b/resources/skins.minerva.mainMenu/MainMenu.js @@ -37,13 +37,11 @@ * @instance */ enableLogging: function () { - // Load the EventLogging module inside MobileFrontend if available - mw.loader.using( 'mobile.loggingSchemas.mobileWebMainMenuClickTracking' ); this.$( 'a' ).on( 'click', function () { var $link = $( this ), eventName = $link.data( 'event-name' ); if ( eventName ) { - mw.track( 'mf.schemaMobileWebMainMenuClickTracking', { + mw.track( 'minerva.schemaMobileWebMainMenuClickTracking', { name: eventName, destination: $link.attr( 'href' ) } ); diff --git a/resources/skins.minerva.mainMenu/schema.js b/resources/skins.minerva.mainMenu/schema.js new file mode 100644 index 0000000..d9708e4 --- /dev/null +++ b/resources/skins.minerva.mainMenu/schema.js @@ -0,0 +1,47 @@ +/** + * This module is loaded by resources/skins.minerva.mainMenu/MainMenu.js + * inside the Minerva skin. It should be moved to Minerva at our earliest possible + * convenience. + */ +mw.loader.using( [ + 'ext.eventLogging.subscriber' +] ).then( function () { + var M = mw.mobileFrontend, + user = M.require( 'mobile.startup/user' ), + // Schema provided by ext.eventLogging.subscriber class + Schema = mw.eventLog.Schema, // resource-modules-disable-line + context = M.require( 'mobile.startup/context' ), + /** + * MobileWebMainMenuClickTracking schema + * https://meta.wikimedia.org/wiki/Schema:MobileWebMainMenuClickTracking + * + * @class MobileWebMainMenuClickTracking + * @singleton + */ + schemaMobileWebMainMenuClickTracking = new Schema( + 'MobileWebMainMenuClickTracking', + // todo: use a default value of 0 once config lands in production (T205008). + mw.config.get( 'wgMinervaSchemaMainMenuClickTrackingSampleRate', 0.5 ), + /** + * @property {Object} defaults Default options hash. + * @property {string} defaults.mobileMode whether user is in stable or beta + * @property {string} [defaults.username] Username if the user is logged in, + * otherwise - undefined. + * Assigning undefined will make event logger omit this property when sending + * the data to a server. According to the schema username is optional. + * @property {number} [defaults.userEditCount] The number of edits the user has made + * if the user is logged in, otherwise - undefined. Assigning undefined will make event + * logger omit this property when sending the data to a server. According to the schema + * userEditCount is optional. + */ + { + mobileMode: context.getMode(), + username: user.getName() || undefined, + userEditCount: typeof user.getEditCount() === 'number' ? user.getEditCount() : undefined + } + ); + + mw.trackSubscribe( 'minerva.schemaMobileWebMainMenuClickTracking', function ( topic, data ) { + schemaMobileWebMainMenuClickTracking.log( data ); + } ); +} ); diff --git a/skin.json b/skin.json index d58ab52..ac8380f 100644 --- a/skin.json +++ b/skin.json @@ -44,6 +44,7 @@ "base": false, "beta": true }, + "MinervaSchemaMainMenuClickTrackingSampleRate": 0.5, "MinervaABSamplingRate": 0 }, "ValidSkinNames": { @@ -366,6 +367,7 @@ "menuGroup.hogan": "resources/skins.minerva.mainMenu/menuGroup.mustache" }, "scripts": [ + "resources/skins.minerva.mainMenu/schema.js", "resources/skins.minerva.mainMenu/MainMenu.js" ] },