Gipeda -- the Git Performance Dashboard
What is gipeda?
Gipeda is a a tool that presents data from your program’s benchmark suite (or any other source), with nice tables and shiny graphs.
It is only a frontend and does not help with or care about collecting the data.
So it is up to you whether you have a polling shell script loop, a post-commit
hook or a elaborate jenkins setup. As long as the performance data ends up in
logs/ directory, gipeda is happy.
Do you want to see it live? Check out these:
Setting it up
Clone gipeda somewhere, possibly directly into your webspace.
Install a Haskell compiler, including the
Install a few packages
apt-get install git unzip libssl-dev libfile-slurp-perl libipc-run-perl libicu-dev
Install the dependencies:
cabal install --only-dependencies
cabal install --bindir=.
gipeda.yaml. example/gipeda.yaml is an example
gipeda.yamlwhich is thoroughly annotated, explaining each option.
Clone the repository of your project into
repository/. A bare clone is sufficient, e.g.
git clone --bare git://git.haskell.org/ghc.git repository
Gipeda does not work without at least some logs, so let's add them.
Gipeda expects to find performance data in the
logs directory, where the
data for each Git revision is named
Gipeda has built-in functionality for handling Criterion output, if your benchmarks use the Criterion framework.
Just put Criterion logs directly in the
logs directory (named appropriately),
and copy the
binary/log2csv script to the base directory of this repo, e.g.
cp binary/log2csv .
Custom or non-Criterion data
For non-Criterion data (text base logs, JUnit reports, or anything else), you
will need to make your own script
log2csv and put it in the base directory of
this repo. This script should expect the filename of a log on the command line,
and should output a CSV file for that Git revision, of the form
benchmark1;1000 benchmark2;20.123 benchmark3;0
With everything in place, you can now run
and it will create a bunch of JSON files in
you can parallelize it.
You should do this everytime a new log file appears in
logs/. You should also
make sure your repository is up-to-date, e.g. by running
git -C repository pull or, if it is a bare clone,
git -C repository fetch origin "+refs/heads/*:refs/heads/*" --prune.
Finally, you simply point your browser to the
site/index.html. The page
should be mostly self-explanatory. If you don’t see anything, it might be
because of the filter in the top-right corner. Try to enable all buttons, even
To host this on a webserver, just put the
site/ directory in your webspace.
Hacking on gipeda
Gipeda doesn't do much; it mostly assembles the data and creates nice reports. The rough pipeline is as follows:
logs/contains project-specific data per git commit that has been benchmarked. gipeda will run
log2csvon these files to generate the files in
logsmay be a normal directory, or (for disk space efficiency) a bare git repository. This step is optional.
site/out/resultscontains one csv file per git commit. The format is simple, as there are two columns: benchmark name and a numerical value.
From these files, gipeda generates a number of JSON files, some per commit (
summaries), some global (
A crucial idea here is that these JSON files are all but fragments of a theoretical global JSON document. In other words: You could combine them (using a naive JSON object merge) and there would be no conflicts, and the result could be used by the client as well.
The client (
site/js/gipeda.js) is a fairly standard HTML+JS application using jquery, bootstrap, handlebars.