commit 74539255612c8d6b610d05a8c59240c6a85e3142 Author: Vincent Riquer Date: Tue May 27 02:55:44 2014 +0200 initial commit diff --git a/add b/add new file mode 100755 index 0000000..446e08e --- /dev/null +++ b/add @@ -0,0 +1,82 @@ +#!/bin/bash + +cat <<-EOHead + Content-type: text/plain + 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') + refresh: 5,url=graph + +EOHead + +exec 2>&1 + +# Path to your fastcgi_cache (optional). +#CACHE_DIR=/var/www/ingRRD/cache + +## FIXME change this according to your URLs: +# +# /$user/add.html +#IFS=/ read garbage webuser garbage <<<"$REQUEST_URI" +# /cgi/$user/add.html +IFS=/ read garbage garbage webuser garbage <<<"$REQUEST_URI" + +if [[ $webuser == $AUTH_USER ]] +then + echo "Welcome agent $webuser"$'!\n\n' +else + echo 'Nice try!' + exit +fi +declare -A POST +exprdsname='^[[:upper:][:lower:]_]+$' +exprvalue='^[[:digit:]]+$' +while read dsname value +do + if [[ $dsname =~ $exprdsname ]] \ + && [[ $value =~ $exprvalue ]] + then + POST["$dsname"]="$value" + fi +done < <( + sed 's/&/\n/g;s/=/ /g' +) + +dsnames=( + 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 +) +data=N +for dsname in "${dsnames[@]}" +do + data+=:${POST["$dsname"]} + echo "$dsname....${POST["$dsname"]}" +done +rrdtool update ingress.rrd "$data" + +if [ -n "$CACHE_DIR" ] +then + find "$CACHE_DIR" -type f -delete + echo $'\nCache cleared!' +fi diff --git a/add.html b/add.html new file mode 100755 index 0000000..a993215 --- /dev/null +++ b/add.html @@ -0,0 +1,94 @@ +#!/bin/bash +exec 2>&1 + +uinames=( + AP + "Unique Portals Visited" + "Portals Discovered" + "XM Collected" + Hacks + "Resonators Deployed" + "Links Created" + "Control Fields Created" + "Mind Units Captured" + "Longest Link Ever Created" + "Largest Control Field" + "XM Recharged" + "Portals Captured" + "Unique Portals Captured" + "Resonators Destroyed" + "Portals Neutralized" + "Enemy Links Destroyed" + "Enemy Control Fields Destroyed" + "Distance Walked" + "Max Time Portal Held" + "Max Time Link Maintained" + "Max Link Length x Days" + "Max Time Field Held" + "Largest Field MUs x Days" +) +dsnames=( + 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 +) +readprevvalues() { + shift + for arg + do + prevvalues+=( "$arg" ) + done +} +readprevvalues $(rrdtool lastupdate ingress.rrd | tail -n1) + +cat <<-EOHTML +content-type: text/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') + + + + + + IngRRD - Add data + + +
+ + + +
+ + +EOHTML diff --git a/graph b/graph new file mode 100755 index 0000000..4984c9f --- /dev/null +++ b/graph @@ -0,0 +1,325 @@ +#!/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 + +if [ -z "$graph" ] +then + cat <<-EOHTML + content-type: text/html + 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 '10 minutes') + refresh: 600 + Cache-Control: max-age=3600, must-revalidate + + + + + + IngRRD - Graph + + + + + + + + +
+ << + < + R + > + >> + + + + << + < + R + > + >> +
+ 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 + 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 '10 minutes') + 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=( + HRULE:$lvl2#$L1color:L1 + HRULE:$lvl2#$L2color:L2 + HRULE:$lvl3#$L3color:L3 + HRULE:$lvl4#$L4color:L4 + HRULE:$lvl5#$L5color:L5 + HRULE:$lvl6#$L6color:L6 + HRULE:$lvl7#$L7color:L7 + HRULE:$lvl8#$L8color:L8 + HRULE:$lvl9#$L9color:L9 + HRULE:$lvl10#$L10color:L10 + HRULE:$lvl11#$L11color:L11 + HRULE:$lvl12#$L12color:L12 + HRULE:$lvl13#$L13color:L13 + HRULE:$lvl14#$L14color:L14 + HRULE:$lvl15#$L15color:L15 + HRULE:$lvl16#$L16color:L16\\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=( + 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:MAX:step=3600 \ + DEF:predict=$rrdfile:$graph:HWPREDICT \ + DEF:fail=$rrdfile:$graph:FAILURES \ + VDEF:intercept=data,LSLINT \ + VDEF:growth=data,LSLSLOPE \ + CDEF:pred=data,POP,COUNT,growth,*,intercept,+ \ + "${thresholds[@]}" \ + LINE1:predict#000000 \ + LINE1:pred#FFFF00 \ + "${draw[@]:-AREA:data#00BD27}" \ + TICK:fail#ffffa0:1.0 \ + VRULE:$now#000000 \ + 'GPRINT:data:MIN:min %6.2lf%S' \ + 'GPRINT:data:MAX:\tmax %6.2lf%S' \ + 'GPRINT:growth:\tgrowth %6.2lf%s/h\n' +fi diff --git a/nginx.example.conf b/nginx.example.conf new file mode 100644 index 0000000..cb59f5d --- /dev/null +++ b/nginx.example.conf @@ -0,0 +1,32 @@ +server { + listen 80; + listen [::]:80; + server_name ingrrd.example.com; + root /var/www/IngRRD/htdocs/; + + access_log /var/log/nginx/ingrrd.example.com.access; + location /cgi { + include fastcgi_params; + root /var/www/IngRRD/; + fastcgi_param SCRIPT_FILENAME /var/www/IngRRD/$fastcgi_script_name; + fastcgi_pass /var/run/fcgiwrap.sock; + # If you activate clear_cache_on_update, it is recommended to + # use a separate cache for this VHost. + fastcgi_cache IngRRD; + # ... so you can cache unchanged data for a long time + fastcgi_cache_valid any 1h; + fastcgi_cache_use_stale updating; + fastcgi_cache_lock on; + + location ~ ^/cgi/(.+)/add(\.html)? { + auth_basic "Who are you?"; + auth_basic_user_file /var/www/IngRRD/htpass; + include fastcgi_params; + root /var/www/IngRRD/; + fastcgi_param SCRIPT_FILENAME /var/www/IngRRD/$fastcgi_script_name; + fastcgi_pass /var/run/fcgiwrap.sock; + fastcgi_param AUTH_USER $remote_user; + fastcgi_cache_valid any 1s; + } + } +}