#!/bin/bash rrdfile=ingress.rrd graph_width=800 L1color=FFCF58 L2color=FFA52E L3color=FF7110 L4color=E70000 L5color=FF2691 L6color=EF24CE L7color=C221E1 L8color=9523F8 L9color=000000 L10color=000000 L11color=000000 L12color=000000 L13color=000000 L14color=000000 L15color=000000 L16color=000000 default_start=-604800 default_end=1209600 start=$default_start end=$default_end medals=( Explorer Seer Hacker Builder Connector Mind_Controller Recharger Liberator Pioneer Purifier Guardian ) if [ -n "$QUERY_STRING" ] then query_data="${QUERY_STRING//&/ }" exprtime='[[:alnum:]-]+' exprgraph='[[:alpha:]_]+' while read name value do case $name in start) [[ $value =~ $exprtime ]] && start=$value ;; end) [[ $value =~ $exprtime ]] && end=$value ;; graph) [[ $value =~ $exprgraph ]] && graph=$value ;; show) [[ $value == all ]] && show_all=1 ;; esac done <<<"${query_data//=/ }" fi (( start >= end)) && (( end = start + 604800 )) if [ -z "$graph" ] then cat <<-EOHTML content-type: application/xhtml+xml Last-Modified: $(LC_ALL=C TZ=GMT date +'%a, %d %b %Y %X %Z') Expires: $(LC_ALL=C TZ=GMT date +'%a, %d %b %Y %X %Z' -d '1 day') refresh: 600 Cache-Control: max-age=86400, must-revalidate IngRRD - Graph
<< < R > >> Add data << < R > >>
EOHTML if (( show_all )) then stats=( AP Explorer Seer XM Hacker Builder Connector Mind_Controller MU Longest_Link Largest_Field Recharger Liberator Pioneer Purifier Neutralized Links_Destroyed Fields_Destroyed Walked Guardian Link_Maintained Link_Length_x_Days Field_Held Field_x_Days ) else stats=( AP "${medals[@]}" ) fi for stat in "${stats[@]}" do cat <<-EOHTML
Ingress $stat evolution
EOHTML done encodeduri="${REQUEST_URI//\//%2F}" encodeduri="${encodeduri/\?/%3F}" encodeduri="${encodeduri//\=/%3D}" encodeduri="${encodeduri//\&/%26}" cat <<-EOHTML

Valid XHTML 1.1

