Commit 27a4e050 authored by Andrea Bignamini's avatar Andrea Bignamini
Browse files

Add checkfits script template

The checkfits.sh script based on LBT is added as template script.
parent 566b0b0f
Loading
Loading
Loading
Loading

script/checkfits.sh

0 → 100755
+278 −0
Original line number Diff line number Diff line
#!/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