#! /usr/bin/env bash
# $Header: /home/ubuntu/mnt/e9_copy/mitgcm.org/front_content/make_summary,v 1.4 2003/12/07 06:52:17 edhill Exp $
#
# The purpose of this script is to create HTML summaries of the
# directories produced by the "parse_emails" script.
usage()
{
echo
echo "Usage: $0 [OPTIONS]"
echo
echo "where possible OPTIONS are:"
echo " (-help|-h) print usage"
echo " (-date |-d )PERIOD run for PERIOD=\"YYYY_MM\""
echo " [def=\"$PERIOD\"]"
echo
exit 1
}
# defaults
PERIOD=`date +%Y`"_"`date +%m`
# Parse options
ac_prev=
for ac_option ; do
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
ac_prev=
continue
fi
ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
case $ac_option in
-help | --help | -h | --h)
usage ;;
-date | --date | -d | --d)
ac_prev=PERIOD ;;
--date=* | -date=*)
PERIOD=$ac_optarg ;;
*)
echo "Error: don't understand argument \"$ac_option\""
usage
;;
esac
done
INDIR="/u/u0/httpd/html/testing/results/$PERIOD"
OUTDIR="/u/u0/httpd/html/testing/summary"
OUTFILE=$OUTDIR"/summary_"$PERIOD".html"
# Create the summary file for $PERIOD
echo -n "Creating the summary file for the period \"$PERIOD\" ... "
cat > $OUTFILE << EOF
MITgcm testing summary
EOF
# all_files=`find $INDIR -name summary.txt`
all_files=`( cd $INDIR ; find . -name summary.txt )`
for f in $all_files ; do
file=$INDIR"/"${f/.\//}
grep "^fresults" $file > /dev/null 2>&1
RETVAL=$?
if test "x$RETVAL" != x0 ; then
continue
fi
url=`echo $file | sed -e 's|/u/edhill/www|http://mitgcm.org/~edhill|'`
url=`echo $url | sed -e 's|summary.txt||'`
MACH=
fresults=
color="#eeeeee"
source $file
echo $fresults | grep FAIL > /dev/null 2>&1
if test "x$?" = x0 ; then
color="#ff99ff"
fi
echo $fresults | grep pass > /dev/null 2>&1
if test "x$?" = x0 ; then
color="#99ffff"
fi
gm_state=`echo $file | sed -e 's/summary.txt/genmake_state/g'`
if test -r $gm_state ; then
grep '^OPTFILE=' $gm_state > ./tmp_state
source ./tmp_state
else
optfile="unknown"
fi
optfile=`echo $OPTFILE | awk -F '/' '{print $NF}'`
echo "" >> $OUTFILE
echo "$MACH | " >> $OUTFILE
echo "$DATE | " >> $OUTFILE
for i in $fresults ; do
if test "x$i" = xN ; then
echo -n "$i | " >> $OUTFILE
else
echo -n "$i | " >> $OUTFILE
fi
done
echo "$optfile | " >> $OUTFILE
echo "
" >> $OUTFILE
done
cat >> $OUTFILE << EOF
EOF
chmod a+r $OUTFILE
echo "done"
# Create the "latest" links
echo "Creating the \"latest\" file for each machine: "
LATEST=$OUTDIR"/latest_"$PERIOD".html"
cat > $LATEST << EOF
MITgcm testing summary
The MITgcm model is tested
(compiled and run) in an automated fashion on a varirety of
different machines. The following is a summary of the MITgcm
verification suite for the time period: $PERIOD.
The machine naming scheme is:
The complete output for the verification runs can be found in
the summary pages.
The latest reports are:
Nickname |
OPTFILE Name |
Type |
Date (yyyymmdd) |
Summary |
EOF
color="#bbffdd"
res_url="http://mitgcm.org/testing/"
MACHINES="faulks shelley myrinet eaps halem hopper lomax orion bf bs"
( cd $INDIR ; ls -1 ) > ./dir_all
for mname in $MACHINES ; do
echo " $mname"
if test "x$color" = x#bbffdd ; then
color="#bbddff"
else
color="#bbffdd"
fi
dir_list=`grep $mname ./dir_all`
echo -n "" > ./mlist
for i in $dir_list ; do
dir=$INDIR"/"$i
OPTFILE=
if test -r $dir/summary.txt ; then
comm=`grep 'OPTFILE=' $dir/summary.txt`
eval $comm
OPTFILE=${OPTFILE##*/}
fi
if test "x$OPTFILE" = x -a -r "$dir/genmake_state" ; then
comm=`grep 'OPTFILE=' $dir/genmake_state 2>/dev/null`
eval $comm
OPTFILE=${OPTFILE##*/}
fi
if test "x$OPTFILE" = x ; then
comm=`grep '^# OPTFILE=' $dir/*/Makefile 2>/dev/null | head -1`
comm=${comm##*#}
eval $comm
OPTFILE=${OPTFILE##*/}
fi
if test "x$OPTFILE" = x ; then
OPTFILE="not_explicitly_specified"
fi
ADJOINT=
if test -r $dir/summary.txt ; then
comm=`grep 'ADJOINT=true' $dir/summary.txt 2>/dev/null`
eval $comm
fi
if test "x$ADJOINT" = x ; then
kind="forward"
else
test "x$ADJOINT" = xtrue && kind="adjoint"
fi
tokens=`echo $i | sed -e 's|_| |g'`
echo "" > ./ms_tmp
for tok in $tokens ; do
echo $tok >> ./ms_tmp
done
DAY=`cat ./ms_tmp | awk '(length($1)==8 && substr($1,0,3)=="200")'`
rm -f ./ms_tmp
echo "$OPTFILE$kind $DAY $OPTFILE $kind $i" >> ./mlist
done
# helpful for debugging
# cat ./mlist
# Do we have any data? If so, create the latest pointer.
num=`wc -l ./mlist | awk '{print $1}'`
if test $num -gt 0 ; then
keys=`cat ./mlist | cut -d " " -f 1 | sort | uniq`
for key in $keys ; do
tline=`grep "^$key " ./mlist | sort -r | head -1`
ldir=`echo $tline | cut -d " " -f 5`
kind=`echo $tline | cut -d " " -f 4`
optf=`echo $tline | cut -d " " -f 3`
DAY=`echo $tline | cut -d " " -f 2`
URL="results/$PERIOD/$ldir"
cat <>$LATEST
$mname |
$optf |
$kind |
$DAY |
summary.txt |
EOF
done
fi
done
cat >> $LATEST << EOF
EOF
rm -f ./dir_all ./mlist
CURR_PER=`date +%Y`"_"`date +%m`
if test "x$PERIOD" = "x$CURR_PER" ; then
cp $LATEST ./testing.xml
(
cd $OUTDIR
rm -f latest.html
ln -s $LATEST latest.html
)
fi