X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=doc%2Frrdgraph_rpn.pod;h=de44c0bde1dcd8cfd1c83e8b8cb974e4e4b340e3;hp=581dce9cecde4da42bdda56b771249105c9c78f2;hb=22424d6b1c6a14c1d919482f991427c7e43853a8;hpb=379aed39263df73f848792ea0e280a91f17a077e diff --git a/doc/rrdgraph_rpn.pod b/doc/rrdgraph_rpn.pod index 581dce9..de44c0b 100644 --- a/doc/rrdgraph_rpn.pod +++ b/doc/rrdgraph_rpn.pod @@ -99,6 +99,11 @@ B<+, -, *, /, %> Add, subtract, multiply, divide, modulo +B + +NAN-safe addition. If one parameter is NAN/UNKNOWN it'll be treated as +zero. If both parameters are NAN/UNKNOWN, NAN/UNKNOWN will be returned. + B Sine and cosine (input in radians), log and exp (natural logarithm), @@ -127,6 +132,10 @@ B Convert angle in degrees to radians, or radians to degrees. +B + +Take the absolute value. + =item Set Operations B @@ -139,7 +148,14 @@ Example: C will compute the average of the values v1 to v6 after removing the smallest and largest. -B +B + +Pop one element (I) from the stack. Now pop I elements and build the +average, ignoring all UNKNOWN values in the process. + +Example: C + +B Create a "sliding window" average of another data series. @@ -163,6 +179,84 @@ average is essentially computed as shown here: Value at sample (t1) will be the average between (t1-delay) and (t1) Value at sample (t2) will be the average between (t2-delay) and (t2) +TRENDNAN is - in contrast to TREND - NAN-safe. If you use TREND and one +source value is NAN the complete sliding window is affected. The TRENDNAN +operation ignores all NAN-values in a sliding window and computes the +average of the remaining values. + +B + +Create a "sliding window" average/sigma of another data series, that also +shifts the data series by given amounts of of time as well + +Usage - explicit stating shifts: +CDEF:predict=,...,,n,,x,PREDICT +CDEF:sigma=,...,,n,,x,PREDICTSIGMA + +Usage - shifts defined as a base shift and a number of time this is applied +CDEF:predict=,-n,,x,PREDICT +CDEF:sigma=,-n,,x,PREDICTSIGMA + +Example: +CDEF:predict=172800,86400,2,1800,x,PREDICT + +This will create a half-hour (1800 second) sliding window average/sigma of x, that +average is essentially computed as shown here: + + +---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---> + now + shift 1 t0 + <-----------------------> + window + <---------------> + shift 2 + <-----------------------------------------------> + window + <---------------> + shift 1 t1 + <-----------------------> + window + <---------------> + shift 2 + <-----------------------------------------------> + window + <---------------> + + Value at sample (t0) will be the average between (t0-shift1-window) and (t0-shift1) + and between (t0-shift2-window) and (t0-shift2) + Value at sample (t1) will be the average between (t1-shift1-window) and (t1-shift1) + and between (t1-shift2-window) and (t1-shift2) + + +The function is by design NAN-safe. +This also allows for extrapolation into the future (say a few days) +- you may need to define the data series whit the optional start= parameter, so that +the source data series has enough data to provide prediction also at the beginning of a graph... + +Here an example, that will create a 10 day graph that also shows the +prediction 3 days into the future with its uncertainty value (as defined by avg+-4*sigma) +This also shows if the prediction is exceeded at a certain point. + +rrdtool graph image.png --imgformat=PNG \ + --start=-7days --end=+3days --width=1000 --height=200 --alt-autoscale-max \ + DEF:value=value.rrd:value:AVERAGE:start=-14days \ + LINE1:value#ff0000:value \ + CDEF:predict=86400,-7,1800,value,PREDICT \ + CDEF:sigma=86400,-7,1800,value,PREDICTSIGMA \ + CDEF:upper=predict,sigma,3,*,+ \ + CDEF:lower=predict,sigma,3,*,- \ + LINE1:predict#00ff00:prediction \ + LINE1:upper#0000ff:upper\ certainty\ limit \ + LINE1:lower#0000ff:lower\ certainty\ limit \ + CDEF:exceeds=value,UN,0,value,lower,upper,LIMIT,UN,IF \ + TICK:exceeds#aa000080:1 + +Note: Experience has shown that a factor between 3 and 5 to scale sigma is a good +discriminator to detect abnormal behaviour. This obviously depends also on the type +of data and how "noisy" the data series is. + +This prediction can only be used for short term extrapolations - say a few days into the future- + =item Special values B @@ -240,6 +334,12 @@ the first occurrence of that value in the time component. Example: C +=item STDEV + +Returns the standard deviation of the values. + +Example: C + =item LAST, FIRST Return the last/first value including its time. The time for @@ -257,12 +357,13 @@ the number of seconds. Example: C -=item PERCENT +=item PERCENT, PERCENTNAN This should follow a B or B I. The I is popped, another number is popped which is a certain percentage (0..100). The data set is then sorted and the value returned is chosen such that I percent of the values is lower or equal than the result. +For PERCENTNAN I values are ignored, but for PERCENT I values are considered lower than any finite number for this purpose so if this operator returns an I you have quite a lot of them in your data. Binite numbers are lesser, or more, than the @@ -270,6 +371,7 @@ finite numbers and are always more than the I numbers. (NaN E -INF E finite values E INF) Example: C + C =item LSLSLOPE, LSLINT, LSLCORREL @@ -296,6 +398,6 @@ Make sure to read L for tipsEtricks. =head1 AUTHOR -Program by Tobias Oetiker Eoetiker@ee.ethz.chE +Program by Tobias Oetiker Etobi@oetiker.chE This manual page by Alex van den Bogaerdt Ealex@ergens.op.het.netE