#!/usr/bin/ksh # # gbo_asi_rt_mirror.ksh - Using rsync, mirror image thumbnails and # and other products collected from the GBOs by UCalgary. # # Creation Date: # # 11 march 2006 TimQuinn # # ## Set the environment variables # . $HOME/software_dev/config/gbo_asi_rt_mirror.config . $HOME/software_dev/config/soc_it_to_me.config ## Function Definitions # ## Take input arguments and build mirror directories # year=$1 month=$2 day=$3 if [[ -z $year && -z $month && -z $day ]] then args_dir_path="" elif [[ -z $month && -z $day ]] then args_dir_path=${year}/ elif [[ -z $day ]] then args_dir_path=${year}/${month}/ else args_dir_path=${year}/${month}/${day} fi mirror_start_dir="$UCB_MIRROR_HOME/${args_dir_path}" mkdir -p $mirror_start_dir cd $mirror_start_dir echo "$$:" >> $LOGFILE echo "$$:----------- Starting gbo_asi_rt_mirror at $(date) ---------" >> $LOGFILE ## Check for lock file # if [[ -a $LOCKFILE ]] ; then echo "$$:" >> $LOGFILE echo "$$: A Mirror Process is currently active " >> $LOGFILE echo "$$: Quittin..................." >> $LOGFILE exit 0 fi echo $$ > $LOCKFILE ## Run rsync # #for stream in stream0 stream1 stream2 stream3 for stream in stream1 stream2 stream3 do echo "$$:" >> $LOGFILE echo "$$:Running rsync on server ${REMOTE_SERVER_NAME}" >> $LOGFILE echo "$$:Directory path = ${stream}/${args_dir_path}" >> $LOGFILE start_time=$(date -u '+%Y-%m-%d %T') RSYNC_LOGFILE=${RSLOGFILE}_${stream}_$$ ####/usr/local/bin/rsync $RSYNC_OPTIONS ${REMOTE_SERVER_NAME}/${stream}/${args_dir_path} . >> $RSYNC_LOGFILE /usr/local/bin/rsync $RSYNC_OPTIONS --rsh="ssh -i $HOME/.ssh/rsync_ucalgary_id_dsa -l soc" ${REMOTE_SERVER_NAME}/${stream}/${args_dir_path} . >> $RSYNC_LOGFILE rsync_status=$? end_time=$(date -u '+%Y-%m-%d %T') echo "$$:RSYNC Complete. Start=$start_time End=$end_time" >> $LOGFILE ## Check rsync results by seeing if any files were ## recovered or updated # egrep '(>f)' $RSYNC_LOGFILE > /tmp/GBO_RT_CHECK$$ if [[ -s /tmp/GBO_RT_CHECK$$ ]] then while read line do processCode=$(echo $line |awk -F\| '{print substr($1,3,8)}') path=$(echo $line |awk -F\| '{print $2}') processTime=$(echo $line |awk -F\| '{print $3}' | sed 's/\//-/g') fileSize=$(echo $line |awk -F\| '{print $4}'| sed 's/"//g') fileName=${path##*/} gboname=$(echo $fileName |awk -F_ '{print $3}' | sed 's/[a-z]*/\U&/g') imageYMD=$(echo $fileName | awk -F_ '{print substr($1,1,4)"-"substr($1,5,2)"-"substr($1,7,2)}') imageHH=$(echo $fileName | awk -F_ '{print $2}') if [[ -z $imageHH ]] then imageHH="00" fi imageHHMMSS=${imageHH}:00:00 dataTime="$imageYMD $imageHHMMSS" # ## If gzip file perform gunzip test # isgzip=$(echo $path |grep .gz) if [[ -n $isgzip ]] then gunziptest=$(gunzip -t ${mirror_start_dir}${path} 2>&1) if [[ -n $gunziptest ]] then # Failed test echo "$$:" >> $LOGFILE echo "$$:WARNING: File failed gunzip test" >> $LOGFILE echo "$$:WARNING: ${mirror_start_dir}${path}" >> $LOGFILE printf "%s\n" "script: $0" \ "WARNING: File failed gunzip test: ${mirror_start_dir}${path}" | mailx -s "THEMIS UCalgary Realtime ASI gunzip Failure" $SOC_EMAIL mysql_table_name=GBO_${gboname}_RT_BAD mv ${mirror_start_dir}${path} $UCB_MIRROR_HOME/bad_files else # Passed test mysql_table_name=GBO_${gboname}_RT fi fi echo "$$: Updating MySQL database table $mysql_table_name......." >> $LOGFILE echo "$$: gbo_asi_rt_mirror_tbl_input_files.php $mysql_table_name $dataTime $fileName \ $processTime $processCode $fileSize" >> $LOGFILE /home/thmsoc/software_dev/php/gbo_asi_rt_mirror_tbl_input_files.php $mysql_table_name \ $dataTime $fileName $processTime $processCode $fileSize echo "$$: ...........update complete. " >> $LOGFILE done < /tmp/GBO_RT_CHECK$$ rm /tmp/GBO_RT_CHECK$$ fi ## Process rsync statistics into database # statsTest=$(grep "Number of files transferred" $RSYNC_LOGFILE) if [[ -n $statsTest ]] then num_files=$(grep "Number of files transferred" $RSYNC_LOGFILE | awk '{print $5}') tot_size=$(grep "Total file size" $RSYNC_LOGFILE | awk '{print $4}') xfer_rate=$(grep "bytes/sec" $RSYNC_LOGFILE | awk '{print $7}') fullpath=${stream}/${args_dir_path} /home/thmsoc/software_dev/php/gbo_asi_rt_mirror_tbl_input_stats.php $fullpath $start_time $end_time $num_files $tot_size $xfer_rate fi if (( $rsync_status != 0 )) then echo "$$:" >> $LOGFILE echo "$$:WARNING: rsync did not finish properly" >> $LOGFILE echo "$$:WARNING: rsync code = $rsync_status" >> $LOGFILE printf "%s\n" "script: $0" \ "WARNING: $stream error - rsync code = $rsync_status. Check $LOGFILE" | mailx -s "THEMIS RSYNC Failure - UCalgary Realtime ASI" $SOC_EMAIL fi done echo "$$:" >> $LOGFILE echo "$$:----------- Ending gbo_asi_rt_mirror at $(date) ---------" >> $LOGFILE rm $LOCKFILE exit 0