blob: 995838cbf0d1e21a29c9eba229d2e39f4bd60bbd [file] [view]
# Performance Dashboard
The Chrome Performance Dashboard is an App Engine web application for displaying
and monitoring performance test results.
- [Getting set up to contribute](/dashboard/docs/getting-set-up.md)
- [Data format for new graph data](/dashboard/docs/data-format.md)
- [Rolling back from a broken deployment](/dashboard/docs/rollback.md)
- [Project glossary](/dashboard/docs/glossary.md)
- [Pages and endpoints](/dashboard/docs/pages-and-endpoints.md)
## Running a local development server
Running a local instance (i.e., a dev server) of the Performance Dashboard is
no longer supported due to a python2 dependency in the appengine toolchain.
To manually test your python server changes, deploy them to chromeperf-stage.
## Code Structure
All dashboard code lives in the `dashboard/` subdirectory, with the endpoints
for individual HTTP API handlers in that directory. There are a number of
subprojects which are also hosted in that directory:
- `api`: Handlers for API endpoints.
- `common`: A module collecting various utilities and common types used across
multiple subprojects in the performance dashboard.
- `docs`: A collection of documents for users of the dashboard, the API, and
other subprojects.
- `elements`: User interface elements used in the performance dashboard web
user interface. This is deprecated in favor of `spa`.
- `models`: A collection of types which represent entities in the data store,
with associated business logic for operations. These models should be
thought of as models in the Model-View-Controller conceptual framework.
- `pinpoint`: The performance regression bisection implementation. See more in
the [pinpoint documentation](/dashboard/dashboard/pinpoint/README.md).
- `services`: A collection of wrappers which represent external services which
the dashboard subprojects interact with.
- `static`: Directory containing all the static assets used in the user
interface. This is deprecated in favor of `spa`.
- `templates`: HTML files representing the templates for views served through
the App Engine user interface. This is deprecated in favor of `spa`.
- `sheriff_config`: A standalone service for managing sheriff configurations
hosted in git repositories, accessed through luci-config.
## Dependencies
The dashboard has a few dependencies. Before running dashboard unit tests,
be sure to following all instructions under this section.
### Google Cloud SDK
The dashboard requires Python modules from Google Cloud SDK to run.
An easy way to install it is through cipd, using the following command.
You only need to do this once.
(You can replace `~/google-cloud-sdk` with another location if you prefer.)
```
echo infra/gae_sdk/python/all latest | cipd ensure -root ~/google-cloud-sdk -ensure-file -
```
Then run the following command to set `PYTHONPATH`. It is recommended to add
this to your `.bashrc` or equivalent.
```
export PYTHONPATH=~/google-cloud-sdk
```
If you already have a non-empty `PYTHONPATH`, you can add the Cloud SDK location
to it. However, dashboard does not require any additional Python libraries.
It is recommended that your `PYTHONPATH` only contains the cloud SDK while
testing the dashboard.
(Note: The official source for Google Cloud SDK is https://cloud.google.com/sdk,
and you can install Python modules with
`gcloud components install app-engine-python`.
However, this method of installation has not been verified with the dashboard.)
### Compile Protobuf Definitions
The dashboard uses several protobuf (protocol buffer) definitions, which must be
compiled into Python modules. First you need to install the protobuf compiler,
and then use it to compile the protobuf definition files.
To install the protobuf compiler, use the following command.
You only need to do this once.
(You can replace `~/protoc` with another location if you prefer.)
```
echo infra/tools/protoc/linux-amd64 protobuf_version:v3.6.1 | cipd ensure -root ~/protoc -ensure-file -
```
Afterwards, run the following commands to compile the protobuf definitions.
You need to do this whenever any of the protobuf definition files have changed.
Modify the first line below if your catapult directory is at a different
location.
```
catapult=~/chromium/src/third_party/catapult
~/protoc/protoc --proto_path $catapult/dashboard --python_out $catapult/dashboard $catapult/dashboard/dashboard/protobuf/sheriff.proto $catapult/dashboard/dashboard/protobuf/sheriff_config.proto
cp $catapult/dashboard/dashboard/protobuf/sheriff_pb2.py $catapult/dashboard/dashboard/sheriff_config/
cp $catapult/dashboard/dashboard/protobuf/sheriff_config_pb2.py $catapult/dashboard/dashboard/sheriff_config/
~/protoc/protoc --proto_path $catapult/tracing/tracing/proto --python_out $catapult/tracing/tracing/proto $catapult/tracing/tracing/proto/histogram.proto
```
## Unit Tests
First following the steps given in Dependencies section above.
Then, run dashboard unit tests with:
```
dashboard/bin/run_py_tests
```
## Contact
Bugs can be reported on the Chromium issue tracker using the `Speed>Dashboard`
component:
- [File a new Dashboard issue](https://bugs.chromium.org/p/chromium/issues/entry?description=Describe+the+problem:&components=Speed%3EDashboard&summary=[chromeperf]+)
- [List open Dashboard issues](https://bugs.chromium.org/p/chromium/issues/list?q=component%3ASpeed%3EDashboard)
Note that some existing issues can be found in the
[Github issue tracker](https://github.com/catapult-project/catapult/issues), but
this is no longer the preferred location for filing new issues.
For questions and feedback, send an email to
chrome-perf-dashboard-team@google.com.