3169d054aa | ||
---|---|---|
.circleci | ||
.github | ||
app | ||
kinto | ||
nginx | ||
scripts | ||
.env.integration | ||
.env.sample | ||
.gitignore | ||
CODE_OF_CONDUCT.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
contributing.md | ||
docker-compose-full.yml | ||
docker-compose-test.yml | ||
docker-compose.integration-test.yml | ||
docker-compose.yml |
README.md
Mozilla Experimenter
1. Design 2. Launch 3. Analyze
Experimenter is a platform for managing experiments in Mozilla Firefox.
Deployments
Shared Dev
https://experimenter-app.dev.mozaws.net/
Staging
https://experimenter.stage.mozaws.net/
Production
https://experimenter.services.mozilla.com/
What is an experiment?
An experiment is a way to measure how a change to your product affects how people use it.
An experiment has three parts:
- A new feature that can be selectively enabled
- A group of users to test the new feature
- Telemetry to measure how people interact with the new feature
How do I run an experiment?
- Build a new feature behind a pref flag
- Define an experiment for that feature in Experimenter
- Send it to Shield
- After Shield reviews and approves it, it is sent to Firefox
- Firefox clients check whether they should enroll in the experiment and configure themselves accordingly
- Telemetry about the experiment is collected
- Dashboards are created to visualize the telemetry
- Analyze and collect the results to understand how the new feature impacted users
- Do it again!
Installation
-
Install docker on your machine
-
Clone the repo
git clone <your fork>
-
Copy the sample env file
cp .env.sample .env
-
Set DEBUG=True for local development
vi .env
-
Create a new secret key and put it in .env
make secretkey
-
Run tests
make test
-
Setup the database
make refresh
-
Run a dev instance
make up
-
Navigate to it and add an SSL exception to your browser
https://localhost/
Done!
Usage
Experimenter uses docker for all development, testing, and deployment.
The following helpful commands have been provided via a Makefile:
build
Build the application container by executing the build script
compose_build
Build the supporting services (nginx, postgresql) defined in the compose file
up
Start a dev server listening on port 80 using the Django runserver
test
Run the Django test suite with code coverage
lint
Run flake8 against the code
check
Run both test and lint
migrate
Apply all django migrations
createuser
Create an admin user in the local dev instance
load_locales_countries
Populates locales and countries
load_dummy_experiments
Populates db with dummy experiments
shell
Start an ipython shell inside the container (this lets you import and test code, interact with the db, etc)
bash
Start a bash shell inside the container (this lets you interact with the containerized filesystem)
ssl
Create dummy SSL certs to use the dev server over a locally secure connection. This helps test client behaviour with a secure connection. This task is run automatically when needed.
kill
Stop and delete all docker containers. WARNING: this will remove your database and all data. Use this to reset your dev environment.
refresh
Run kill, migrate, load_locales_countries load_dummy_experiments
up_all
Start up a normandy and delivery console instance. Prereqs. Symlink normandy and delivery console eg. ln -s ../normandy normandy
, ensure user is assigned superuser status
integration_test
Run the integration test suite inside a containerized instance of Firefox. You must also be already running a make up
dev instance in another shell to run the integration tests.
integration_vnc_up
Start a linux VM container with VNC available over vnc://localhost:5900
with password secret
. Right click on the desktop and select Applications > Shell > Bash
and enter tox -c tests/integration/
to run the integration tests and watch them run in a Firefox instance you can watch and interact with.
API
API documentation can be found here
Contributing
Please see our Contributing Guidelines
License
Experimenter uses the Mozilla Public License