#! /usr/bin/env bash # $Header: /home/ubuntu/mnt/e9_copy/mitgcm.org/front_content/make_summary,v 1.90 2024/01/03 00:37:19 jmc 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 } export LC_ALL="en_US.UTF-8" CURR_PER=`date +%Y`"_"`date +%m` # defaults PERIOD=$CURR_PER # 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="/net/orwell/export/export-9/mitgcm-testing/results/$PERIOD" #OUTDIR="/home/jmc/mitgcm/test_web/summary" INDIR="/u/u0/httpd/html/testing/results/$PERIOD" OUTDIR="/u/u0/httpd/html/testing/summary" OUTFILE=$OUTDIR"/output_"$PERIOD".html" res_url="http://mitgcm.org/testing/" #TMP=./mksum_$$ #- try to put temporary files in system-local /tmp dir TMP=/tmp/mksum_$$ touch $TMP ; retVal=$? if [ $retVal -eq 0 ] ; then if test ! -r $TMP ; then TMP=./mksum_$$ ; fi else TMP=./mksum_$$ fi rm -f $TMP # echo "temp files: $TMP" # Create the links in $OUTFILE : echo "Creating the \"latest\" file for each machine: " the_date=`date` sed "s/_PERIOD/$PERIOD/" summary_head > $OUTFILE cat <>$OUTFILE EOF color="#bbffdd" ncolor="#bbddff" MACHINES="villon batsi engaging svante glacier" MACHINES="$MACHINES albedo pleiades archer" ( cd $INDIR ; ls -1 -t */summary.txt | sed 's/\/summary.txt//' ) > $TMP.dir_all MALL=`cat $TMP.dir_all | sed -e 's|_| |g' | awk '{print $2}' | sort | uniq` for madd in $MALL ; do present=0 for m in $MACHINES ; do echo $madd | grep $m > /dev/null 2>&1 RETVAL=$? test $RETVAL = 0 && present=1 continue done test $present = 0 && MACHINES="$MACHINES $madd" done #MACHINES="baudelaire" for mname in $MACHINES ; do echo " $mname" dir_list=`grep $mname $TMP.dir_all` echo -n "" > $TMP.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 # EXTRA = non-standard list of experiment ADJOINT=0 TANGLIN=0 OPENAD=0 TAPENAD=0 RESTART=0 Special=0 EXTRA= FAST=0 DVLP=0 MPI=0 MTH=0 UR4=0 if test -r $dir/summary.txt ; then TAPENAD=`grep -c ' generated by Tapenade' $dir/summary.txt` ADJOINT=`grep -c -i '^ADJOINT' $dir/summary.txt` TANGLIN=`grep -c -i '^TANGLIN' $dir/summary.txt` if test "x$ADJOINT" = x1 ; then OPENAD=`grep -c '^Adjoint .* OpenAD' $dir/summary.txt` fi RESTART=`grep -c 'test 2+2=4 summary' $dir/summary.txt` #- special label for "darwin" tests Special=`echo $i | grep -c '\-darwin[0-9]'` if test $Special != 0 ; then Special=`echo $i | sed -e "s/.*$mname/$mname/" -e "s/_/ /g" -e "s/-/ /g"` Special=`echo $Special | awk '{print $2}' | sed 's/darwin//'` fi comm=`grep '^run: .*testreport.* ' $dir/summary.txt` EXTRA=`echo "$comm" | grep " -*-tdir\>" | sed -e "s/^.* -*-tdir\>//" -e "s/ -.*$//"` if test "x$EXTRA" = x ; then EXTRA=`echo "$comm" | grep " -*-t\>" | sed -e "s/^.*-*-t\>//" -e "s/ -.*$//"` fi if test "x$EXTRA" = x ; then EXTRA=0 ; else #echo -n "EXTRA=$EXTRA" nn0=`echo $EXTRA | sed "s/ *' *//g" | wc -w` nn1=`echo $EXTRA | sed "s/ *' *//g" | tr ' ' '\n' | grep -c "\"` if test "x$FAST" = x0 ; then FAST=`echo "$comm" | grep -c " '*-noieee'*"` fi DVLP=`echo "$comm" | grep -c " -*-devel\>"` MPI=`echo "$comm" | grep -c " -*-mpi\>"` if test "x$MPI" = x0 ; then MPI=`echo "$comm" | grep -c " -*-MPI\>"` fi MTH=`echo "$comm" | grep -c " -*-mth\>"` UR4=`echo "$comm" | grep -c " -*-use_r4\>"` if test "x$UR4" = x0 ; then UR4=`echo "$comm" | grep -c " -*-ur4\>"` fi else EXTRA=0 ; fi if test "x$ADJOINT" = x1 ; then kind="adjoint-taf" ; order=0 if test "x$TAPENAD" = x1 ; then kind="adjoint-Tap" ; order=2 elif test "x$OPENAD" = x1 ; then kind="adjoint-oad" ; order=4 fi elif test "x$TANGLIN" = x1 ; then kind="tanglin-taf" ; order=1 if test "x$TAPENAD" = x1 ; then kind="tanglin-Tap" ; order=3 fi elif test "x$RESTART" = x0 ; then kind="forward" ; order=6 else kind="restart" ; order=7 fi if test "x$UR4" = x1 ; then OPTFILE="${OPTFILE}.use_r4" fi if test "x$MPI" = x1 ; then yy=`echo $OPTFILE | grep -c '+mpi'` if test $yy = 0 ; then yy=`echo $OPTFILE | grep -c '+impi'` ; fi if test $yy = 0 ; then OPTFILE="${OPTFILE}+mpi" else order=`expr $order + 200` ; fi fi if test "x$MTH" = x1 ; then yy=`echo $OPTFILE | grep -c '+mth$'` if test $yy = 0 ; then OPTFILE="${OPTFILE}+mth" ; fi fi if test "x$FAST" = x1 ; then OPTFILE="${OPTFILE}.fast" fi if test "x$DVLP" = x1 ; then OPTFILE="${OPTFILE}.dvlp" fi if [ $Special -eq 0 ] ; then order=`expr $order + 10 \* $EXTRA` else order=`expr $order + 10 \* $Special` fi order=`printf '%3.3i' $order` 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'` t_pass=`grep '^Y Y Y Y' ./all_tests | grep 'pass ' | wc -l | sed -e 's| ||g'` fi rm -f ./all_tests # 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,2)=="20")'` rm -f ./ms_tmp echo "$OPTFILE$order $DAY $OPTFILE $kind $i $t_pass:$t_tot" >> $TMP.mlist done # helpful for debugging # cat $TMP.mlist # Do we have any data? If so, create the latest pointer. num=`wc -l $TMP.mlist | awk '{print $1}'` if test $num -gt 0 ; then # swap colors ctmp=$color color=$ncolor ncolor=$ctmp keys=`cat $TMP.mlist | cut -d " " -f 1 | sort | uniq` for key in $keys ; do tline=`grep "^$key " $TMP.mlist | 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" #-- machine name to print: sname=`echo $mname | sed 's/-$//'` alt=`echo $key | sed "s/$optf//"` #if [ $alt -ge 30 ] ; then sname="${sname}.darwin" #elif [ $alt -ge 20 ] ; then sname="${sname}.monod" ; fi cat <>$OUTFILE EOF done fi done cat >> $OUTFILE << EOF
Nickname OPTFILE Name Type Date Summary Ratio
$sname $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: MITgcm_contrib/test_scripts.

EOF rm -f $TMP.dir_all $TMP.mlist #- put the file in place chgrp gcmpack $OUTFILE chmod 664 $OUTFILE LATEST=$OUTDIR"/latest_"$PERIOD".html" mv -f $OUTFILE $LATEST if test "x$PERIOD" = "x$CURR_PER" ; then cp $LATEST ./testing.xml ( cd $OUTDIR rm -f latest.html ln -s $LATEST latest.html ) fi