Code

Imported upstream version 1.4.8
[pkg-rrdtool.git] / doc / rrdgraph_rpn.txt
index 3c55e87a2a6e3228f7daa885a1964b8dd0d3d708..ae5cfdcb386dcf52b20093d6db7578e21580d540 100644 (file)
@@ -46,7 +46,8 @@ O\bOP\bPE\bER\bRA\bAT\bTO\bOR\bRS\bS
 
            Pop two elements from the stack, compare them for the selected
            condition and return 1 for true or 0 for false. Comparing an
-           _\bu_\bn_\bk_\bn_\bo_\bw_\bn or an _\bi_\bn_\bf_\bi_\bn_\bi_\bt_\be value will always result in 0 (false).
+           _\bu_\bn_\bk_\bn_\bo_\bw_\bn or an _\bi_\bn_\bf_\bi_\bn_\bi_\bt_\be value will result in _\bu_\bn_\bk_\bn_\bo_\bw_\bn returned ...
+           which will also be treated as false by the I\bIF\bF call.
 
            U\bUN\bN,\b, I\bIS\bSI\bIN\bNF\bF
 
@@ -178,6 +179,84 @@ O\bOP\bPE\bER\bRA\bAT\bTO\bOR\bRS\bS
            The TRENDNAN operation ignores all NAN-values in a sliding window
            and computes the average of the remaining values.
 
+           P\bPR\bRE\bED\bDI\bIC\bCT\bT,\b, P\bPR\bRE\bED\bDI\bIC\bCT\bTS\bSI\bIG\bGM\bMA\bA
+
+           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=<shift n>,...,<shift
+           1>,n,<window>,x,PREDICT CDEF:sigma=<shift n>,...,<shift
+           1>,n,<window>,x,PREDICTSIGMA
+
+           Usage - shifts defined as a base shift and a number of time this is
+           applied CDEF:predict=<shift multiplier>,-n,<window>,x,PREDICT
+           CDEF:sigma=<shift multiplier>,-n,<window>,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 behavior. 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-
+
        Special values
            U\bUN\bNK\bKN\bN
 
@@ -254,32 +333,33 @@ V\bVA\bAR\bRI\bIA\bAB\bBL\bLE\bES\bS
            Example: "VDEF:stdev=mydata,STDEV"
 
        LAST, FIRST
-           Return the last/first value including its time.  The time for FIRST
-           is actually the start of the corresponding interval, whereas LAST
-           returns the end of the corresponding interval.
+           Return the last/first non-nan or infinite value for the selected
+           data stream, including its timestamp.
 
            Example: "VDEF:first=mydata,FIRST"
 
        TOTAL
            Returns the rate from each defined time slot multiplied with the
-           step size.  This can, for instance, return total bytes transfered
+           step size.  This can, for instance, return total bytes transferred
            when you have logged bytes per second. The time component returns
            the number of seconds.
 
            Example: "VDEF:total=mydata,TOTAL"
 
-       PERCENT
+       PERCENT, PERCENTNAN
            This should follow a D\bDE\bEF\bF or C\bCD\bDE\bEF\bF _\bv_\bn_\ba_\bm_\be. The _\bv_\bn_\ba_\bm_\be 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 _\bp_\be_\br_\bc_\be_\bn_\bt_\ba_\bg_\be percent of the values is lower or equal than the
-           result.  _\bU_\bn_\bk_\bn_\bo_\bw_\bn values are considered lower than any finite number
-           for this purpose so if this operator returns an _\bu_\bn_\bk_\bn_\bo_\bw_\bn you have
-           quite a lot of them in your data.  I\bIn\bnf\bfinite numbers are lesser, or
-           more, than the finite numbers and are always more than the _\bU_\bn_\bk_\bn_\bo_\bw_\bn
-           numbers.  (NaN < -INF < finite values < INF)
+           result.  For PERCENTNAN _\bU_\bn_\bk_\bn_\bo_\bw_\bn values are ignored, but for PERCENT
+           _\bU_\bn_\bk_\bn_\bo_\bw_\bn values are considered lower than any finite number for this
+           purpose so if this operator returns an _\bu_\bn_\bk_\bn_\bo_\bw_\bn you have quite a lot
+           of them in your data.  I\bIn\bnf\bfinite numbers are lesser, or more, than
+           the finite numbers and are always more than the _\bU_\bn_\bk_\bn_\bo_\bw_\bn numbers.
+           (NaN < -INF < finite values < INF)
 
            Example: "VDEF:perc95=mydata,95,PERCENT"
+                    "VDEF:percnan95=mydata,95,PERCENTNAN"
 
        LSLSLOPE, LSLINT, LSLCORREL
            Return the parameters for a L\bLeast S\bSquares L\bLine _\b(_\by _\b= _\bm_\bx _\b+_\bb_\b) which
@@ -309,4 +389,4 @@ A\bAU\bUT\bTH\bHO\bOR\bR
 
 
 
-1.3.8                             2009-02-21                   RRDGRAPH_RPN(1)
+1.4.8                             2013-05-23                   RRDGRAPH_RPN(1)