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. You can look at the example file.
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 lets add them.
Gipeda expect simple CSV files for each revision, of the form
benchmark1;1000 benchmark2;20.123 benchmark3;0
But likely your benchmark suite does not generate them in this format directly.
Hence, put whatever format you have (text base logs, JUnit reports, whatever)
into the directory
Then create a script
log2csv that expects the filename of such a log on
the command line and produces the desired CSV file.
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.