[Haskell-cafe] tplot and splot - analyst's swiss army knifes for visualizing log files

Ferenc Wagner wferi at niif.hu
Thu Mar 17 18:39:18 CET 2011

Eugene Kirpichov <ekirpichov at gmail.com> writes:

> 2010/12/17 Henning Thielemann <schlepptop at henning-thielemann.de>:
>> Eugene Kirpichov schrieb:
>>> I've published a large presentation about two Haskell-based tools of
>>> mine - tplot and splot.
>>> Their motto is "visualize system behavior from logs with a shell one-liner".
>>> Based on my experience, they usually seem to live up to this motto.
>>> http://www.slideshare.net/jkff/two-visualization-tools
>>> [attention attractor: the presentation has *really a lot* of pictures]
>> ... and complete TeX code attached! :-) However can I also view a simple
>> PDF document of the presentation?
> You can download the PDF here -
> http://www.slideshare.net/jkff/two-visualization-tools/download
> (however one has to be logged in to Slideshare, for example with a
> facebook acct., for this link to work)
> Just in case, I'm also attaching a PDF of the current version to this
> email, but visiting the link is preferable, since I'll be updating the
> contents.

Please, if at all possible, link an up-to-date downloadable PDF from the
documentation (http://hackage.haskell.org/package/timeplot) or from the
homepage (http://haskell.org/haskellwiki/Timeplot) to make our life

Anyway, your tools look very interesting, I gave tplot a shot.
Unfortunately, I hit various strange failures:

$ head -4 or.log
Mar  8 18:55:11 =overrun 1
Mar  8 18:55:13 =overrun 6
Mar  8 18:55:15 =overrun 13
Mar  8 18:55:16 =overrun 3

$ wc -l or.log
466 or.log

$ ls -l or.log overruns466.log
lrwxrwxrwx 1 wferi wferi    15 Mar 17 14:45 or.log -> overruns466.log
-rw-rw-r-- 1 wferi wferi 12587 Mar 17 14:35 overruns466.log

$ tplot -if or.log -tf 'date %b %e %T' -o overruns.png -k 'overrun' 'sum 10'

This worked just fine.  However, when given the same file with a longer
name, tplot does not terminate:

$ tplot -if overruns466.log -tf 'date %b %e %T' -o overruns.png -k 'overrun' 'sum 10'

while doing the same the other way around still works:

$ cat overruns466.log | tplot -if - -tf 'date %b %e %T' -o overruns.png -k 'overrun' 'sum 10'

Choosing any other extension (svg, pdf or ps) also results in
nontermination (or at least unbearable runtime and memory consumption).

Adding a simple no-op statement, like:

diff -ur ../timeplot-0.2.19/Tools/TimePlot.hs ./Tools/TimePlot.hs
--- ../timeplot-0.2.19/Tools/TimePlot.hs	2011-03-09 11:36:24.000000000 +0100
+++ ./Tools/TimePlot.hs	2011-03-17 16:42:57.247625607 +0100
@@ -627,6 +627,7 @@
   when (null args || args == ["--help"]) $ showHelp >> exitSuccess
   case (readConf args) of
     Conf conf -> do
+      putStr ""
       let render = case (outFormat conf) of {
           PNG    -> \c w h f -> const () `fmap` renderableToPNGFile c w h f;
           PDF    -> renderableToPDFFile ;

also results in nontermination, even in the previously working case.
Something is clearly wrong here, seemingly in the runtime IO system.

GHC 6.12.1

More information about the Haskell-Cafe mailing list