#!/bin/sh #download SCA file, proceed to introspection, and upload results DATE=/bin/date GREP=/bin/grep AWK=/bin/awk ECHO=/bin/echo WC=/usr/bin/wc CAT=/bin/cat PRINTF=/usr/bin/printf MKDIR=/bin/mkdir XARGS=/usr/bin/xargs SORT=/bin/sort RM=/bin/rm defaultIFS=$IFS SED=/bin/sed #set Irods environment . /usr/local/shared/bin/irods_env.sh -noverbose scriptName="`basename $0`" $ECHO "Processing script ${scriptName} at `date`" #which source to analyse sourceRadio=$1 #Path to public backupable path publicpath="/afs/in2p3.fr/home/c/campagne/public" #Path where the job will do temporary IO . ${SCRIPTPATH}/set_iojobpath.sh iojobpath=$(set_iojobpath) cd ${iojobpath} localpath="${sourceRadio}" $MKDIR -p ./${localpath} cd ./${localpath} #Path of the utility scripts scriptpath=${SCRIPTPATH} #JEC 1/10/11 Use generic baodaqstatus name #get the daq current irod status #tag=`${DATE} +%F` #OUT1=${publicpath}/baodaqstatus-${tag}.txt OUT1=${publicpath}/baodaqstatus-current.txt if [ ! -e ${OUT1} -o ! -r ${OUT1} ]; then $ECHO "FATAL (${scriptName}): ${OUT1} has a problem" exit 1 fi #if [ ! -e ${OUT1} ]; then # $ECHO "We should bring the DAQ status more up to date, this take 1 or 2sec..." # ${scriptpath}/statusdaq.sh > ${OUT1} #fi if [ ! "<${sourceRadio}>" = "<>" ]; then $ECHO "You have selected sourceRadio = $sourceRadio" # tableau=( `$GREP -i ${sourceRadio} ${OUT1} | $AWK '( NF==4 ) { print $2 }' ` ) tableau=( `imeta qu -C status "=" hdrNOTDone | $AWK "/$sourceRadio/" | $AWK '{print $2}' ` ) else # tableau=( `$CAT ${OUT1} | $AWK '( NF==4 ) { print $2 }'` ) tableau=( `imeta qu -C status "=" hdrNOTDone | $AWK '{print $2}' | $SED '/^$/d' ` ) fi IFS=' ' tableau=( $( $PRINTF "%s\n" "${tableau[@]}" | $AWK 'x[$0]++ == 0' ) ) workArea="headers" $MKDIR -p ./${workArea} cd ./${workArea} nloop4dbg=0 for i in ${tableau[@]} do #look if the headers have been already extracted $ECHO "DEBUG (${scriptName}): irods root dir $i" for fibdir in Fiber1 Fiber2; do $ECHO "DEBUG (${scriptName}): Fiber $fibdir" status=`imeta ls -C ${i}/${fibdir} status | $AWK '/value/{print $2}'` $ECHO ${status} ##NB: care should be taken to the fact that ILS returns all the instance of the file (HPSS, disk...) ## so one should use a trick to count unique instance # listOfsig=( `ils ${i}/${fibdir} | $GREP -i "signal" | $XARGS -i basename {} | $SORT -k1.7n` ) # IFS=' #' # listOfsig=( $( $PRINTF "%s\n" "${listOfsig[@]}" | $AWK 'x[$0]++ == 0' ) ) # nblinesSIG=${#listOfsig[@]} # listOfhdr=( `ils ${i}/${fibdir} | $GREP -i "header" | $XARGS -i basename {} | $SORT -k1.7n` ) # IFS=' #' # listOfhdr=( $( $PRINTF "%s\n" "${listOfhdr[@]}" | $AWK 'x[$0]++ == 0' ) ) # nblinesHDR=${#listOfhdr[@]} # $ECHO "(DEBUG) (${scriptName}: test if $nblinesHDR != $nblinesSIG " # if [ $nblinesHDR != $nblinesSIG ]; then if [ "<$status>" != "" ]; then ##do the header extraction ##build signal files list ##loop on signal files listOfsig=( `ils ${i}/${fibdir} | $GREP -i "signal" | $XARGS -i basename {} | $SORT -k1.7n` ) IFS=' ' listOfsig=( $( $PRINTF "%s\n" "${listOfsig[@]}" | $AWK 'x[$0]++ == 0' ) ) $ECHO "(DEBUG) (${scriptName}): ${listOfsig[@]}" for sigfname in ${listOfsig[@]} do filename=$(basename $sigfname) extension=${filename##*.} filename=${filename%.*} number=`$ECHO $filename | $AWK '{len=length("signal");len=len+1;a=substr($1,len);print a}'` hdrname="header${number}.txt" #look if header file already exists: if so skip it hdrIsthere=`ils ${i}/${fibdir}/${hdrname} 2>&1 | $GREP -i "^ERROR" | $WC -l` $ECHO "(DEBUG) (${scriptName}): look if ${hdrname} exist (${hdrIsthere})" if [ $hdrIsthere -eq 0 ]; then continue fi #get the signal file $ECHO "DEBUG (${scriptName}): iget $sigfname (dgg = ${nloop4dbg})" OUT3=./igetlog${nloop4dbg}.$$ iget -f -v -K ${i}/${fibdir}/${sigfname} . >${OUT3} 2>&1 igetStatus=`$GREP "^ERROR" ${OUT3}` if [ "<$igetStatus>" != "<>" ]; then $ECHO "INFO (${scriptName}): error while iget:" $ECHO $igetStatus continue fi $RM $OUT3 #extract the header part of the signal file $ECHO "DEBUG (${scriptName}): get header from ${sigfname} and put it in ${hdrname}" IFS=$defaultIFS while read -n80 L do [ "${L::3}" = "END" ] && break $ECHO $L done < ${sigfname} > ${hdrname} $RM ${sigfname} nhdrlines=`$WC -l ${hdrname} | $AWK '{print $1}' ` if [ "${nhdrlines}" = "0" ]; then $ECHO "WARNING (${scriptName}): ${sigfname} has no valid header" else #transfert to irod the header $ECHO "INFO (${scriptName}): transfert ${hdrname} to ${i}/${fibdir}" #use -f option ONLY to force override iput -v -K ${hdrname} ${i}/${fibdir} fi $RM ${hdrname} nloop4dbg=$(expr $nloop4dbg + 1) done imeta mod -C ${i}/${fibdir} status hdrNOTDone v:hdrDone else $ECHO "INFO (${scriptName}): nothing to do for ${i}/${fibdir}" fi done done