#!/bin/bash
#
# cs_list_sap_instances
#
# (c) 2022 SUSE LLC
# Author: L.Pinne.
# GNU General Public License v2. No warranty.
# http://www.gnu.org/licenses/gpl.html
#
# Version: 2022-11-28
#
# TODO HANA systemd, HANA MCOS, ENSA SystemV
# DONE ENSA systemd, HANA SystemV

EXE="$0"


function show_result() {
	echo "####"
	echo "SID: 			$SID"
	echo "instance_nr: 		$NR"
	echo "sidadm:			$ADM"
	echo "systemd_service:	$SVC"
	echo "systemd_unit:		$SUN"
	echo "instance_profile:	$PF"
	echo "ini_dir:		$GLO"
	echo "log_dir:		$LOG"
	echo "trace_dir:		$TRC"
	echo
}


function show_path() {
	# TODO systemd drop-in /etc/systemd/system/SAP<SID>_<nr>.service.d/
	D="/usr/sap/$SID/SYS/global/hdb/custom/config/"
	test -d "$D" && GLO="$D"
	D=""
	if [ -n "$WD" ]; then
		D=$WD
		test -d "$D" && LOG="$D/"
	fi
	D="/usr/sap/$SID/HDB$NR/$VHOST/trace/"
	test -d "$D" && TRC="$D"
}


function guess_values() {
	# TODO check for systemd
	# shellcheck disable=SC2162,SC2086
	SINS=$(sy stemctl list-unit-files SAP*.service |\
		awk '$1~/^SAP..._..\.service$/ {print $1}' |\
		while read; do echo ${REPLY:3:6}; done)
	for S in $SINS; do
		SVC=SAP$S.service
		SUN=/etc/systemd/system/$SVC
		SID=${S:0:3}
		ADM=$(A=$(echo "$SID" | tr "[:upper:]" "[:lower:]"); echo "${A}"adm)
		NR=${S:4}
		PF=$(systemctl show SAP"$S".service |\
			awk '$1~/^ExecStart=/ {print $5}' |\
			awk -F= '{print $2}')
		WD=$(systemctl show SAP"$S".service |\
			awk -F= '$1~/^WorkingDirectory/ {print $2}')
		show_path	
		show_result
	done

	# TODO check for SystemV
	test -z "$PFS" && PFS=$(awk '$1!~/^#/ {print $3}' /usr/sap/sapservices |\
		awk -F= '{print $2}')
	for PF in $PFS; do
		SID=$(echo "$PF" | awk -F/ '{print $4}')
		ADM=$(echo "${SID}"adm | tr "[:upper:]" "[:lower:]")
		# TODO WD
		WD=""

		# HANA DB
		INI=$(find -L /usr/sap/"$SID"/ -name "sapprofile.ini" | tac | head -1)
		test -n "$INI" && NR=$(awk -F= '$1~/^SAPSYSTEM$/ {print $2}' "$INI")
		# TODO VHOST
		VHOST=$(hostname)
		show_path
		show_result
	done
}


# main()
case $1 in
	-h|--help)
		# shellcheck disable=SC2005
		echo "$(basename "$EXE")"
		echo "$(basename "$EXE") [OPTION]"
		echo " --help           show help"
		echo " --version        show version"
		exit
	;;
	-v|-version)
		echo -n "$(basename "$EXE") "
		head -11 "$EXE" | grep "^# Version: "
		exit
	;;
	*)
		guess_values
		exit
	;;
esac
#
