[rrd-users] rrdcgi
Simon Hobson
linux at thehobsons.co.uk
Thu Aug 18 17:18:36 CEST 2011
fadwa salam wrote:
>i try to do examples of rrdcgi in the website :
>http://oss.oetiker.ch/rrdtool/doc/rrdcgi.en.html
>i don't know, if i must save the script on *.sh or *.cgi
>can smoone help me
>thank you .
>
>[root at inca-26 f_rrdtool]# ./web.sh
>./web.sh: line 2: HTML: No such file or directory
>./web.sh: line 3: syntax error near unexpected token `<'
>'/web.sh: line 3: ` <HEAD><TITLE>RRDCGI Demo</TITLE></HEAD>
It needs to be a cgi program - so either .cgi OR configure your web
server to treat .sh as a cgi.
I've called my scripts .cgi, and they are structured along the lines of :
>#!/bin/bash
><deal with URL parameters>
><echo some headers>
><create an rrd script> | rrdcgi --filter - 2>/dev/null
><cat image file>
Some of the code from a script is :
>Etime=`/bin/date +%s`
>Etime=$(( ${Etime} / ${Step} * ${Step} ))
>PrintedTime=$(/bin/date -d "19700101 00:00 +0000 ${Etime}sec"
>+"%H\:%M %a %d %b %Y")
>Exptime=$(( ${Etime} + ${Step} ))
> echo "Content-Type: image/png
>Last-Modified: `date --rfc-2822 -d "19700101 00:00 +0000 ${Etime}sec"`
>Expires: `date --rfc-2822 -d "19700101 00:00 +0000 ${Exptime}sec"`
>"
>
>if [ ${GType} = "simple" ]
>then
> DoSimple
>else
> DoStacked
>fi | /usr/bin/rrdcgi --filter - 2>&1 > /dev/null
>
>cat ${GraphPath}/${GrFile}-${Max}-${TimeScale}.png
and DoSimple is like this :
>DoSimple () {
> echo "
> <RRD::GRAPH ${GraphPath}/${GrFile}-${Max}-${TimeScale}.png
> --title=\"${Heading} - ${TimeScaleHead}\" -v \"bytes/second\"
> --end ${Etime} --start end-${Period}
> --lazy
> --width 600 --height 200
><rest of graph definition>
>"
>}
To use it, you'd have a static (or dynamic if you prefer) HTML page
with stuff like this in it :
><body>
> titles and stuff
> <img src="myscript.cgi?period=day>
> <img src="myscript.cgi?period=week>
> <img src="myscript.cgi?period=month>
> <img src="myscript.cgi?period=year>
> other stuff
></body>
As an alternative, you can just generate a load of HTML which
includes a graph definition enclosed in "<RRD::GRAPH" and ">" and
pipe that through rrdcgi. I did that originally but it was less
flexible. I had (for example) something like this :
><echo headers and stuff>
><do a graph - day>
><do a graph - week>
><do a graph - month>
><do a graph - year>
><echo footers and stuff>
The problem then is that each graph is created sequentially, you
can't re-use a graph on a nother page, and I had some issues getting
the path as seen by rrdcgi to match the path as seen by the web
server.
As to reusing a graph, by doing it the first way (the script is
called as an image), you can re-use a graph in multiple places - eg
having an overview page that shows data from multiple sources, but
only one timescale.
At the end of the day, there are many ways to do this sort of stuff -
above is just an outline of the methods I've used.
--
Simon Hobson
Visit http://www.magpiesnestpublishing.co.uk/ for books by acclaimed
author Gladys Hobson. Novels - poetry - short stories - ideal as
Christmas stocking fillers. Some available as e-books.
More information about the rrd-users
mailing list