#! /opt/bin/dash
#
# os/cgi/vsfs-check

export LC_COLLATE=C

echo "Content-type: text/plain\n"
user=`echo "${REMOTE_USER}" | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]'`
if [ -z "$user" ]; then echo "Bad user: ${REMOTE_USER} -> $user"; exit 1; fi
if [ -n "$HTTP_HOST" ]; then cd /os/prog/vsfs || exit 1; fi
echo "$user - vsfs log\n"

echo "score: max (good/(good+bad))*100\n"

# since arg2 is optional and counts as bad if wrongly present, good+bad is not a constant,
# and best score is max(good-bad) instead of max(good)
#
for n in "operation" "state"
do
  grep " $user ${n}:" log | awk -v "n=$n" 'BEGIN { diff=-9999; good=0; total=1; when=""; } {
   x=$10-$12; if( x > diff) { diff = x; good = $10; total = good + $12; when = $0; } }
   END { score=(good/total)*100; printf("%s: %.2f\n%s\n\n", n, score, when); }'
done

echo "all:\n"

grep " $user " log

# Tue May 26 10:55:07 EDT 2020 rperry operation: good 6 bad 7 in: 
#   1   2  3        4   5    6      7          8    9 10 11 12
