Merge remote-tracking branch 'remotes/origin/master' into prod
This commit is contained in:
commit
7fc9376478
16
add
16
add
@ -59,12 +59,28 @@ else
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
while read ds junk
|
||||||
|
do
|
||||||
|
ds="${ds//ds[/}"
|
||||||
|
ds="${ds//]*/}"
|
||||||
|
datasets+=("$ds")
|
||||||
|
done < <(rrdtool info ingress.rrd |grep index)
|
||||||
|
for ds in ${dsnames[@]}
|
||||||
|
do
|
||||||
|
if [[ ! ${datasets[@]} =~ $ds ]]
|
||||||
|
then
|
||||||
|
cp -f ingress.rrd ingress.rrd.bak_add_$ds
|
||||||
|
./dsaddtor.pl ingress.rrd $ds GAUGE $((48*60*60)) 0 NaN
|
||||||
|
fi
|
||||||
|
done
|
||||||
data=N
|
data=N
|
||||||
for dsname in "${dsnames[@]}"
|
for dsname in "${dsnames[@]}"
|
||||||
do
|
do
|
||||||
data+=:${POST["$dsname"]:=U}
|
data+=:${POST["$dsname"]:=U}
|
||||||
echo "$dsname....${POST["$dsname"]}"
|
echo "$dsname....${POST["$dsname"]}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo ${POST["innovator"]} > .innovator
|
||||||
rrdtool update ingress.rrd "$data"
|
rrdtool update ingress.rrd "$data"
|
||||||
|
|
||||||
if [ -n "$CACHE_DIR" ]
|
if [ -n "$CACHE_DIR" ]
|
||||||
|
|||||||
75
add.html
75
add.html
@ -67,6 +67,7 @@ then
|
|||||||
DS:Link_Length_x_Days:GAUGE:$((48*60*60)):0:NaN \
|
DS:Link_Length_x_Days:GAUGE:$((48*60*60)):0:NaN \
|
||||||
DS:Field_Held:GAUGE:$((48*60*60)):0:NaN \
|
DS:Field_Held:GAUGE:$((48*60*60)):0:NaN \
|
||||||
DS:Field_x_Days:GAUGE:$((48*60*60)):0:NaN \
|
DS:Field_x_Days:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Mercenary:GAUGE:$((48*60*60)):0:NaN \
|
||||||
RRA:HWPREDICT:8760:8e-1:8e-1:$((24)) \
|
RRA:HWPREDICT:8760:8e-1:8e-1:$((24)) \
|
||||||
RRA:AVERAGE:99e-2:1:$((24*15)) \
|
RRA:AVERAGE:99e-2:1:$((24*15)) \
|
||||||
RRA:MAX:99e-2:1:$((24*15)) \
|
RRA:MAX:99e-2:1:$((24*15)) \
|
||||||
@ -94,6 +95,62 @@ cat <<-EOHTML
|
|||||||
<ul>
|
<ul>
|
||||||
EOHTML
|
EOHTML
|
||||||
|
|
||||||
|
case $innovator in
|
||||||
|
1)
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"0\" /> No Innovator medal</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"1\" checked=\"checked\" /> Innovator Bronze</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"2\" /> Innovator Silver</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"3\" /> Innovator Gold</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"4\" /> Innovator Platinum</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"5\" /> Innovator Onyx</li>"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"0\" /> No Innovator medal</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"1\" /> Innovator Bronze</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"2\" checked=\"checked\" /> Innovator Silver</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"3\" /> Innovator Gold</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"4\" /> Innovator Platinum</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"5\" /> Innovator Onyx</li>"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"0\" /> No Innovator medal</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"1\" /> Innovator Bronze</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"2\" /> Innovator Silver</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"3\" checked=\"checked\" /> Innovator Gold</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"4\" /> Innovator Platinum</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"5\" /> Innovator Onyx</li>"
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"0\" /> No Innovator medal</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"1\" /> Innovator Bronze</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"2\" /> Innovator Silver</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"3\" /> Innovator Gold</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"4\" checked=\"checked\" /> Innovator Platinum</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"5\" /> Innovator Onyx</li>"
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"0\" /> No Innovator medal</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"1\" /> Innovator Bronze</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"2\" /> Innovator Silver</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"3\" /> Innovator Gold</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"4\" /> Innovator Platinum</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"5\" checked=\"checked\" /> Innovator Onyx</li>"
|
||||||
|
;;
|
||||||
|
0)
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"0\" checked=\"checked\" /> No Innovator medal</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"1\" /> Innovator Bronze</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"2\" /> Innovator Silver</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"3\" /> Innovator Gold</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"4\" /> Innovator Platinum</li>"
|
||||||
|
echo "<li><input type=\"radio\" name=\"innovator\" value=\"5\" /> Innovator Onyx</li>"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
cat <<-EOHTML
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
EOHTML
|
||||||
|
|
||||||
for indice in ${!uinames[@]}
|
for indice in ${!uinames[@]}
|
||||||
do
|
do
|
||||||
echo "<li><input type=\"text\" name=\"${dsnames[indice]}\" value=\"${last["${dsnames[indice]}"]}\" /> ${uinames[indice]}</li>"
|
echo "<li><input type=\"text\" name=\"${dsnames[indice]}\" value=\"${last["${dsnames[indice]}"]}\" /> ${uinames[indice]}</li>"
|
||||||
@ -163,7 +220,23 @@ cat <<-EOHTML
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
<td class="menu-inv">Add data</td>
|
<td class="menu-inv">
|
||||||
|
<table class="menu">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="menu-inv">
|
||||||
|
<b>Add data</b>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="submenu-inv">
|
||||||
|
<b>Add</b>
|
||||||
|
</td>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="import?start=$start&end=$end">Import</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
EOHTML
|
EOHTML
|
||||||
|
|||||||
59
dsaddtor.pl
Executable file
59
dsaddtor.pl
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
# dsaddtor.pl, Program to add datasources to an existing RRD
|
||||||
|
#
|
||||||
|
# Copyright (C) 2010 R. Sandevoir remi.sandevoir(at)gmail.com
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use RRD::Simple ();
|
||||||
|
|
||||||
|
my $rrdfile = shift || &Usage;
|
||||||
|
if ($rrdfile eq '-h') {
|
||||||
|
&Usage;
|
||||||
|
exit 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $name = shift || &Usage;
|
||||||
|
my $type = shift || 'COUNTER';
|
||||||
|
my $heartbeat = shift || '600';
|
||||||
|
my $min = shift || 'NaN';
|
||||||
|
my $max = shift || 'NaN';
|
||||||
|
|
||||||
|
my $rrd = RRD::Simple->new(
|
||||||
|
file => $rrdfile,
|
||||||
|
rrdtool => "/usr/bin/rrdtool",
|
||||||
|
);
|
||||||
|
|
||||||
|
print "Adding DS $name on $rrdfile\n";
|
||||||
|
$rrd->add_source($rrdfile, $name => $type);
|
||||||
|
|
||||||
|
print "Heartbeat : $heartbeat\nMinimum value : $min\nMaximum value : $max\n";
|
||||||
|
RRDs::tune ($rrdfile, "-h","$name:$heartbeat");
|
||||||
|
RRDs::tune ($rrdfile, "-i","$name:$min");
|
||||||
|
RRDs::tune ($rrdfile, "-a","$name:$max");
|
||||||
|
|
||||||
|
sub Usage {
|
||||||
|
print "dsaddtor.pl <file.rrd> <ds_name> [type] [heartbeat] [rrdmin] [rrdmax]\n";
|
||||||
|
print "\t<file.rrd>\tSource RRD file\n";
|
||||||
|
print "\t<ds_name>\tDatasource name to add\n";
|
||||||
|
print "\t[type]\t\tType of datasource (i.e. COUNTER, GAUGE...). Default : COUNTER\n";
|
||||||
|
print "\t[heartbeat]\tLength of time in seconds before RRD thinks your DS is dead. Default : 600\n";
|
||||||
|
print "\t[rrdmin]\tMinimum value allowed for each datasource. Default : NaN\n";
|
||||||
|
print "\t[rrdmax]\tMax value allowed for each datasource. Default : NaN\n";
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
252
import
Executable file
252
import
Executable file
@ -0,0 +1,252 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 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/>.
|
||||||
|
|
||||||
|
. settings
|
||||||
|
|
||||||
|
for lib in lib/*
|
||||||
|
do
|
||||||
|
source $lib
|
||||||
|
done
|
||||||
|
read_query_string
|
||||||
|
|
||||||
|
if [[ $REQUEST_METHOD == POST ]]
|
||||||
|
then
|
||||||
|
# refresh: 0,url=/cgi/$webuser/?start=${POST["start"]}&end=${POST["end"]}
|
||||||
|
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')
|
||||||
|
|
||||||
|
EOHead
|
||||||
|
if [[ $webuser == $AUTH_USER || $webuser == dev ]]
|
||||||
|
then
|
||||||
|
echo "Welcome agent $webuser"$'!\n\n'
|
||||||
|
else
|
||||||
|
echo 'Nice try!'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
while read ds junk
|
||||||
|
do
|
||||||
|
ds="${ds//ds[/}"
|
||||||
|
ds="${ds//]*/}"
|
||||||
|
datasets+=("$ds")
|
||||||
|
done < <(rrdtool info ingress.rrd |grep index)
|
||||||
|
for ds in ${dsnames[@]}
|
||||||
|
do
|
||||||
|
if [[ ! ${datasets[@]} =~ $ds ]]
|
||||||
|
then
|
||||||
|
cp -f ingress.rrd ingress.rrd.bak_add_$ds
|
||||||
|
./dsaddtor.pl ingress.rrd $ds GAUGE $((48*60*60)) 0 NaN
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
declare -A POST
|
||||||
|
exprdsname='^[[:upper:][:lower:]_]+$'
|
||||||
|
while read dsname value
|
||||||
|
do
|
||||||
|
if [[ $dsname =~ $exprdsname ]]
|
||||||
|
then
|
||||||
|
POST["$dsname"]="$value"
|
||||||
|
fi
|
||||||
|
done < <(
|
||||||
|
sed 's/&/\n/g;s/=/ /g'
|
||||||
|
)
|
||||||
|
POST["data"]="${POST["data"]//%0D%0A/
|
||||||
|
}"
|
||||||
|
POST["data"]="${POST["data"]//%3A/:}"
|
||||||
|
POST["data"]="${POST["data"]//+/ }"
|
||||||
|
echo "${POST["data"]}"
|
||||||
|
while read date hour data
|
||||||
|
do
|
||||||
|
data=$(date -d "$date $hour" +%s):${data// /:}
|
||||||
|
rrdtool update ingress.rrd "$data" 2>&1
|
||||||
|
done <<<"${POST["data"]}"
|
||||||
|
|
||||||
|
if [ -n "$CACHE_DIR" ]
|
||||||
|
then
|
||||||
|
find "$CACHE_DIR" -type f -delete
|
||||||
|
echo $'\nCache cleared!'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
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 - $webuser - Import Data</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/ingrrd.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container" style="width:$(( graph_width + 97 ))px">
|
||||||
|
EOHTML
|
||||||
|
if ! [ -w "$rrdfile" ]
|
||||||
|
then
|
||||||
|
rrdtool create ingress.rrd -s $((60*60)) \
|
||||||
|
DS:AP:GAUGE:$((2*24*60*60)):0:NaN \
|
||||||
|
DS:Explorer:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Seer:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:XM:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Hacker:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Builder:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Connector:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Mind_Controller:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:MU:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Longest_Link:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Largest_Field:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Recharger:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Liberator:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Pioneer:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Purifier:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Neutralized:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Links_Destroyed:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Fields_Destroyed:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Walked:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Guardian:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Link_Maintained:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Link_Length_x_Days:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Field_Held:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Field_x_Days:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
DS:Mercenary:GAUGE:$((48*60*60)):0:NaN \
|
||||||
|
RRA:HWPREDICT:8760:8e-1:8e-1:$((24)) \
|
||||||
|
RRA:AVERAGE:99e-2:1:$((24*15)) \
|
||||||
|
RRA:MAX:99e-2:1:$((24*15)) \
|
||||||
|
RRA:AVERAGE:99e-2:4:$((24*180)) \
|
||||||
|
RRA:MAX:99e-2:4:$((24*180)) \
|
||||||
|
RRA:AVERAGE:99e-2:24:$(((4*365)+1)) \
|
||||||
|
RRA:MAX:99e-2:24:$(((4*365)+1)) \
|
||||||
|
RRA:AVERAGE:99e-2:$((24*30)):$(((32*365)+8)) \
|
||||||
|
RRA:MAX:99e-2:$((24*30)):$(((32*365)+8)) \
|
||||||
|
|| {
|
||||||
|
cat <<-EOHTML
|
||||||
|
<h1 style="color:red">Cannot create $rrdfile</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOHTML
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
readlast
|
||||||
|
medals
|
||||||
|
get_current_level
|
||||||
|
cat <<-EOHTML
|
||||||
|
<div class="main">
|
||||||
|
<p>Import data from e.g. https://www.agent-stats.com/ <br/>
|
||||||
|
<small>Expected format: <tt>YYYY-MM-DD hh:mm:ss 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
|
||||||
|
Mercenary</tt></small></p>
|
||||||
|
<form method="post" action="import">
|
||||||
|
<input type="hidden" name="start" value="$start" />
|
||||||
|
<input type="hidden" name="end" value="$end" />
|
||||||
|
<textarea name="data" rows="30" cols="110" /><br/>
|
||||||
|
<button type="submit" name="submit" value="send">Send</button>
|
||||||
|
</form>
|
||||||
|
<table style="width:$(( graph_width + 97 ))px">
|
||||||
|
<tr>
|
||||||
|
<td style="width:180px">
|
||||||
|
<a
|
||||||
|
href="http://validator.w3.org/check?uri=https%3A%2F%2F$SERVER_NAME$encodeduri">
|
||||||
|
<img
|
||||||
|
src="/valid-xhtml11"
|
||||||
|
alt="Valid XHTML 1.1"
|
||||||
|
height="31"
|
||||||
|
width="88" />
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="http://jigsaw.w3.org/css-validator/validator?uri=https%3A%2F%2F$SERVER_NAME$encodeduri">
|
||||||
|
<img
|
||||||
|
style="border:0;width:88px;height:31px"
|
||||||
|
src="/vcss"
|
||||||
|
alt="Valid CSS!" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td style="text-align:center">
|
||||||
|
Generated by <a href="https://forge.riquer.fr/p/ingrrd/">IngRRD</a> © 2014 Vincent Riquer
|
||||||
|
</td>
|
||||||
|
<td style="text-align:right; width:180px">
|
||||||
|
<a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">
|
||||||
|
<img src="/AGPL.png" height="31" width="88" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="menu">
|
||||||
|
<table style="width:$(( graph_width + 97 ))px" class="menu">
|
||||||
|
<tr>
|
||||||
|
<td class="menu"><a href="/cgi/$webuser/?start=$start&end=$end">Overview</a></td>
|
||||||
|
<td class="menu">
|
||||||
|
<table class="menu-nobrd">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="menu-nobrd">
|
||||||
|
<a href="/cgi/$webuser/?hist&start=$start&end=$end">
|
||||||
|
History & Trend
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="/cgi/$webuser/?hist&start=$start&end=$end">
|
||||||
|
Medals
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="/cgi/$webuser/?hist&show=all&start=$start&end=$end">
|
||||||
|
All
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td class="menu-inv">
|
||||||
|
<table class="menu">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="menu-inv">
|
||||||
|
<b>Add data</b>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td
|
||||||
|
class="menu">
|
||||||
|
<a href="add.html?start=$start&end=$end"><b>Add</b></a>
|
||||||
|
</td>
|
||||||
|
<td class="submenu-inv">
|
||||||
|
Import
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
EOHTML
|
||||||
|
show_current_level
|
||||||
|
cat <<-EOHTML
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOHTML
|
||||||
|
fi
|
||||||
61
index
61
index
@ -95,7 +95,23 @@ then
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
<td class="menu"><a href="add.html?start=$start&end=$end"><b>Add data</b></a></td>
|
<td class="menu">
|
||||||
|
<table class="menu-nobrd">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<a href="add.html?start=$start&end=$end"><b>Add data</b></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="add.html?start=$start&end=$end"><b>Add</b></a>
|
||||||
|
</td>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="import?start=$start&end=$end">Import</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
EOHTML
|
EOHTML
|
||||||
@ -300,7 +316,23 @@ then
|
|||||||
cat <<-EOHTML
|
cat <<-EOHTML
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
<td class="menu"><a href="add.html?start=$start&end=$end"><b>Add data</b></a></td>
|
<td class="menu">
|
||||||
|
<table class="menu-nobrd">
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<a href="add.html?start=$start&end=$end"><b>Add data</b></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="add.html?start=$start&end=$end"><b>Add</b></a>
|
||||||
|
</td>
|
||||||
|
<td class="menu">
|
||||||
|
<a href="import?start=$start&end=$end">Import</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
EOHTML
|
EOHTML
|
||||||
@ -331,30 +363,7 @@ then
|
|||||||
if (( show_all ))
|
if (( show_all ))
|
||||||
then
|
then
|
||||||
stats=(
|
stats=(
|
||||||
AP
|
"${dsnames[@]}"
|
||||||
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
|
else
|
||||||
stats=(
|
stats=(
|
||||||
|
|||||||
27
lib/globals
27
lib/globals
@ -34,3 +34,30 @@ declare \
|
|||||||
start \
|
start \
|
||||||
end \
|
end \
|
||||||
|
|
||||||
|
want_ds=(
|
||||||
|
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
|
||||||
|
Mercenary
|
||||||
|
)
|
||||||
|
|||||||
41
lib/medals
41
lib/medals
@ -4,6 +4,47 @@ medals() {
|
|||||||
local \
|
local \
|
||||||
stat \
|
stat \
|
||||||
|
|
||||||
|
if [[ -f .innovator ]]
|
||||||
|
then
|
||||||
|
innovator=$(<.innovator)
|
||||||
|
else
|
||||||
|
innovator=0
|
||||||
|
fi
|
||||||
|
if (( innovator >= 1 ))
|
||||||
|
then
|
||||||
|
(( bronzecount++ ))
|
||||||
|
bronzes+=( innovator )
|
||||||
|
else
|
||||||
|
nosilver["Innovator"]=1
|
||||||
|
fi
|
||||||
|
if (( innovator >= 2 ))
|
||||||
|
then
|
||||||
|
(( silvercount++ ))
|
||||||
|
silvers+=( innovator )
|
||||||
|
else
|
||||||
|
nobronze["Innovator"]=1
|
||||||
|
fi
|
||||||
|
if (( innovator >= 3 ))
|
||||||
|
then
|
||||||
|
(( goldcount++ ))
|
||||||
|
golds+=( innovator )
|
||||||
|
else
|
||||||
|
nogold["Innovator"]=1
|
||||||
|
fi
|
||||||
|
if (( innovator >= 4 ))
|
||||||
|
then
|
||||||
|
(( platinumcount++ ))
|
||||||
|
platinums+=( innovator )
|
||||||
|
else
|
||||||
|
noplatinum["Innovator"]=1
|
||||||
|
fi
|
||||||
|
if (( innovator == 5 ))
|
||||||
|
then
|
||||||
|
(( blackcount++ ))
|
||||||
|
blacks+=( innovator )
|
||||||
|
else
|
||||||
|
noblack["Innovator"]=1
|
||||||
|
fi
|
||||||
for stat in "${medals[@]}"
|
for stat in "${medals[@]}"
|
||||||
do
|
do
|
||||||
if (( last["$stat"] >= bronze["$stat"] ))
|
if (( last["$stat"] >= bronze["$stat"] ))
|
||||||
|
|||||||
2
settings
2
settings
@ -60,6 +60,7 @@ uinames=(
|
|||||||
"Max Link Length x Days"
|
"Max Link Length x Days"
|
||||||
"Max Time Field Held"
|
"Max Time Field Held"
|
||||||
"Largest Field MUs x Days"
|
"Largest Field MUs x Days"
|
||||||
|
"Unique missions completed"
|
||||||
)
|
)
|
||||||
dsnames=(
|
dsnames=(
|
||||||
AP
|
AP
|
||||||
@ -86,6 +87,7 @@ dsnames=(
|
|||||||
Link_Length_x_Days
|
Link_Length_x_Days
|
||||||
Field_Held
|
Field_Held
|
||||||
Field_x_Days
|
Field_x_Days
|
||||||
|
Mercenary
|
||||||
)
|
)
|
||||||
medals=(
|
medals=(
|
||||||
Explorer
|
Explorer
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user