EBernhardson has uploaded a new change for review.
https://gerrit.wikimedia.org/r/247852
Change subject: Revert "Add new fields to TestSearchSatisfaction"
......................................................................
Revert "Add new fields to TestSearchSatisfaction"
This may have caused a performance regression, as described
at T116137. Reverting to see if that fixes int.
This reverts commit c5b6de098f16f1a8e63020943e49a6682e5f27b1.
Change-Id: I740ca6e8708fa6e800681e832e966a5372200e00
---
M WikimediaEvents.php
M modules/ext.wikimediaEvents.search.js
2 files changed, 15 insertions(+), 85 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaEvents
refs/changes/52/247852/1
diff --git a/WikimediaEvents.php b/WikimediaEvents.php
index fb361fe..d7d813a 100644
--- a/WikimediaEvents.php
+++ b/WikimediaEvents.php
@@ -88,7 +88,7 @@
'schema.TestSearchSatisfaction2' => array(
'class' => 'ResourceLoaderSchemaModule',
'schema' => 'TestSearchSatisfaction2',
- 'revision' => 13821644,
+ 'revision' => 13223897,
),
'schema.GeoFeatures' => array(
'class' => 'ResourceLoaderSchemaModule',
diff --git a/modules/ext.wikimediaEvents.search.js
b/modules/ext.wikimediaEvents.search.js
index dd3e274..ac173f9 100644
--- a/modules/ext.wikimediaEvents.search.js
+++ b/modules/ext.wikimediaEvents.search.js
@@ -1,19 +1,5 @@
/*!
* Javacsript module for measuring internal search bounce rate and dwell time.
- * Utilizes two wprov query string formats:
- * - serp:N - This indicates the link was visited directly from a SERP. N is
- * a positive integer indicating the position of this page within the
results.
- * - cirrus - This indicates the link was visited as part of a search session
- * but not directly from the search page.
- *
- * Example:
- * - User performs search, is shown Special:Search. This has no wprov query
string parameter
- * - User clicks the 2nd result in the page which is `Jimmy Wales`, the user
is sent to
- * /wiki/Jimmy_Wales?wprov=serp:2
- * - User clicks a link in the content area of `Jimmy Wales` to `Wikipedia`,
the user is sent to
- * /wiki/Wikipedia?wprov=cirrus.
- * - Visiting any page without having a direct click stream through article
pages back
- * to a SERP does not log events.
*
* @license GNU GPL v2 or later
* @author Erik Bernhardson <[email protected]>
@@ -21,26 +7,13 @@
( function ( mw, $, undefined ) {
var isSearchResultPage = mw.config.get( 'wgIsSearchResultPage' ),
uri = new mw.Uri( location.href ),
- // wprov attached to all search result links. If available
- // indicates user got here directly from Special:Search
- wprovPrefix = 'srpw1_',
- // srpw1 has the position (including offset) of the search
- // result appended.
- searchResultPosition = parseInt( uri.query.wprov &&
- uri.query.wprov.substr( 0, wprovPrefix.length ) ===
wprovPrefix &&
- uri.query.wprov.substr( wprovPrefix.length ), 10 ),
- cameFromSearchResult = !isNaN( searchResultPosition ),
- isDeepSearchResult = uri.query.wprov === 'sdlw1',
- lastScrollTop = $( window ).scrollTop();
+ cameFromSearchResult = uri.query.wprov === 'cirrus';
function oneIn( populationSize ) {
- var rand = mw.user.generateRandomSessionId(),
- // take the first 52 bits of the rand value
- parsed = parseInt( rand.slice( 0, 13 ), 16 );
- return parsed % populationSize === 0;
+ return Math.floor( Math.random() * populationSize ) === 0;
}
- if ( cameFromSearchResult || isDeepSearchResult ) {
+ if ( cameFromSearchResult ) {
// cleanup the location bar in supported browsers
if ( window.history.replaceState ) {
delete uri.query.wprov;
@@ -57,69 +30,36 @@
'schema.TestSearchSatisfaction2'
] ).then( function () {
var searchSessionId = $.jStorage.get( 'searchSessionId' ),
- searchToken = $.jStorage.get( 'searchToken' ),
sessionLifetimeMs = 10 * 60 * 1000,
- tokenLifetimeMs = 24 * 60 * 60 * 1000,
checkinTimes = [ 10, 20, 30, 40, 50, 60, 90, 120, 150,
180, 210, 240, 300, 360, 420 ],
- articleId = mw.config.get( 'wgArticleId' ),
- pageViewId = mw.user.generateRandomSessionId(),
+ pageId = mw.user.generateRandomSessionId(),
logEvent = function ( action, checkinTime ) {
- var scrollTop = $( window ).scrollTop(),
- evt = {
+ var evt = {
// searchResultPage, visitPage
or checkin
action: action,
// identifies a single user
performing searches within
// a limited time span.
searchSessionId:
searchSessionId,
- // identifies a single user
over a 24 hour timespan,
- // allowing to tie together
multiple search sessions
- searchToken: searchToken,
// used to correlate actions
that happen on the same
// page. Otherwise a user
opening multiple search results
// in tabs would make their
events overlap and the dwell
// time per page uncertain.
- pageViewId: pageViewId,
- // identifies if a user has
scrolled the page since the
- // last event
- scroll: scrollTop !==
lastScrollTop
+ pageId: pageId,
+ // we noticed a number of
events get sent multiple
+ // times from javascript,
especially when using sendBeacon.
+ // This logId allows for later
deduplication
+ logId:
mw.user.generateRandomSessionId()
};
- lastScrollTop = scrollTop;
if ( checkinTime !== undefined ) {
- // identifies how long the user has
been on this page
evt.checkin = checkinTime;
- }
- if ( isSearchResultPage ) {
- // the users actual search term
- evt.query = mw.config.get( 'searchTerm'
);
- // the number of results shown on this
page.
- evt.hitsReturned = $(
'.mw-search-result-heading' ).length;
- }
- if ( articleId > 0 ) {
- evt.articleId = articleId;
- }
- if ( cameFromSearchResult ) {
- // this is only available on article
pages linked
- // directly from a search result.
- evt.position = searchResultPosition;
}
mw.eventLog.logEvent(
'TestSearchSatisfaction2', evt );
},
- // expects to be run with an html anchor as `this`
- updateSearchHref = function () {
- var uri = new mw.Uri( this.href ),
- offset = $( this ).data( 'serp-pos' );
- if ( offset ) {
- uri.query.wprov = 'srpw1_' + offset;
- this.href = uri.toString();
- }
- },
- // expects to be run with an html anchor as `this`
- updateDeepHref = function () {
+ updateHref = function () {
var uri = new mw.Uri( this.href );
- // try to not add our query param to
unnecessary places. The
- // wikitext parser always outputs /wiki/ for
[[WikiLinks]].
+ // try to not add our query param to
unnecessary places
if ( uri.path.substr( 0, 6 ) === '/wiki/' ) {
- uri.query.wprov = 'sdlw1';
+ uri.query.wprov = 'cirrus';
this.href = uri.toString();
}
};
@@ -155,21 +95,11 @@
}
}
- if ( searchToken === null ) {
- searchToken = mw.user.generateRandomSessionId();
- $.jStorage.set( 'searchToken', searchToken, { TTL:
tokenLifetimeMs } );
- if ( $.jStorage.get( 'searchToken' ) !== searchToken ) {
- // likely localstorage is full, we can't
properly track
- // this user
- return;
- }
- }
+ $( '#mw-content-text a:not(.external)' ).each( updateHref );
if ( isSearchResultPage ) {
- $( '.mw-search-result-heading a' ).each(
updateSearchHref );
logEvent( 'searchResultPage' );
} else {
- $( '#mw-content-text a:not(.external)' ).each(
updateDeepHref );
logEvent( 'visitPage' );
$( checkinTimes ).each( function ( _, checkin ) {
setTimeout( function () {
--
To view, visit https://gerrit.wikimedia.org/r/247852
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I740ca6e8708fa6e800681e832e966a5372200e00
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikimediaEvents
Gerrit-Branch: master
Gerrit-Owner: EBernhardson <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits