Metrics Platform/How to/Choose your language/Setup for PHP
Requirements
First, make sure you have a MediaWiki instance running as a Docker container
We are currently working on a dedicated PHP Dev Env.
In the meantime (while working on creating a PHP environment) you can run a bash session directly using the buster-php74 image to install dependencies or run tests.
For example:
docker run -it -v .:/work docker-registry.wikimedia.org/dev/buster-php74:1.1.0-s2 /bin/bash
cd /work
rm -r vendor
rm composer.lock
Writing MediaWiki instrumentation code using the EventLogging extension
A Metrics Platform instrument is creating by calling one of the submit API methods provided by the MP library. These methods can take the following arguments:
streamName
, a string, is required.schemaId
, a string, is optional/required depending on which submit method is used.action
, a string, is optional/required depending on which submit method is used.InteractionData
, a group of key/value pairs, is optional. If it's present, each key must be in snake case, using only lowercase letters, digits, and '_', and starting with a lowercase letter.
The available keys that can be used for InteractionData
:
action_subtype
action_source
action_context
element_id
element_friendly_name
funnel_name
funnel_entry_token
funnel_event_sequence_position
Each value must be a string with the exception of funnel_event_sequence_position
which is required to be an integer (this constraint is codified in the definition of common product metrics in the product_event YAML file. If additional types are supported in future, those types will be added there.)
Create the instrument
The Metrics Platform PHP interface is essentially the same as the JavaScript one. To send a server side event, you can use for example the
EventLogging::getMetricsPlatformClient()->submitClick()
}}
function.
$interactionData = [
'action_source' => 'value for action source'
// ... Other interaction data fields
];
$streamName = 'my.stream';
EventLogging::getMetricsPlatformClient()->submitClick( $streamName, $interactionData );