Extension:EventLogging

The EventLogging extension facilitates the collection of metrics on how users interact with MediaWiki's interface. The Wikimedia Foundation captures this data and analyses it in aggregate to better understand how readers and editors interact with our site, to identify usability or performance problems, and to provide feedback for features engineers, with the overarching goal of driving improvements to user experience.

Features

 * EventLogging supports client-side logging from JavaScript and server-side logging from PHP.
 * The events are JSON objects defined by JSON schemas that can be edited on a MediaWiki server in a Schema: namespace; the latter feature is generally useful for storing other structured data in wiki pages.
 * The extension includes much back-end code for transporting, parsing and loading these events into SQL tables (automatically generated from the same schemas) and MongoDB collections. The details of these components are specific to Wikimedia Foundation's configuration.

Documentation

 * /Guide to developing and deploying EventLogging schemas, and more
 * /Programming has tips and suggestions for developers writing code to log events
 * /Events
 * /Comparison notes
 * /UserAgentSanitization
 * /Data representations
 * Trello board
 * See also: Event logging on Wikitech''

Operational Support
EventLogging/OperationalSupport

A thorough guide
If you want to log events with EventLogging, read Extension:EventLogging/Guide.

Developer setup
As a developer, you will want to set up and use EventLogging on your development wiki to simulate its use in production.

Sanity checking your setup
Your local development wiki must be running some cache server, such as memcached.

describes the EventLogging configuration variables.

The extension provides a dummy web server in  that responds to EventLogging's requests to its beacon URL, by default on port 8080. See server/README.rst for Python setup instructions. So you can set and run python EventLogging/server/bin/eventlogging-devserver in a terminal to see events. The MediaWiki-Vagrant server "appliance" uses port 8080, so you may want to use another port like 8081 for event.gif requests.

To verify your setup, browse to any page of your wiki, and in a JavaScript console enter The last line will generate console warnings in debug mode as null is not a known schema, but eventlogging-devserver should dump the event along with its own warnings.

For server-side events, set  to a local file writable by the PHP/Web server, and in a terminal run tail -f on that file. This will dump any calls to the PHP  function.

Tips
Read /Guide to learn about creating and using a proper schema for your event.

Don't use a schema name like "MyFakeTest" during development. Since schemas are referenced by MediaWiki revision ID, development versions won't conflict with production, so you should always use a real name and can point to the production wiki holding schemas during development.

Your code that logs events can fail if EventLogging is not available, or it can have a soft dependency.
 * Sample code for specifying a soft dependency on EventLogging.

How to run tests
There are PHP tests, python tests, and JavaScript tests.

To run Javascript tests, visit Special:JavaScriptTest/qunit on your development wiki. (see: Manual:JavaScript unit testing)

To run PHP tests, we use PHPUnit. Make sure it is installed, see: Manual:PHP unit testing/Installing PHPUnit). Then

To run python tests in vagrant you need to install tox. If you use Windows, may also need to clone it to a directory that is not shared between guest and host (to work around an apparent VirtualBox shared folder issue). E.g.:

> vagrant@mediawiki-vagrant:/vagrant/mediawiki/extensions/EventLogging$ git clone. ~/EventLogging > vagrant@mediawiki-vagrant:/vagrant/mediawiki/extensions/EventLogging$ sudo pip install tox > vagrant@mediawiki-vagrant:/vagrant/mediawiki/extensions/EventLogging$ cd ~/EventLogging

Then, run tox:

> tox

Note that tox tries to run tests for Python 2.7 and Python 3.2. EventLoggingG ./2B