EOHTML else now=$(date +%s) cat <<-EOHEAD content-type: image/png Last-Modified: $(LC_ALL=C TZ=GMT date +'%a, %d %b %Y %X %Z') Expires: $(LC_ALL=C TZ=GMT date +'%a, %d %b %Y %X %Z' -d '1 hour') Cache-Control: max-age=0, must-revalidate EOHEAD case $graph in AP) lvl1=0 lvl2=2500 lvl3=20000 lvl4=70000 lvl5=150000 lvl6=300000 lvl7=600000 lvl8=1200000 lvl9=2400000 lvl10=4000000 lvl11=6000000 lvl12=8400000 lvl13=12000000 lvl14=17000000 lvl15=24000000 lvl16=40000000 ;; Explorer) bronze=100 silver=1000 gold=2000 platinum=10000 black=30000 ;; Seer) bronze=10 silver=50 gold=200 platinum=500 black=5000 ;; Hacker) bronze=2000 silver=10000 gold=30000 platinum=100000 black=200000 ;; Builder) bronze=2000 silver=10000 gold=30000 platinum=100000 black=200000 ;; Connector) bronze=50 silver=1000 gold=5000 platinum=25000 black=100000 ;; Mind_Controller) bronze=100 silver=500 gold=2000 platinum=10000 black=40000 ;; Recharger) bronze=100000 silver=1000000 gold=3000000 platinum=10000000 black=25000000 ;; Liberator) bronze=100 silver=1000 gold=5000 platinum=15000 black=40000 ;; Pioneer) bronze=20 silver=200 gold=1000 platinum=5000 black=20000 ;; Purifier) bronze=2000 silver=10000 gold=30000 platinum=100000 black=300000 ;; Guardian) bronze=3 silver=10 gold=20 platinum=90 black=150 ;; esac if [[ $graph == AP ]] then thresholds=( COMMENT:Levels HRULE:$lvl2#$L1color:1 HRULE:$lvl2#$L2color:2 HRULE:$lvl3#$L3color:3 HRULE:$lvl4#$L4color:4 HRULE:$lvl5#$L5color:5 HRULE:$lvl6#$L6color:6 HRULE:$lvl7#$L7color:7 HRULE:$lvl8#$L8color:8 HRULE:$lvl9#$L9color:9 HRULE:$lvl10#$L10color:10 HRULE:$lvl11#$L11color:11 HRULE:$lvl12#$L12color:12 HRULE:$lvl13#$L13color:13 HRULE:$lvl14#$L14color:14 HRULE:$lvl15#$L15color:15 HRULE:$lvl16#$L16color:16\\n ) draw=( CDEF:arealvl1=data,$lvl2,LT,data,UNKN,IF CDEF:arealvl2=data,$lvl2,$lvl3,LIMIT CDEF:arealvl3=data,$lvl3,$lvl4,LIMIT CDEF:arealvl4=data,$lvl4,$lvl5,LIMIT CDEF:arealvl5=data,$lvl5,$lvl6,LIMIT CDEF:arealvl6=data,$lvl6,$lvl7,LIMIT CDEF:arealvl7=data,$lvl7,$lvl8,LIMIT CDEF:arealvl8=data,$lvl8,$lvl9,LIMIT CDEF:arealvl9=data,$lvl9,$lvl10,LIMIT CDEF:arealvl10=data,$lvl10,$lvl11,LIMIT CDEF:arealvl11=data,$lvl11,$lvl12,LIMIT CDEF:arealvl12=data,$lvl12,$lvl13,LIMIT CDEF:arealvl13=data,$lvl13,$lvl14,LIMIT CDEF:arealvl14=data,$lvl14,$lvl15,LIMIT CDEF:arealvl15=data,$lvl15,$lvl16,LIMIT CDEF:arealvl16=data,$lvl16,GE,data,UNKN,IF AREA:arealvl1#$L1color AREA:arealvl2#$L2color AREA:arealvl3#$L3color AREA:arealvl4#$L4color AREA:arealvl5#$L5color AREA:arealvl6#$L6color AREA:arealvl7#$L7color AREA:arealvl8#$L8color AREA:arealvl9#$L9color AREA:arealvl10#$L10color AREA:arealvl11#$L11color AREA:arealvl12#$L12color AREA:arealvl13#$L13color AREA:arealvl14#$L14color AREA:arealvl15#$L15color AREA:arealvl16#$L16color ) else thresholds=( COMMENT:Medals HRULE:$bronze#A02020:$bronze HRULE:$silver#808080:$silver HRULE:$gold#A0A020:$gold HRULE:$platinum#505050:$platinum HRULE:$black#101010:$black\\n ) draw=( CDEF:areanone=data,$bronze,LT,data,UNKN,IF CDEF:areabronze=data,$bronze,$silver,LIMIT CDEF:areasilver=data,$silver,$gold,LIMIT CDEF:areagold=data,$gold,$platinum,LIMIT CDEF:areaplatinum=data,$platinum,$black,LIMIT CDEF:areablack=data,$black,GE,data,UNKN,IF #CDEF:tickblack=pred,$black,EQ CDEF:tickbronze=pred,$bronze,0.995,*,$bronze,1.005,*,LIMIT CDEF:ticksilver=pred,$silver,0.995,*,$silver,1.005,*,LIMIT CDEF:tickgold=pred,$gold,0.995,*,$gold,1.005,*,LIMIT CDEF:tickplatinum=pred,$platinum,0.995,*,$platinum,1.005,*,LIMIT CDEF:tickblack=pred,$black,0.995,*,$black,1.005,*,LIMIT TICK:tickbronze#0000FF50:1 TICK:ticksilver#0000FF50:1 TICK:tickgold#0000FF50:1 TICK:tickplatinum#0000FF50:1 TICK:tickblack#0000FF50:1 AREA:areanone#303030 AREA:areabronze#A02020 AREA:areasilver#808080 AREA:areagold#A0A020 AREA:areaplatinum#505050 AREA:areablack#101010 ) fi (( start > -1209600 )) && datastart=-1209600 (( start > 0 )) && start="+$start" (( end > 0 )) && end="+$end" rrdtool graph - \ -a PNG \ -w $graph_width \ -v $graph \ -s $start -e $end \ DEF:data=$rrdfile:$graph:AVERAGE:step=3600${datastart+:start=$datastart} \ DEF:fail=$rrdfile:$graph:FAILURES \ VDEF:intercept=data,LSLINT \ VDEF:growth=data,LSLSLOPE \ CDEF:trend=data,POP,COUNT,growth,*,intercept,+ \ CDEF:pred=TIME,NOW,GE,trend,UNKN,IF \ LINE1:trend#FFFF00:Trend\\t \ "${draw[@]:-AREA:data#00BD27}" \ "${thresholds[@]}" \ TICK:fail#ffffa0:1.0 \ VRULE:$now#000000 \ 'GPRINT:data:MIN:min %6.2lf%S' \ 'GPRINT:data:AVERAGE:\tavg %6.2lf%S' \ 'GPRINT:data:MAX:\tmax %6.2lf%S' \ 'GPRINT:growth:\tgrowth %6.2lf%s/h\n' fi