----- Original Message ----- From: "Vinod Sharma" <[email protected]> To: <[email protected]> Sent: Thursday, January 21, 2010 8:10 AM Subject: [rrd-users] How to get Average for defined time only
>I am creating daily graphs using RRDTool from the logs of my application. I > am using below settings to do the same. > > rrdtool graph - \ > --start=end -7d \ > --end=midnight \ > --imgformat=PNG \ > --width=1048 \ > --base=1000 \ > --height=266 \ > --logarithmic \ > --interlaced \ > DEF:A=test.rrd:data:AVERAGE \ > CDEF:A=f,POP,LTIME,86400,%,3600,/,FLOOR,DUP,23,LT,*,6,GT,INF,UNKN,IF \ > AREA:A#7FFFD4: Day Time \ > LINE2:f#DDA0DD:data AVERAGE This shouldn't work. You are redefining "A", and you use undefined "f". You didn't use copy/paste. Timestamps in RRDtool define the end of a period. You do no want the data with timestamp 7am. You do want the data with timestamp 10pm. > Currently I am displaying the day time as shown in above example but I > want > to get the output average of day time data only i.e. 7AM to 10 PM. Can > anyone please suggest how can I get the average of day time data only and > skip other data. I suggest you try the following (you may need to adjust this, I did it from memory without any testing whatsoever) DEF:A=test.rrd:data:AVERAGE CDEF:B=LTIME,86400,%,25201,79200,LIMIT,DUP,EQ,A,UNKN,IF CDEF:C=B,UN,UNKN,INF,IF AREA:C#7FFFD4:Day Time LINE2:B#DDA0DD:Data GPRINT:B:AVERAGE:%6.2lf Reasoning: B is a copy of A, but only if the time is right. 25201 (7*3600) is not to be included. 79200 (22*3600) is to be included. Using 25201 and 79200 (or any other appropriate timestamps) instead of 7,3600,* and similar saves some CPU cycles. C is infinite if B has finite data, and unknown if B is not finite. "LTIME,86400,%" should provide wall clock time. "25201,79200,LIMIT" may not provide accurate results if your intervals are larger than one hour or if your local time is not a whole number of hours away from UTC. If timestamps 25201 and 25200 belong to the same interval, you will not get accurate output. Comparing an unknown or infinite number always results in false, thus "DUP,EQ" should be a good alternative for "ISFINITE". In this case you could also use UN and reverse A and UNKN, this should work because you have no infinite numbers as input. I seem to recall that unknown data does not influence the average, so I believe you should get the average of the defined range between 7am and 10pm. Try it, and please report back if it works. HTH Alex _______________________________________________ rrd-users mailing list [email protected] https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users
