From 9d6ff8a84b3ae102f5d868a4911aca32700dd9b7 Mon Sep 17 00:00:00 2001 From: Stricted Date: Mon, 13 Jul 2015 14:11:28 +0200 Subject: [PATCH] add rrdtool examples --- README.md | 10 ++- assets/dsl-1h.png | Bin 0 -> 29779 bytes assets/lteinfo-1h.png | Bin 0 -> 16775 bytes rrd/.gitignore | 1 + rrd/graphRRDBs.sh | 187 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 197 insertions(+), 1 deletion(-) create mode 100644 assets/dsl-1h.png create mode 100644 assets/lteinfo-1h.png create mode 100644 rrd/.gitignore create mode 100644 rrd/graphRRDBs.sh diff --git a/README.md b/README.md index 26ec482..df3373a 100644 --- a/README.md +++ b/README.md @@ -32,4 +32,12 @@ known valid paths for getData() : * /data/filterlist.json * /data/bonding_tr181.json * /data/letinfo.json - * /data/Status.json \ No newline at end of file + * /data/Status.json + +rrdtool integration +============= + +![dsl status](assets/dsl-1h.png) +![lte status](assets/lteinfo-1h.png) + +See the ```rrd``` directory for sample scripts. \ No newline at end of file diff --git a/assets/dsl-1h.png b/assets/dsl-1h.png new file mode 100644 index 0000000000000000000000000000000000000000..81a4a004e9de80359cf648077694779bafd6117a GIT binary patch literal 29779 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∈S-*F6ty;a>%-TA5X55`ImF_QH&z%s?`@DxFQ#U5yE?y%2`#aAKGj~VF zZ2SEDJ9myQgAE1-JVM}QcK?u#g@r_lL4x-~@K)!}v5|WC6wKNJs$_aWOQYzd*3}Wg z+WOmak$tH$$2>jd_*QrnmlYNH!zKHQ?qY*`38c?@5o z{{?&2RZ{eABN6VOt+Sdde{R9JwNLnvAfpZ=}v#B!mN5jl9$jj@V!Oe8lpr4@IF$-gVdQ?Yi@3CXwK)V8}d8k_D zG@~`5dH)c>FCwZ}^?u$W8Ku<@%Bp4+3kQdAnAyNmbkn}ewk1BhOLi&)ov(GJ zFpX66OHoy^Ah2J5eftCsY=};mXdis`_G4gvV@pd4g#yReR{$Rmq6s@;w0PHZacQ!W z0rp|_`22#avoks-a)6rXO(55zG49c&v*DRF4tDW!cgF!bA~D<7vK|elj|Z#CJd~G-o55-DiJ*tGwU}tA1@+s4@WfBq+fhSM0RVe$IV%NY}&B?_DERHuIo1ixB z#-3?V>)8ES6bd!*Y7LDSpPZx`plk=4$HBn?<`jSst@o_NhJRj3)TaY?WWF7nbl{p9XBQKt*7H^5Fl`9*QDKQaQ+_f zRS+sXv``8h7b5l06XM|f}smwt+Yv#)Fqy6K8p7FS@ey?C-l!BCW)5fuK& zo~o*2M}t)(xB)mqiTG~)SUrt~atu>2 zsM;k{?m##HtT$5ZU;FR>xeeKqlFUW1H3iNgd3w!{1dMUsO^i@5SB$@P>lO@Y!owGk zPSBU_?6h}jFAqF^>Xaf_WpuI?6{ip^6!=y|$+YkOQ-yg≀Ssz!3@njDXf?ID)>$ zW$DfjWQL#_E#vU?Uh_a&hYiXT&_ZaGpaBGrQ>dF_?VpJKO$11Mcs@8J<)eQ7>TFxq z*cQf~)-@k!N)B#^v%I#?U)sB|4Hygn8ao1Lb2T^jauJjw>vwr6qO*!y3yGcSW}R5$ z9QNhQ*YWXL796eusJ9R5<>|?%W+>z%VQqPU2n*WH!@aBIokGE%0`BtqBu`bF#Ez!) zMvr22F7bY~G@7gKE}Vjqp5E5da?s4|sI5NpBP6?{!R|^Sbl@XQPb?R~eqOa|74XxN zZLM8@?#8{|%^|VLPR`CoIN|E;b)Dg!;?hzjHMNeGM(Am87V z%8`12+lvM_ak@ls#ZwHazTbfpgK$Jv!M=hHO!e??v%i8v`|Ru*hHGE5R``KjQ8_u> zj}mWa2pxv)K>^%+|ADaEt5Ie2e*Ma~;taAi{p;5P`mS`t<^g~4=swro53@Yw`7vUL zBzphQz8|~xtxsFf8UOVQu*mz*B~8K{UQOP8{^eKbO_kSyFo8q2-Z zFIHNnk|~HHzNPJOZa!r@?mZkoDxq3ajxqsLMtYgcXK_qivGp-@@B#4+ZsJ^uO))41 zl@$~$q`%deM2O7@-#=8xn@BW~(x$?rZaf)| TaoRSIe=+Fm7;EQg9gg}xlf`5i literal 0 HcmV?d00001 diff --git a/assets/lteinfo-1h.png b/assets/lteinfo-1h.png new file mode 100644 index 0000000000000000000000000000000000000000..da3c6ed07b2cc8a6dde6c322ae81c28889fb6f29 GIT binary patch literal 16775 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

