Show current level on all pages

Begin splitting code into functions
This commit is contained in:
Vincent Riquer 2014-06-29 19:11:33 +02:00
parent 509e7fa4e3
commit d618373dc9
9 changed files with 606 additions and 206 deletions

View File

@ -18,33 +18,11 @@
. settings
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
;;
esac
done <<<"${query_data//=/ }"
fi
readprevvalues() {
shift
for arg
do
prevvalues+=( "$arg" )
done
}
readprevvalues $(rrdtool lastupdate ingress.rrd | tail -n1)
for lib in lib/*
do
source $lib
done
read_query_string
cat <<-EOHTML
content-type: text/xml
@ -91,7 +69,6 @@ Expires: $(LC_ALL=C TZ=GMT date +'%a, %d %b %Y %X %Z')
<td class="menu-inv">Add data</td>
</tr>
</table>
</div>
EOHTML
if ! [ -w "$rrdfile" ]
then
@ -138,6 +115,13 @@ then
exit
}
fi
readlast
medals
get_current_level
show_current_level
cat <<-EOHTML
</div>
EOHTML
cat <<-EOHTML
<div class="main">
<form method="post" action="add">
@ -146,7 +130,7 @@ EOHTML
for indice in ${!uinames[@]}
do
echo "<li><input type=\"text\" name=\"${dsnames[indice]}\" value=\"${prevvalues[indice]}\" /> ${uinames[indice]}</li>"
echo "<li><input type=\"text\" name=\"${dsnames[indice]}\" value=\"${last["${dsnames[indice]}"]}\" /> ${uinames[indice]}</li>"
done
cat <<-EOHTML

193
index
View File

@ -17,6 +17,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. settings
for lib in lib/*
do
source $lib
done
if [ ! -w "$rrdfile" ]
then
cat <<-EOHead
@ -29,45 +34,22 @@ then
exit
fi
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
;;
hist|trend)
show_graphs=1
;;
graph)
[[ $value =~ $exprgraph ]] && graph=$value
;;
show)
[[ $value == all ]] && show_all=1
;;
esac
done <<<"${query_data//=/ }"
fi
read_query_string
(( start >= end)) && (( end = start + 604800 ))
if [ -z "$graph" ]
then
readlast
medals
get_current_level
if (( show_all ))
then
title="IngRRD - $webuser - History &amp; Trend: All stats"
title="IngRRD - $webuser [L$curlevel] - History &amp; Trend: All stats"
elif (( show_graphs ))
then
title="IngRRD - $webuser - History &amp; Trend: Badges"
title="IngRRD - $webuser [L$curlevel] - History &amp; Trend: Badges"
else
title="IngRRD - $webuser - Overview"
title="IngRRD - $webuser [L$curlevel] - Overview"
fi
cat <<-EOHTML
content-type: application/xhtml+xml
@ -116,59 +98,12 @@ then
<td class="menu"><a href="add.html?start=$start&amp;end=$end"><b>Add data</b></a></td>
</tr>
</table>
EOHTML
show_current_level
cat <<-EOHTML
</div>
<div class="main">
EOHTML
readarray -t lastupdatelines < <(
rrdtool lastupdate $rrdfile
)
indices=( ${lastupdatelines[0]} )
values=( ${lastupdatelines[2]#*:} )
declare -A last
for index in ${!indices[@]}
do
last["${indices[index]}"]=${values[index]}
done
unset indices values
for stat in "${medals[@]}"
do
if (( last["$stat"] >= bronze["$stat"] ))
then
(( bronzecount++ ))
bronzes+=( "$stat" )
else
upbronze[last["$stat"] * 100 / bronze["$stat"]]+="$stat "
fi
if (( last["$stat"] >= silver["$stat"] ))
then
(( silvercount++ ))
silvers+=( "$stat" )
else
upsilver[last["$stat"] * 100 / silver["$stat"]]+="$stat "
fi
if (( last["$stat"] >= gold["$stat"] ))
then
(( goldcount++ ))
golds+=( "$stat" )
else
upgold[last["$stat"] * 100 / gold["$stat"]]+="$stat "
fi
if (( last["$stat"] >= platinum["$stat"] ))
then
(( platinumcount++ ))
platinums+=( "$stat" )
else
upplatinum[last["$stat"] * 100 / platinum["$stat"]]+="$stat "
fi
if (( last["$stat"] >= black["$stat"] ))
then
(( blackcount++ ))
blacks+=( "$stat" )
else
upblack[last["$stat"] * 100 / black["$stat"]]+="$stat "
fi
done
cat <<-EOHTML
<div>
<table class="level">
@ -180,86 +115,15 @@ then
<th class="badge">Platinum</th>
<th class="badge">Black</th>
</tr>
<tr>
<td />
<td class="AP">$(printf "%'li" ${last["AP"]})</td>
<td class="badge">
EOHTML
for stat in ${silvers[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="badge"
src="/${img//_/-}-silver.png"
title="$stat"
alt="$stat silver" />
</a>
EOHTML
done
cat <<-EOHTML
</td>
<td class="badge">
EOHTML
for stat in ${golds[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="badge"
src="/${img//_/-}-gold.png"
title="$stat"
alt="$stat gold" />
</a>
EOHTML
done
cat <<-EOHTML
</td>
<td class="badge">
EOHTML
for stat in ${platinums[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="badge"
src="/${img//_/-}-platinum.png"
title="$stat"
alt="$stat platinum" />
</a>
EOHTML
done
cat <<-EOHTML
</td>
<td class="badge">
EOHTML
for stat in ${blacks[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="badge"
src="/${img//_/-}-black.png"
title="$stat"
alt="$stat black" />
</a>
EOHTML
done
cat <<-EOHTML
</td>
</tr>
EOHTML
for level in {1..16}
do
echo "<tr><th class=\"level\">$level</th>"
if (( level <= curlevel ))
then
echo "<tr class=\"curlevel\"><th class=\"level\">$level</th>"
else
echo "<tr class=\"nextlevel\"><th class=\"level\">$level</th>"
fi
if (( last["AP"] >= lvl[level] ))
then
echo '<td class="AP" style="background:lightgreen">'
@ -276,6 +140,7 @@ then
echo '<td class="badge" style="background:lightgreen">'${lvlsilver[level]}'</td>'
else
echo "<td class=\"badge\" style=\"background:lightgrey\">${lvlsilver[level]} (<span class=\"missing\">$(( silvercount - lvlsilver[level] ))</span>)<br />"
count=0
for id in {100..0}
do
[ -z "${upsilver[id]}" ] && continue
@ -296,6 +161,7 @@ then
alt="$stat silver" />
</a>
EOHTML
(( count++ == lvlsilver[level] - silvercount )) && break 2
done
done
echo '</td>'
@ -305,6 +171,7 @@ then
echo '<td class="badge" style="background:lightgreen">'${lvlgold[level]}'</td>'
else
echo "<td class=\"badge\" style=\"background:lightgrey\">${lvlgold[level]} (<span class=\"missing\">$(( goldcount - lvlgold[level] ))</span>)<br />"
count=0
for id in {100..0}
do
[ -z "${upgold[id]}" ] && continue
@ -325,6 +192,7 @@ then
alt="$stat gold" />
</a>
EOHTML
(( count++ == lvlgold[level] - goldcount )) && break 2
done
done
echo '</td>'
@ -334,6 +202,7 @@ then
echo '<td class="badge" style="background:lightgreen">'${lvlplatinum[level]}'</td>'
else
echo "<td class=\"badge\" style=\"background:lightgrey\">${lvlplatinum[level]} (<span class=\"missing\">$(( platinumcount - lvlplatinum[level] ))</span>)<br />"
count=0
for id in {100..0}
do
[ -z "${upplatinum[id]}" ] && continue
@ -354,6 +223,7 @@ then
alt="$stat platinum" />
</a>
EOHTML
(( count++ == lvlplatinum[level] - platinumcount )) && break 2
done
done
echo '</td>'
@ -363,6 +233,7 @@ then
echo '<td class="badge" style="background:lightgreen">'${lvlblack[level]}'</td>'
else
echo "<td class=\"badge\" style=\"background:lightgrey\">${lvlblack[level]} (<span class=\"missing\">$(( blackcount - lvlblack[level] ))</span>)<br />"
count=0
for id in {100..0}
do
[ -z "${upblack[id]}" ] && continue
@ -383,6 +254,7 @@ then
alt="$stat black" />
</a>
EOHTML
(( count++ == lvlblack[level] - blackcount )) && break 2
done
done
echo '</td>'
@ -402,7 +274,7 @@ then
<td class="menu-inv">
<table class="menu">
<tr>
<td colspan="2" class="menu-inv">History</td>
<td colspan="2" class="menu-inv">History &amp; Trend</td>
</tr>
EOHTML
if (( show_all ))
@ -431,6 +303,9 @@ then
<td class="menu"><a href="add.html?start=$start&amp;end=$end"><b>Add data</b></a></td>
</tr>
</table>
EOHTML
show_current_level
cat <<-EOHTML
<table style="width:$(( graph_width + 97 ))px">
<tr>
<td>
@ -450,7 +325,7 @@ then
</tr>
</table>
</div>
<div class="main">
<div class="maingraph">
EOHTML
if (( show_all ))

131
ingrrd.css Normal file
View File

@ -0,0 +1,131 @@
/*
* IngRRD (https://forge.riquer.fr/p/ingrrd/)
* Copyright (C) 2014 Vincent Riquer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
div.container {
position: relative;
clear: both;
margin: auto;
}
div.menu {
z-index: 1000;
position: fixed;
top: 0px;
background: white;
border: 1px solid black;
}
div.anchor {
position: relative;
top: -9.5em;
}
table.menu {
border: 1px solid black;
border-collapse: collapse;
text-align: center;
width: 100%;
}
table.menu-nobrd {
border-collapse: collapse;
text-align: center;
width: 100%;
}
td.menu {
border: 1px solid black;
background: white;
}
td.menu-inv {
background: black;
color: white
}
td.submenu-inv {
background: #444;
color: white
}
div.main {
position: absolute;
top: 7.5em;
}
div.maingraph {
position: absolute;
top: 9.3em;
}
table.curlevel {
width: 100%;
background: white;
text-align: center;
}
tr.curlevel {
background: lightgreen;
}
tr.nextlevel {
background: lightgrey;
}
td.curlevel {
color: rgb(105, 105, 0);
font-weight: bold;
}
td.curbadge {
width: 145px;
}
table.level {
width: 100%;
text-align: center;
}
th.level,td.level {
text-align: right;
}
th.AP,td.AP {
text-align: right;
}
th.badge,td.badge {
width: 170px;
}
a.badge {
color: black;
text-decoration: none;
}
img.badge {
width: 30px;
height: 30px;
}
img.minibadge {
width: 20px;
height: 20px;
}
span.missing {
color: red;
font-weight: bold;
}

20
lib/get_current_level Normal file
View File

@ -0,0 +1,20 @@
#!/bin/bash
get_current_level() {
for level in {1..16}
do
if ((
last["AP"] >= lvl[level]
&& silvercount >= lvlsilver[level]
&& goldcount >= lvlgold[level]
&& platinumcount >= lvlplatinum[level]
&& blackcount >= lvlblack[level]
))
then
curlevel=$level
else
nextlevel=$level
break
fi
done
}

32
lib/globals Normal file
View File

@ -0,0 +1,32 @@
#!/bin/bash
declare -A \
last \
declare -a \
bronzes \
silvers \
golds \
platinums \
blacks \
upbronze \
upsilver \
upgold \
upplatinum \
upblack \
declare -i \
bronzecount \
silvercount \
goldcount \
platinumcount \
blackcount \
show_graphs \
show_all \
curlevel \
declare \
graph \
start \
end \

45
lib/medals Normal file
View File

@ -0,0 +1,45 @@
#!/bin/bash
medals() {
local \
stat \
for stat in "${medals[@]}"
do
if (( last["$stat"] >= bronze["$stat"] ))
then
(( bronzecount++ ))
bronzes+=( "$stat" )
else
upbronze[last["$stat"] * 100 / bronze["$stat"]]+="$stat "
fi
if (( last["$stat"] >= silver["$stat"] ))
then
(( silvercount++ ))
silvers+=( "$stat" )
else
upsilver[last["$stat"] * 100 / silver["$stat"]]+="$stat "
fi
if (( last["$stat"] >= gold["$stat"] ))
then
(( goldcount++ ))
golds+=( "$stat" )
else
upgold[last["$stat"] * 100 / gold["$stat"]]+="$stat "
fi
if (( last["$stat"] >= platinum["$stat"] ))
then
(( platinumcount++ ))
platinums+=( "$stat" )
else
upplatinum[last["$stat"] * 100 / platinum["$stat"]]+="$stat "
fi
if (( last["$stat"] >= black["$stat"] ))
then
(( blackcount++ ))
blacks+=( "$stat" )
else
upblack[last["$stat"] * 100 / black["$stat"]]+="$stat "
fi
done
}

38
lib/read_query_string Normal file
View File

@ -0,0 +1,38 @@
#!/bin/bash
read_query_string() {
local \
exprgraph \
exprtime \
name \
query_data \
value \
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
;;
hist|trend)
show_graphs=1
;;
graph)
[[ $value =~ $exprgraph ]] && graph=$value
;;
show)
[[ $value == all ]] && show_all=1
;;
esac
done <<<"${query_data//=/ }"
fi
}

19
lib/readlast Normal file
View File

@ -0,0 +1,19 @@
#!/bin/bash
readlast() {
local \
index \
indices \
lastupdatelines \
values \
readarray -t lastupdatelines < <(
rrdtool lastupdate $rrdfile
)
indices=( ${lastupdatelines[0]} )
values=( ${lastupdatelines[2]#*:} )
for index in ${!indices[@]}
do
last["${indices[index]}"]=${values[index]}
done
}

256
lib/show_current_level Normal file
View File

@ -0,0 +1,256 @@
#!/bin/bash
show_current_level() {
cat <<-EOHTML
<table class="curlevel" style="width:$(( graph_width + 97 ))px">
<tr class="curlevel">
<td class="curlevel">L$curlevel</td>
<td class="curAP">$(printf "%'li" ${last["AP"]})&nbsp;AP</td>
<td class="curbadge">
EOHTML
for stat in ${bronzes[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-bronze.png"
title="$stat"
alt="$stat bronze" />
</a>
EOHTML
done
for id in {100..0}
do
[ -z "${upbronze[id]}" ] && continue
(( greenlevel = id * 255 / 100 ))
(( redlevel = 255 - greenlevel ))
for stat in ${upbronze[id]}
do
img=${stat,,}
cat <<-EOHTML
<a
class="badge"
style="background:#$(printf %02x%02x $redlevel $greenlevel )00"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-bronze.png"
title="$stat $id%"
alt="$stat bronze" />
</a>
EOHTML
done
done
cat <<-EOHTML
</td>
<td class="curbadge">
EOHTML
for stat in ${silvers[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-silver.png"
title="$stat"
alt="$stat silver" />
</a>
EOHTML
done
for id in {100..0}
do
[ -z "${upsilver[id]}" ] && continue
(( greenlevel = id * 255 / 100 ))
(( redlevel = 255 - greenlevel ))
for stat in ${upsilver[id]}
do
img=${stat,,}
cat <<-EOHTML
<a
class="badge"
style="background:#$(printf %02x%02x $redlevel $greenlevel )00"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-silver.png"
title="$stat $id%"
alt="$stat silver" />
</a>
EOHTML
done
done
cat <<-EOHTML
</td>
<td class="curbadge">
EOHTML
for stat in ${golds[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-gold.png"
title="$stat"
alt="$stat gold" />
</a>
EOHTML
done
for id in {100..0}
do
[ -z "${upgold[id]}" ] && continue
(( greenlevel = id * 255 / 100 ))
(( redlevel = 255 - greenlevel ))
for stat in ${upgold[id]}
do
img=${stat,,}
cat <<-EOHTML
<a
class="badge"
style="background:#$(printf %02x%02x $redlevel $greenlevel )00"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-gold.png"
title="$stat $id%"
alt="$stat gold" />
</a>
EOHTML
done
done
cat <<-EOHTML
</td>
<td class="curbadge">
EOHTML
for stat in ${platinums[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-platinum.png"
title="$stat"
alt="$stat platinum" />
</a>
EOHTML
done
for id in {100..0}
do
[ -z "${upplatinum[id]}" ] && continue
(( greenlevel = id * 255 / 100 ))
(( redlevel = 255 - greenlevel ))
for stat in ${upplatinum[id]}
do
img=${stat,,}
cat <<-EOHTML
<a
class="badge"
style="background:#$(printf %02x%02x $redlevel $greenlevel )00"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-platinum.png"
title="$stat $id%"
alt="$stat platinum" />
</a>
EOHTML
done
done
cat <<-EOHTML
</td>
<td class="curbadge">
EOHTML
for stat in ${blacks[@]}
do
img=${stat,,}
cat <<-EOHTML
<a class="badge"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-black.png"
title="$stat"
alt="$stat black" />
</a>
EOHTML
done
for id in {100..0}
do
[ -z "${upblack[id]}" ] && continue
(( greenlevel = id * 255 / 100 ))
(( redlevel = 255 - greenlevel ))
for stat in ${upblack[id]}
do
img=${stat,,}
cat <<-EOHTML
<a
class="badge"
style="background:#$(printf %02x%02x $redlevel $greenlevel )00"
href="?hist&amp;start=$start&amp;end=$end#$stat">
<img
class="minibadge"
src="/${img//_/-}-black.png"
title="$stat $id%"
alt="$stat black" />
</a>
EOHTML
done
done
cat <<-EOHTML
</td>
</tr>
<tr class="nextlevel">
<td class="curevel">L$nextlevel</td>
EOHTML
readable=$(printf "%'li" ${lvl[nextlevel]})
if (( last["AP"] >= lvl[nextlevel] ))
then
style='style="background:lightgreen"'
else
style=''
fi
cat <<-EOHTML
<td class="curAP" $style>${readable// /&nbsp;}&nbsp;AP</td>
<td />
EOHTML
if (( silvercount >= lvlsilver[level] ))
then
echo '<td class="curbadge" style="background:lightgreen">'${lvlsilver[level]}'</td>'
else
echo "<td class=\"curbadge\" style=\"background:lightgrey\">${lvlsilver[level]} (<span class=\"missing\">$(( silvercount - lvlsilver[level] ))</span>)"
echo '</td>'
fi
if (( goldcount >= lvlgold[level] ))
then
echo '<td class="curbadge" style="background:lightgreen">'${lvlgold[level]}'</td>'
else
echo "<td class=\"curbadge\" style=\"background:lightgrey\">${lvlgold[level]} (<span class=\"missing\">$(( goldcount - lvlgold[level] ))</span>)"
echo '</td>'
fi
if (( platinumcount >= lvlplatinum[level] ))
then
echo '<td class="curbadge" style="background:lightgreen">'${lvlplatinum[level]}'</td>'
else
echo "<td class=\"curbadge\" style=\"background:lightgrey\">${lvlplatinum[level]} (<span class=\"missing\">$(( platinumcount - lvlplatinum[level] ))</span>)"
echo '</td>'
fi
if (( blackcount >= lvlblack[level] ))
then
echo '<td class="curbadge" style="background:lightgreen">'${lvlblack[level]}'</td>'
else
echo "<td class=\"curbadge\" style=\"background:lightgrey\">${lvlblack[level]} (<span class=\"missing\">$(( blackcount - lvlblack[level] ))</span>)"
echo '</td>'
fi
cat <<-EOHTML
</tr>
</table>
EOHTML
}