#!/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
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
;;
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
EOHTML
# Show all stats
#for stat in 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
# Show only AP and medals
for stat in AP Explorer Seer Hacker Builder Connector Mind_Controller Recharger Liberator Pioneer Purifier Guardian
do
cat <<-EOHTML
EOHTML
done
encodeduri="${REQUEST_URI//\//%2F}"
encodeduri="${encodeduri/\?/%3F}"
encodeduri="${encodeduri//\=/%3D}"
encodeduri="${encodeduri//\&/%26}"
cat <<-EOHTML
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 > 0 )) && start="+$start"
(( end > 0 )) && end="+$end"
rrdtool graph - \
-E -a PNG \
-w $graph_width \
-v $graph \
-s $start -e $end \
DEF:data=$rrdfile:$graph:AVERAGE:step=3600 \
DEF:predict=$rrdfile:$graph:HWPREDICT \
DEF:dev=$rrdfile:$graph:DEVPREDICT \
DEF:fail=$rrdfile:$graph:FAILURES \
CDEF:predup=predict,dev,2,*,+ \
CDEF:predlow=predict,dev,2,*,- \
CDEF:predarea=predup,predlow,- \
VDEF:intercept=data,LSLINT \
VDEF:growth=data,LSLSLOPE \
CDEF:pred=data,POP,COUNT,growth,*,intercept,+ \
"${draw[@]:-AREA:data#00BD27}" \
LINE1:predlow#00A0A0::dashes=on \
AREA:predarea#00A0A030:Pred:STACK \
LINE1:predup#00A0A0::dashes=on \
LINE1:pred#FFFF00:Trend\\n \
"${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