diff --git a/add.html b/add.html index 95a15aa..c19ab32 100755 --- a/add.html +++ b/add.html @@ -220,7 +220,23 @@ cat <<-EOHTML - Add data + + + + + + + + + + + EOHTML diff --git a/import b/import new file mode 100755 index 0000000..1950c7a --- /dev/null +++ b/import @@ -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 . + +. 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') + + + + + + IngRRD - $webuser - Import Data + + + +
+ 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 +

Cannot create $rrdfile

+ + + EOHTML + exit + } + fi + readlast + medals + get_current_level + cat <<-EOHTML +
+

Import data from e.g. https://www.agent-stats.com/
+ Expected format: 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

+
+ + +