#!/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 ) ## (0) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 lvl=( . 0 2500 20000 70000 150000 300000 600000 1200000 2400000 4000000 6000000 8400000 12000000 17000000 24000000 40000000 ) lvlsilver=( . 0 0 0 0 0 0 0 0 4 5 6 7 0 0 0 0 ) lvlgold=( . 0 0 0 0 0 0 0 0 1 2 4 6 7 0 0 0 ) lvlplatinum=( . 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 ) lvlblack=( . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 ) declare -A bronze silver gold platinum black bronze["Explorer"]=100 silver["Explorer"]=1000 gold["Explorer"]=2000 platinum["Explorer"]=10000 black["Explorer"]=30000 bronze["Seer"]=10 silver["Seer"]=50 gold["Seer"]=200 platinum["Seer"]=500 black["Seer"]=5000 bronze["Hacker"]=2000 silver["Hacker"]=10000 gold["Hacker"]=30000 platinum["Hacker"]=100000 black["Hacker"]=200000 bronze["Builder"]=2000 silver["Builder"]=10000 gold["Builder"]=30000 platinum["Builder"]=100000 black["Builder"]=200000 bronze["Connector"]=50 silver["Connector"]=1000 gold["Connector"]=5000 platinum["Connector"]=25000 black["Connector"]=100000 bronze["Mind_Controller"]=100 silver["Mind_Controller"]=500 gold["Mind_Controller"]=2000 platinum["Mind_Controller"]=10000 black["Mind_Controller"]=40000 bronze["Recharger"]=100000 silver["Recharger"]=1000000 gold["Recharger"]=3000000 platinum["Recharger"]=10000000 black["Recharger"]=25000000 bronze["Liberator"]=100 silver["Liberator"]=1000 gold["Liberator"]=5000 platinum["Liberator"]=15000 black["Liberator"]=40000 bronze["Pioneer"]=20 silver["Pioneer"]=200 gold["Pioneer"]=1000 platinum["Pioneer"]=5000 black["Pioneer"]=20000 bronze["Purifier"]=2000 silver["Purifier"]=10000 gold["Purifier"]=30000 platinum["Purifier"]=100000 black["Purifier"]=300000 bronze["Guardian"]=3 silver["Guardian"]=10 gold["Guardian"]=20 platinum["Guardian"]=90 black["Guardian"]=150 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' \ -d @$(rrdtool last ingress.rrd) ) Expires: $(LC_ALL=C TZ=GMT date +'%a, %d %b %Y %X %Z' -d '1 hour') Cache-Control: max-age=0, must-revalidate EOHEAD if [[ $graph == AP ]] then thresholds=( COMMENT:'Levels\:' HRULE:${lvl[2]}#$L1color:1 HRULE:${lvl[2]}#$L2color:2 HRULE:${lvl[3]}#$L3color:3 HRULE:${lvl[4]}#$L4color:4 HRULE:${lvl[5]}#$L5color:5 HRULE:${lvl[6]}#$L6color:6 HRULE:${lvl[7]}#$L7color:7 HRULE:${lvl[8]}#$L8color:8 HRULE:${lvl[9]}#$L9color:9 HRULE:${lvl[10]}#$L10color:10 HRULE:${lvl[11]}#$L11color:11 HRULE:${lvl[12]}#$L12color:12 HRULE:${lvl[13]}#$L13color:13 HRULE:${lvl[14]}#$L14color:14 HRULE:${lvl[15]}#$L15color:15 HRULE:${lvl[16]}#$L16color:16\\n ) draw=( CDEF:arealvl1=data,${lvl[2]},LT,data,UNKN,IF CDEF:arealvl2=data,${lvl[2]},${lvl[3]},LIMIT CDEF:arealvl3=data,${lvl[3]},${lvl[4]},LIMIT CDEF:arealvl4=data,${lvl[4]},${lvl[5]},LIMIT CDEF:arealvl5=data,${lvl[5]},${lvl[6]},LIMIT CDEF:arealvl6=data,${lvl[6]},${lvl[7]},LIMIT CDEF:arealvl7=data,${lvl[7]},${lvl[8]},LIMIT CDEF:arealvl8=data,${lvl[8]},${lvl[9]},LIMIT CDEF:arealvl9=data,${lvl[9]},${lvl[10]},LIMIT CDEF:arealvl10=data,${lvl[10]},${lvl[11]},LIMIT CDEF:arealvl11=data,${lvl[11]},${lvl[12]},LIMIT CDEF:arealvl12=data,${lvl[12]},${lvl[13]},LIMIT CDEF:arealvl13=data,${lvl[13]},${lvl[14]},LIMIT CDEF:arealvl14=data,${lvl[14]},${lvl[15]},LIMIT CDEF:arealvl15=data,${lvl[15]},${lvl[16]},LIMIT CDEF:arealvl16=data,${lvl[16]},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["$graph"]}#A02020:${bronze["$graph"]} HRULE:${silver["$graph"]}#808080:${silver["$graph"]} HRULE:${gold["$graph"]}#A0A020:${gold["$graph"]} HRULE:${platinum["$graph"]}#505050:${platinum["$graph"]} HRULE:${black["$graph"]}#101010:${black["$graph"]}\\n ) draw=( CDEF:areanone=data,${bronze["$graph"]},LT,data,UNKN,IF CDEF:areabronze=data,${bronze["$graph"]},${silver["$graph"]},LIMIT CDEF:areasilver=data,${silver["$graph"]},${gold["$graph"]},LIMIT CDEF:areagold=data,${gold["$graph"]},${platinum["$graph"]},LIMIT CDEF:areaplatinum=data,${platinum["$graph"]},${black["$graph"]},LIMIT CDEF:areablack=data,${black["$graph"]},GE,data,UNKN,IF CDEF:tickbronze=pred,${bronze["$graph"]},0.995,*,${bronze["$graph"]},1.005,*,LIMIT CDEF:ticksilver=pred,${silver["$graph"]},0.995,*,${silver["$graph"]},1.005,*,LIMIT CDEF:tickgold=pred,${gold["$graph"]},0.995,*,${gold["$graph"]},1.005,*,LIMIT CDEF:tickplatinum=pred,${platinum["$graph"]},0.995,*,${platinum["$graph"]},1.005,*,LIMIT CDEF:tickblack=pred,${black["$graph"]},0.995,*,${black["$graph"]},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