initial commit

This commit is contained in:
Vincent Riquer 2014-05-27 02:55:44 +02:00
commit 7453925561
4 changed files with 533 additions and 0 deletions

82
add Executable file
View File

@ -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

94
add.html Executable file
View File

@ -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')
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IngRRD - Add data</title>
</head>
<body>
<form method="post" action="add">
<ul>
EOHTML
for indice in ${!uinames[@]}
do
echo "<li><input type=\"text\" name=\"${dsnames[indice]}\" value=\"${prevvalues[indice]}\" /> ${uinames[indice]}</li>"
done
cat <<-EOHTML
</ul>
<input type="hidden" name="time" value="$(date +%s)" />
<button type="submit" name="submit" value="send">Send</button>
</form>
</body>
</html>
EOHTML

325
graph Executable file
View File

@ -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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IngRRD - Graph</title>
</head>
<body>
<table style="width:$(( graph_width + 97 ))px">
<tr>
<td>
<a href="?start=$(( start - 604800 ))&end=$end">&lt;&lt;</a>
<a href="?start=$(( start - 86400 ))&end=$end">&lt;</a>
<a href="?start=$default_start&end=$end">R</a>
<a href="?start=$(( start + 86400 ))&end=$end">&gt;</a>
<a href="?start=$(( start + 604800 ))&end=$end">&gt;&gt;</a>
</td>
<td align="center">
<div align="center"><a href="add.html">Add data</a></div>
</td>
<td align="right">
<a href="?start=$start&end=$(( end - 604800 ))">&lt;&lt;</a>
<a href="?start=$start&end=$(( end - 86400 ))">&lt;</a>
<a href="?start=$start&end=$default_end">R</a>
<a href="?start=$start&end=$(( end + 86400 ))">&gt;</a>
<a href="?start=$start&end=$(( end + 604800 ))">&gt;&gt;</a>
</td>
</tr>
</table>
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
<div>
<img src="graph?graph=$stat&start=$start&end=$end" />
</div>
EOHTML
done
cat <<-EOHTML
</body></html>
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

32
nginx.example.conf Normal file
View File

@ -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;
}
}
}