From 27a4e0509515cd37cb653f292b646f37f55aabb9 Mon Sep 17 00:00:00 2001 From: Andrea Bignamini <bignamini@oats.inaf.it> Date: Wed, 24 May 2017 11:56:05 +0200 Subject: [PATCH] Add checkfits script template The checkfits.sh script based on LBT is added as template script. --- script/checkfits.sh | 278 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100755 script/checkfits.sh diff --git a/script/checkfits.sh b/script/checkfits.sh new file mode 100755 index 0000000..2fbcb5a --- /dev/null +++ b/script/checkfits.sh @@ -0,0 +1,278 @@ +#!/bin/bash + +#: Title : checkfits.sh +#: Date : 2014/10/28 +#: Author : "Marco De Marco" <demarco@oats.inaf.it> +#: Version : 1.0 +#: Description : Fits verification and proccessing script + +#Tools paths +VERIFY_TOOL="/usr/local/bin/fitsverify" +LISTHEAD_TOOL="/usr/local/bin/listhead" +MODHEAD_TOOL="/usr/local/bin/modhead" + +if [ "$1" == "CHECK" ]; then + + #: Section : CHECK + #: Parameter : none + #: Response : CHECK OK + #: : CHECK FATAL + #: Description : Check availability of script tools + + #Check fitsverify tools + CHECK_STRING="conform to the FITS format" + + res=$($VERIFY_TOOL 2>&1) + + check=$(echo $res | grep "$CHECK_STRING" | wc | awk '{print $1}') + if [ "$check" -lt "1" ]; then + echo "CHECK FATAL" + exit 0 + fi + + #Check listhead tools + CHECK_STRING="Usage: listhead filename" + + res=$($LISTHEAD_TOOL 2>&1) + + check=$(echo $res | grep "$CHECK_STRING" | wc | awk '{print $1}') + if [ "$check" -lt "1" ]; then + echo "CHECK FATAL" + exit 0 + fi + + #Check modhead tools + CHECK_STRING="Usage: modhead filename" + + res=$($MODHEAD_TOOL 2>&1) + + check=$(echo $res | grep "$CHECK_STRING" | wc | awk '{print $1}') + if [ "$check" -lt "1" ]; then + echo "CHECK FATAL" + exit 0 + fi + + echo "CHECK OK" + exit 0 + +elif [ "$1" == "VALID" ]; then + + #: Section : VALID + #: Parameter : file path + #: Response : VALID OK + #: : VALID IGNORE + #: Description : Check file name compliance + + file=$2 + file_name=${file##*/} + + #Check regex for tec files -> ignore + if [[ "${file_name,,}" =~ ^.*lbc.?tec.*\.(fits|fit|fts).*$ ]]; then + echo "VALID IGNORE: discard tec file" + exit 0 + fi + + #Check regex for rsync temporary file -> ignore + if [[ ! "${file_name,,}" =~ ^[^\.].*\.(fits|fit|fts).*$ ]]; then + echo "VALID IGNORE: invalid regular expression" + exit 0 + fi + + echo "VALID OK" + exit 0 + +elif [ "$1" == "VERIFY" ]; then + + #: Section : VERIFY + #: Parameter : file path + #: Response : VERIFY OK + #: : VERIFY WAIT + #: : VERIFY FATAL + #: Description : Check file compliance to fits format + + file=$2 + + FATAL_ERROR="Fatal" + EOF_ERROR="End-of-file" + + #Change file and permission before processing + /usr/bin/sudo -n /bin/chmod go+r $file + + #if fits verify tools exists -> fatal + if [ ! -x $VERIFY_TOOL ]; then + echo "VERIFY FATAL : verify tools not exists" + exit 0 + fi + + #if fits file not exists -> fatal + if [ ! -f $file ]; then + echo "VERIFY FATAL : file not exists" + exit 0 + fi + + #Check with fits verify + res=$($VERIFY_TOOL $file 2>&1) + + #if fitsverify return fatal error -> wait + fatal=$(echo $res | grep "$FATAL_ERROR" | wc | awk '{print $1}') + if [ "$fatal" -ge "1" ]; then + echo "VERIFY FATAL" + exit 0 + fi + + #if fitsverify return end of file -> wait + eof=$(echo $res | grep "$EOF_ERROR" | wc | awk '{print $1}') + if [ "$eof" -ge "1" ]; then + echo "VERIFY WAIT" + exit 0 + fi + + #else -> ok + echo "VERIFY OK" + exit 0 + +elif [ "$1" == "PREPROCESS" ]; then + + #: Section : PREPROCESS + #: Parameter : file path + #: : ingestion result [OK, WAIT, FATAL] + #: Response : PREPROCESS OK + #: : PREPROCESS FATAL + #: Description : Apply preprocessing before ingestion + + file=$2 + file_name=${file##*/} + + verified=$3 + + #Check verified parameter value + if [ "$verified" != "OK" -a "$verified" != "WAIT" -a "$verified" != "FATAL" ]; then + echo "PREPROCESS FATAL" + exit 0 + fi + + #Pre processing for verified OK files + if [ "$verified" == "OK" ]; then + + #Change file ownership + /usr/bin/sudo -n /bin/chown controls:controls $file + #Change file and permission before processing + /usr/bin/sudo -n /bin/chmod u+rw $file + + #Check regular expression for luci files + if [[ "${file_name,,}" =~ ^.*luci.*\.(fits|fit|fts).*$ ]]; then + + #if listhead tools exists -> fatal + if [ ! -x $LISTHEAD_TOOL ]; then + echo "PREPROCESS FATAL : listhead tools not exists" + exit 0 + fi + + #if modhead tools exists -> fatal + if [ ! -x $MODHEAD_TOOL ]; then + echo "PREPROCESS FATAL : listhead tools not exists" + exit 0 + fi + + #if fits file not exists -> fatal + if [ ! -f $file ]; then + echo "PREPROCESS FATAL : file not exists" + exit 0 + fi + + #Change GRATWLEN key from 'not used' to 0.0 + gratwlen=`$LISTHEAD_TOOL $file 2>&1 | grep -i GRATWLEN` + if [[ $gratwlen =~ "'not used'/" ]]; then + $MODHEAD_TOOL $file GRATWLEN 0.0 &>/dev/null + fi + + #Change GRATORDE key from 'not used' to 0.0 + gratorde=`$LISTHEAD_TOOL $file 2>&1 | grep -i GRATORDE` + if [[ $gratorde =~ "'not used'/" ]]; then + $MODHEAD_TOOL $file GRATORDE 0.0 &>/dev/null + fi + fi #luci files + + #Check regular expression for irt files + if [[ "${file_name,,}" =~ ^.*irt.*\.(fits|fit|fts).*$ ]]; then + + #if listhead tools exists -> fatal + if [ ! -x $LISTHEAD_TOOL ]; then + echo "PREPROCESS FATAL : listhead tools not exists" + exit 0 + fi + + #if modhead tools exists -> fatal + if [ ! -x $MODHEAD_TOOL ]; then + echo "PREPROCESS FATAL : listhead tools not exists" + exit 0 + fi + + #if fits file not exists -> fatal + if [ ! -f $file ]; then + echo "PREPROCESS FATAL : file not exists" + exit 0 + fi + + #Search for DATE_OBS keyword + res=`$LISTHEAD_TOOL $file 2>&1 | grep DATE_OBS | wc | awk '{print $1}'` + if [ $res -eq 0 ]; then + + date=`$LISTHEAD_TOOL $file 2>&1 | grep DATE-OBS` + time=`$LISTHEAD_TOOL $file 2>&1 | grep TIME-OBS` + + if [ ! -z "$date" -a ! -z "$time" ]; then + date_obs=${date:11:10}T${time:11:12} + $MODHEAD_TOOL $file DATE_OBS "'$date_obs'" &>/dev/null + fi + fi + fi #irt files + + fi #verified ok files + + echo "PREPROCESS OK" + exit 0 + +elif [ "$1" == "POSTPROCESS" ]; then + + #: Section : POSTPROCESS + #: Parameter : file path + #: : ingestion result [OK, WAIT, FATAL] + #: Response : POSTPROCESS OK + #: : POSTPROCESS FATAL + #: Description : Apply postprocessing after ingestion + + file=$2 + file_name=${file##*/} + + verified=$3 + + #Check verified parameter value + if [ "$verified" != "OK" -a "$verified" != "WAIT" -a "$verified" != "FATAL" ]; then + echo "POSTPROCESS FATAL" + exit 0 + fi + + #Post process verified WAIT files + if [ "$verified" == "WAIT" ]; then + echo "Warning file: $file_name" | mutt -s "Pre process log" -- demarco@oats.inaf.it + fi + + #Post process verified FATAL files + if [ "$verified" == "FATAL" ]; then + echo "Fatal file: $file_name" | mutt -s "Pre process log" -- demarco@oats.inaf.it + fi + + echo "POSTPROCESS OK" + exit 0 + +else + + #: Section : DEFAULT + #: Parameter : none + #: Response : UNKNOWN + + echo "UNKNOWN" + exit 0 + +fi -- GitLab