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