FU*n 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 z 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 Q+t`0syrL|NmNxMFe>kB!pa1{> literal 0 HcmV?d00001 diff --git a/rrd/.gitignore b/rrd/.gitignore new file mode 100644 index 0000000..09173cc --- /dev/null +++ b/rrd/.gitignore @@ -0,0 +1 @@ +*.rrd diff --git a/rrd/graphRRDBs.sh b/rrd/graphRRDBs.sh new file mode 100644 index 0000000..82e79f1 --- /dev/null +++ b/rrd/graphRRDBs.sh @@ -0,0 +1,187 @@ +#!/bin/bash +set -eu +# thanks to Thomas Mellenthin @ https://github.com/melle/l33tport/blob/master/rrdtool/graphRRDBs.sh +DSLDB=/home/rrd/rrd/dsl.rrd +LTEDB=/home/rrd/rrd/lteinfo.rrd +OUTPUTDIR=/var/www/stats + +# Pleasant colors from +# https://oss.oetiker.ch/rrdtool-trac/wiki/OutlinedAreaGraph +# +# LIGHT DARK +# RED #EA644A #CC3118 +# ORANGE #EC9D48 #CC7016 +# YELLOW #ECD748 #C9B215 +# GREEN #54EC48 #24BC14 +# BLUE #48C4EC #1598C3 +# PINK #DE48EC #B415C7 +# PURPLE #7648EC #4D18E4 + + + +# Graphs DSL values. The scaling is pretty bogus. +# +# $1 - filenme +# $2 - title +# $3 - starttime +# $4 - endtime +function drawDSL +{ + rm -f $OUTPUTDIR/$1 + + rrdtool graph $OUTPUTDIR/$1 \ + -s $3 \ + -e $4 \ + -t "$2" \ + -h 200 \ + -w 600 \ + -a PNG \ + -v "Upstream / Downstream" \ + --upper-limit 16000 --rigid \ + DEF:dactual=$DSLDB:dactual:AVERAGE \ + DEF:dattainable=$DSLDB:dattainable:AVERAGE \ + DEF:uactual=$DSLDB:uactual:AVERAGE \ + DEF:uattainable=$DSLDB:uattainable:AVERAGE \ + DEF:uLine=$DSLDB:uLine:AVERAGE \ + DEF:dLine=$DSLDB:dLine:AVERAGE \ + DEF:uSNR=$DSLDB:uSNR:AVERAGE \ + DEF:dSNR=$DSLDB:dSNR:AVERAGE \ + DEF:dHEC=$DSLDB:dHEC:MAX \ + DEF:dCRC=$DSLDB:dCRC:MAX \ + CDEF:dCRCScaled=dCRC,20000,* \ + CDEF:dHECScaled=dHEC,20000,* \ + CDEF:uLineScaled=uLine,10,* \ + CDEF:dLineScaled=dLine,10,* \ + CDEF:uSNRScaled=uSNR,80,* \ + CDEF:dSNRScaled=dSNR,80,* \ + CDEF:dHECOutline=dHECScaled,dCRCScaled,dHECScaled,+,UNKN,IF \ + \ + COMMENT:" \t\t\t" \ + COMMENT:"Cur\: \t\t" \ + COMMENT:"Min\: \t\t" \ + COMMENT:"Avg\: \t\t" \ + COMMENT:"Max\: \n" \ + \ + AREA:dattainable#54EC48CC \ + LINE1:dattainable#24BC14:"dattainable\t\t" \ + GPRINT:dattainable:LAST:"%1.0lf kBps\t" \ + GPRINT:dattainable:MIN:"%1.0lf kBps\t" \ + GPRINT:dattainable:AVERAGE:"%1.0lf kBps\t" \ + GPRINT:dattainable:MAX:"%1.0lf kBps\n" \ + \ + LINE1:dactual#ff3535:"dactual\t\t" \ + GPRINT:dactual:LAST:"%1.0lf kBps\t" \ + GPRINT:dactual:MIN:"%1.0lf kBps\t" \ + GPRINT:dactual:AVERAGE:"%1.0lf kBps\t" \ + GPRINT:dactual:MAX:"%1.0lf kBps\n" \ + \ + AREA:uattainable#48C4EC \ + LINE1:uattainable#1598C3:"uattainable\t\t" \ + GPRINT:uattainable:LAST:"%1.0lf kBps\t" \ + GPRINT:uattainable:MIN:"%1.0lf kBps\t" \ + GPRINT:uattainable:AVERAGE:"%1.0lf kBps\t" \ + GPRINT:uattainable:MAX:"%1.0lf kBps\n" \ + \ + LINE1:uactual#0000FF:"uactual\t\t" \ + GPRINT:uactual:LAST:"%1.0lf kBps\t" \ + GPRINT:uactual:MIN:"%1.0lf kBps\t" \ + GPRINT:uactual:AVERAGE:"%1.0lf kBps\t" \ + GPRINT:uactual:MAX:"%1.0lf kBps\n" \ + \ + AREA:dHECScaled#EC9D48AA:"Header Errors\t" \ + GPRINT:dHEC:LAST:"%1.0lf \t\t" \ + GPRINT:dHEC:MIN:"%1.0lf \t\t" \ + GPRINT:dHEC:AVERAGE:"%1.0lf \t\t" \ + GPRINT:dHEC:MAX:"%1.0lf \n" \ + \ + AREA:dCRCScaled#ECD748AA:"CRC Errors\t\t":STACK \ + LINE1:dHECScaled#CC7016AA \ + LINE1:dHECOutline#C9B215AA \ + GPRINT:dCRC:LAST:"%1.0lf \t\t" \ + GPRINT:dCRC:MIN:"%1.0lf \t\t" \ + GPRINT:dCRC:AVERAGE:"%1.0lf \t\t" \ + GPRINT:dCRC:MAX:"%1.0lf \n" \ + \ + LINE1:uSNRScaled#DE48EC:"uSNR\t\t\t" \ + GPRINT:uSNR:LAST:"%1.0lf \t\t" \ + GPRINT:uSNR:MIN:"%1.0lf \t\t" \ + GPRINT:uSNR:AVERAGE:"%1.0lf \t\t" \ + GPRINT:uSNR:MAX:"%1.0lf \n" \ + \ + LINE1:dSNRScaled#B415C7:"dSNR\t\t\t" \ + GPRINT:dSNR:LAST:"%1.0lf \t\t" \ + GPRINT:dSNR:MIN:"%1.0lf \t\t" \ + GPRINT:dSNR:AVERAGE:"%1.0lf \t\t" \ + GPRINT:dSNR:MAX:"%1.0lf \n" \ + \ + LINE1:uLineScaled#7648EC:"uLine\t\t\t" \ + GPRINT:uLine:LAST:"%1.0lf \t\t" \ + GPRINT:uLine:MIN:"%1.0lf \t\t" \ + GPRINT:uLine:AVERAGE:"%1.0lf \t\t" \ + GPRINT:uLine:MAX:"%1.0lf \n" \ + \ + LINE1:dLineScaled#4D18E4:"dLine\t\t\t" \ + GPRINT:dLine:LAST:"%1.0lf \t\t" \ + GPRINT:dLine:MIN:"%1.0lf \t\t" \ + GPRINT:dLine:AVERAGE:"%1.0lf \t\t" \ + GPRINT:dLine:MAX:"%1.0lf \n" \ + + + +} + +# Graph LTE values +# +# $1 - filenme +# $2 - title +# $3 - starttime +# $4 - endtime +function drawLTE +{ + rm -f $OUTPUTDIR/$1 + + rrdtool graph $OUTPUTDIR/$1 \ + -s $3 \ + -e $4 \ + -t "$2" \ + -h 200 \ + -w 548 \ + -a PNG \ + -v "rsrq" \ + --right-axis 0.1:0 \ + --right-axis-label "rsrp" \ + DEF:rsrp=$LTEDB:rsrp:AVERAGE \ + DEF:rsrq=$LTEDB:rsrq:AVERAGE \ + CDEF:rsrqScaled=rsrq,10,* \ + \ + COMMENT:" \t\t\t" \ + COMMENT:"Cur\: \t\t" \ + COMMENT:"Min\: \t\t" \ + COMMENT:"Avg\: \t\t" \ + COMMENT:"Max\: \n" \ + AREA:rsrqScaled#48C4EC \ + LINE1:rsrqScaled#1598C3:"rsrq\t\t\t" \ + GPRINT:rsrq:LAST:"%1.0lf dB\t\t" \ + GPRINT:rsrq:MAX:"%1.0lf dB\t\t" \ + GPRINT:rsrq:AVERAGE:"%1.0lf dB\t\t" \ + GPRINT:rsrq:MIN:"%1.0lf dB\n" \ + AREA:rsrp#54EC48CC \ + LINE1:rsrp#24BC14:"rsrp \t\t\t" \ + GPRINT:rsrp:LAST:"%1.0lf dB\t\t" \ + GPRINT:rsrp:MAX:"%1.0lf dB\t\t" \ + GPRINT:rsrp:AVERAGE:"%1.0lf dB\t\t" \ + GPRINT:rsrp:MIN:"%1.0lf dB\n" +} + +drawDSL dsl-1h.png "DSL line status - 1 hour" end-1h now & +drawDSL dsl-day.png "DSL line status - by day" end-24h now & +drawDSL dsl-week.png "DSL line status - by week" end-168h now & + +drawLTE lteinfo-1h.png "LTE status - 1 hour" end-1h now & +drawLTE lteinfo-day.png "LTE status - by day" end-24h now & +drawLTE lteinfo-week.png "LTE status - by week" end-168h now & + +for job in `jobs -p` +do + wait $job +done -- 2.20.1