GnuPlot Integration
Summary
I would like to see a possibility to generate data visualizations inline in issues, wiki pages,... using GnuPlot.
Problem to solve
I propose to build gnuplot integration into gitlab - just like PlantUML. It would be another way to put data as text representation into gitlab and get nice renderings when it is displayed to users. PlantUML does it for things related to software development. This integration would allow it to quickly visualize some data (mainly numerical data) in a straightforward way directly from within the gitlab workflow.
Intended users
Software Developer, DevOps Engineer, QA Personnel
Further details
Proposal
It is possible to write short. self-contained scripts that incorporate data as well as definitions for graphing them (kind of graph, size, colors,...)
If one builds a server similar to the one plantuml provides, one could use the integration of plantuml as blueprint for actually generating charts and graphs from gnuplot inline in asciidoc, markdown,...
An example GnuPlot script for this would be
$data << EOD
0 10.875105 5.637258 5.227558
1 6.135397 5.344249 5.26152
2 5.937079 5.737432 5.586785
3 6.3701 5.490661 5.270509
4 5.931056 5.342314 5.321101
5 6.14734 5.445428 5.43502
6 5.981091 5.442398 5.403112
7 6.4947 5.420989 5.356048
8 5.976686 5.324789 5.5428370000000005
9 6.28498 5.405057 5.388483
EOD
set terminal pngcairo size 450,800 enhanced
set output 'java_map_performanz.png'
set multiplot layout 2, 1 title "Performanz Java Map - Zahlen als Werte,\ndie im Nachhinein geändert werden" font ",12"
set grid
set title 'Vollständig (mit Einschwingen des JIT)'
set ylabel 'Zeit (s)'
set xlabel '# Testreihe'
plot '$data' u 1:4 w lp t 'AtomicInteger (Comparable)', '$data' u 1:2 w lp t 'Integer', '$data' u 1:3 w lp t 'AtomicInteger'
set yrange [5.2:6.6]
set title 'Ohne Rücksicht auf Einschwingen des JIT'
plot '$data' u 1:4 w lp t 'AtomicInteger (Comparable)', '$data' u 1:2 w lp t 'Integer', '$data' u 1:3 w lp t 'AtomicInteger'
(source: https://elbosso.github.io/atomicinteger_vs__integer.html#content)
This actually creates the following image:
This way we could incorporate graphs and charts everywhere this is possible with plantuml graphics.
Permissions and Security
Because I propose to build this integration along the lines of the PlantUML integration, any permission and security implications over there apply here as well.
Documentation
What does success look like, and how can we measure that?
Success is divided into two outcomes:
1)Provide a server side component for rendering self-contained gnuplot-scriptlets like the PlantUML-Servlet. This can be achieved by implementing one from scratch or using an already available one.
2)Full success would be achieved, if one could insert a self-contained gnuplot scriptlet like the one shown above anywhere one could insert a PlantUML snippet ant it gets rendered into an image. For a first step to success and a prototype, one could start with support for markdown and add further markup solutions (asciidoc,...) later on.