RRDGRAPH_RPN(1) rrdtool RRDGRAPH_RPN(1) (NAME) rrdgraph_rpn - RPN rrdtool graph (SYNOPSIS) RPN expression:=vname|operator|value[,RPN expression] (DESCRIPTION) HP RPN ( Reverse Polish Notation) . RPN (stack) (push ). (pop ). . . vname . CDEF . VDEF . VDEF . : "VDEF:maximum=mydata,MAXIMUM" <> RRD . : "CDEF:mydatabits=mydata,8,*" : mydata 8 * . . mydatabits . mydatabits = mydata * 8 . RPN . "a = b + 3 * 5" b a . : "a = (b + 3) * 5". RPN "a = b, 3, +, 5, *" . (OPERATORS) LT, LE, GT, GE, EQ, NE <<>> << >> <<>> << >> <<>> <<>> 1 0 . unknown infinite unknown ... IF . UN, ISINF unknown . 1 0 . condition,then,else,IF . 0 () . 0 . : "A,B,C,IF" "if (A) then (B) else (C)" . MIN, MAX . infinite . unknown unknown . MINNAN, MAXNAN NAN MIN MAX. unknown . unknown unknown . lower-limit,upper-limit,LIMIT . . unknown . (: ). unknown infinite unknown . : "CDEF:a=alpha,0,100,LIMIT" alpha 0 100 unknown . +, -, *, /, % (modulo) ADDNAN NAN. NAN/UNKNOWN . NAN/UNKNOWN NAN/UNKNOWN . value,power,POW value power . SIN, COS, LOG, EXP, SQRT ( ) (log) (exp) (). ATAN ( ). ATAN2 y x ( ). x () y () . . : "CDEF:angle=Y,X,ATAN2,RAD2DEG" "X,Y" . FLOOR, CEIL . ROUND . DEG2RAD, RAD2DEG . ABS ..IP " (Set Operations)" 4 count,SORT (pop ). (count) . count . 4,3,22.1,1,4,SORT -> 1,3,4,22.1 count,REV . : "CDEF:x=v1,v2,v3,v4,v5,v6,6,SORT,POP,5,REV,POP,+,+,+,4,/" v1 v6 . count,AVG (count) . count UNKNOWN . : "CDEF:x=a,b,c,d,4,AVG" count,SMIN count,SMAX (count) . count / (push ). : "CDEF:x=a,b,c,d,4,SMIN" count,MEDIAN (count) . count UNKNOWN . -UNKNOWN . : "CDEF:x=a,b,c,d,4,MEDIAN" count,STDEV (count) . count ( NAN) . . : "CDEF:x=a,b,c,d,4,STDEV" percent,count,PERCENT (count,percent) . count ( -INF INF NaN -INF ). percent . . : "CDEF:x=a,b,c,d,95,4,PERCENT" count,TREND, TRENDNAN << >> (sliding window) . : CDEF:smoothed=x,1800,TREND ( ) x . : +---!---!---!---!---!---!---!---!---> now delay t0 <---------------> delay t1 <---------------> delay t2 <---------------> Value at sample (t0) will be the average between (t0-delay) and (t0) 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 TREND NAN (NAN-safe). TREND NAN . TRENDNAN NAN . PREDICT, PREDICTSIGMA, PREDICTPERC // << >> . - : "CDEF:predict=,...,,n,,x,PREDICT" "CDEF:sigma=,...,,n,,x,PREDICTSIGMA" "CDEF:perc=,...,,n,,,x,PREDICTPERC" - : "CDEF:predict=,-n,,x,PREDICT" "CDEF:sigma=,-n,,x,PREDICTSIGMA" "CDEF:sigma=,-n,,,x,PREDICTPERC" : CDEF:predict=172800,86400,2,1800,x,PREDICT / ( ) x : +---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---!---> 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) NAN (NAN-safe). (extrapolation) ( ) start= ... (percentile) [-100:+100] . (interpolate) . : . rrd (step size) ( NAN ). . . . . - Percentile100 . ( avg+-4*sigma) . . 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 \ CDEF:perc95=86400,-7,1800,95,value,PREDICTPERC \ LINE1:perc95#ffff00:95th_percentile : . <<>> . start= CDEF - ( ) . - . (Special values) UNKN (unknown) . INF, NEGINF . y . PREV (unknown) CDEF . . VDEF . PREV(vname) (unknown) vname . . VDEF . COUNT . . VDEF ..IP " (Time)" 4 RRDtool (epoch) . "Thu Jan 1 00:00:00 UTC 1970" . NOW . STEPWIDTH . . CDEF:abs=rate,STEPWIDTH,*,PREV,ADDNAN NEWDAY,NEWWEEK,NEWMONTH,NEWYEAR 1.0 . "LC_TIME" . CDEF:mtotal=rate,STEPWIDTH,*,NEWMONTH,0,PREV,IF,ADDNAN TIME . LTIME TIME ( ) . . DUP, POP, EXC . DEPTH . a,b,DEPTH -> a,b,2 n,COPY n . a,b,c,d,2,COPY => a,b,c,d,c,d n,INDEX n . a,b,c,d,3,INDEX -> a,b,c,d,b n,m,ROLL n m . a,b,c,d,3,1,ROLL => a,d,b,c a,b,c,d,3,-1,ROLL => a,c,d,b (VARIABLES) VDEF . VDEF . MAXIMUM, MINIMUM, AVERAGE MAXIMUM MINIMUM . : "VDEF:avg=mydata,AVERAGE" STDEV . : "VDEF:stdev=mydata,STDEV" LAST, FIRST / -nan . : "VDEF:first=mydata,FIRST" TOTAL . . . : "VDEF:total=mydata,TOTAL" PERCENT, PERCENTNAN vname DEF CDEF . vname (pop) (0..100). percentage . PERCENTNAN Unknown PERCENT Unknown unknown . Infinite Unknown . (NaN < -INF < finite values < INF) : "VDEF:perc95=mydata,95,PERCENT" "VDEF:percnan95=mydata,95,PERCENTNAN" LSLSLOPE, LSLINT, LSLCORREL (Least Squares Line - (y = mx +b)) . LSLSLOPE (m) COUNT . LSLINT (b) . LSLCORREL ( Pearson's Product Moment Correlation Coefficient) . 0 +/-1 . : "VDEF:slope=mydata,LSLSLOPE".SH " (SEE ALSO)" rrdgraph rrdtool graph . rrdgraph_data DEF CDEF VDEF . rrdgraph_rpn RPN ?DEF . rrdgraph_graph graph print . rrdgraph_examples . (AUTHOR) Tobias Oetiker Alex van den Bogaerdt / . 1.11.0 2026-08-08 RRDGRAPH_RPN(1)