[rrd-users] Graph colors and time
Alex van den Bogaerdt
alex at vandenbogaerdt.nl
Sun Nov 4 10:03:06 CET 2012
> I am trying to generate a graph to display power usage in my house. I
> would like to display part of the graph with different colors for
> off-peak times (22:30-6:30) and peak hours (6:30-22:30). All data are
> stored in the same DS. I look at the documentation but I don't figure
> out how to do it. Sorry if I missed it.
> Thank you to whom may help to direct me to the solution.
Best is to use a different background color, and keep the actual line
showing your usage in the same color, this to avoid discontinuities.
Using LTIME you figure out local time. Using CDEF you make choices/branches
in your graphing code. The trick is to return INF when you want to display
that particular part of the background, and UNKN if not. Then graph the
result in an AREA.
One CDEF returns INF between 6.30am and 10.30am, the other during the other
hours.
Although you are not using your actual data when doing this, you still need
to build an array with time and data, or else CDEF will complain. So you
start with your data and then simply discard it (in that CDEF only, of
course).
>From memory, to get you started:
(and I believe some existing examples can be found in either the
documentation and/or in the various tutorials)
CDEF:peak=data,POP,UNKN,INF,23401,81000,LTIME,86400,%,LIMIT,UN,IF
This starts with fetching data and immediately discarding it, thus building
our array to work with.
Then you push unknown and infinite; which one gets used is determined by the
IF statement.
The numbers are (or: should be, you do checking and correcting) 6.30 and
22.30.
6.30 is not included because the interval _ending_ at that time is outside
your specified range.
LTIME,86400,% should provide wall clock time in seconds since midnight.
LIMIT looks if that time is between 6.30 (non inclusive) and 22.30
(inclusive)
UN sees if LIMIT returned an unknown
IF uses the result of UN to return either UNKN or INF.
For the other CDEF it is simply a matter of reversing the previous result:
CDEF:offpeak=INF,UNKN,peak,UN,IF
IF peak is UNknown then return INF else UNKNown.
Oh by the way: you never can graph what is not there. If you display a lot
of time in one graph, then chances are you do not have boundaries at 6.30
and 22.30. If for instance each pixel column is worth an hour, you will be
coloring 6am to 10pm: the interval ending at 6am is not included because it
ends before 23401. the interval ending at 11pm is not included because it
ends after 81000.
HTH
Alex
More information about the rrd-users
mailing list