#! /usr/bin/env bash # $Header: /home/ubuntu/mnt/e9_copy/mitgcm.org/front_content/make_summary,v 1.7 2003/12/10 20:37:24 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 } old_summary() { # Create the old-style 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 "" >> $OUTFILE echo "" >> $OUTFILE for i in $fresults ; do if test "x$i" = xN ; then echo -n "" >> $OUTFILE else echo -n "" >> $OUTFILE fi done echo "" >> $OUTFILE echo "" >> $OUTFILE done cat >> $OUTFILE << EOF
$MACH$DATE$i$i$optfile
EOF chmod a+r $OUTFILE echo "done" } # 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 "latest" links echo "Creating the \"latest\" file for each machine: " LATEST=$OUTDIR"/latest_"$PERIOD".html" the_date=`date` 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:

Machine Type Nickname Notes
Intel P4 "faulks" Red Hat 7.3 (the "original" testing machine)
Intel P4 "shelley" Red Hat 9
Intel P3/P4 Beowulf "myrinet" MITgcm cluster facility
Alpha cluster "halem" NASA NCCS Halem
SGI Origin 2000 "hopper" NAS SGI Origin 2000
SGI Origin 3000 "lomax" NAS SGI Origin 3000
SGI Altix "orion" JPL Supercomputing and Visualization Facility
IBM POWER3 SP "bf" NCAR Blackforest
IBM POWER4 SP "bs" NCAR Bluesky
AMD Opteron "eaps" SuSE Linux 9.0 (x86-64)
Sun UltraSparc "slough" Solaris 8
Intel P4 Mosix Cluster "sea" Red Hat v7.2


The complete output for the verification runs can be found in the summary pages and the testing archives. The latest reports are:

EOF color="#bbffdd" res_url="http://mitgcm.org/testing/" MACHINES="faulks shelley myrinet eaps halem hopper lomax orion bf bs slough sea" ( 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 t_pass="--" t_tot="--" if test -r $dir/summary.txt ; then grep '^[YN] [YN] [YN] [YN] ' $dir/summary.txt > ./all_tests 2>/dev/null t_tot=`cat ./all_tests | wc -l | sed -e 's| ||g'` grep '^Y Y Y Y ' ./all_tests > ./all_ran 2>/dev/null grep advect_ ./all_ran 2>/dev/null > ./all_ran_advect t_advect=`cat ./all_ran_advect | wc -l | sed -e 's| ||g'` digits=`cat ./all_ran_advect | awk '{print $9}'` t_advect_pass=0 for k in $digits ; do test "x$k" = x-- && k=0 test $k -ge 9 && t_advect_pass=$(( $t_advect_pass + 1 )) done grep -v advect ./all_ran 2>/dev/null > ./all_ran_noadvect digits=`cat ./all_ran_noadvect | awk '{print $5}'` t_sum=0 for k in $digits ; do test "x$k" = x-- && k=0 test $k -ge 9 && t_sum=$(( $t_sum + 1 )) done t_pass=$(( $t_sum + $t_advect_pass )) fi rm -f ./all_tests ./all_ran ./all_ran_advect ./all_ran_noadvect # echo "${dir##*/} : $t_pass out of $t_tot" 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 $t_pass:$t_tot" >> ./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` ratio=`echo $tline | cut -d " " -f 6` 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 EOF done fi done cat >> $LATEST << EOF
Nickname OPTFILE Name Type Date Summary Ratio
$mname $optf $kind $DAY summary.txt $ratio
This table generated on: $the_date

Examples of the scripts used for these testing runs can be obtained from the "contrib" area of the MITgcm CVS archive.

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