#!/bin/sh
#
# Script to show the status of Heartbeat links
# GPL
#
# Written by Markus Guertler (Novell)
#

CL_STATUS="/usr/bin/cl_status"

usage()
{
	echo "$0 [-s] [-v]"
	echo "   Shows overall or detailed link status information for a"
	echo "   Heartbeat 2 cluster"
	echo ""
	echo "   -s    shows overall link status"
	echo "   -d    shows detailed status for each node and link"
        exit 0;
}

debug="/dev/null"

while [ $# -gt 0 ]; do
        case "$1" in
                -s )  # overall status mode
			overallmode="true"
                        ;;
                -d )  # detail mode
			detailmode="true"
			debug="/dev/stdout"
                        ;;
                * )
			usage
			;;
        esac
        shift;
done

if [ -z "$detailmode" -a -z "$overallmode" ]
	then
	  usage
	fi

mynode=$(uname -n)

echo "Showing link status from $mynode to all other nodes:" >$debug
echo "" >$debug

# List nodes
for node in $($CL_STATUS listnodes -n)
	do
	
	# Skip mynode
	if [ x"$node" = x"$mynode" ] 
		then
			continue
		fi

	echo "From $mynode to $node: " >$debug

	# List links with status
	for link in $($CL_STATUS listhblinks $node | sort)
		do
			echo -n " |-> Link $link: " >$debug
			status=$($CL_STATUS hblinkstatus $node $link) 
			echo $status >$debug

			if [ x"$status" != x"up" ]
				then
					failuredevices="${failuredevices}${link} "
				fi
		done
	done

echo "" >$debug

if [ -n "$overallmode" ]
	then
	  if [ -n "$failuredevices" ]
		then
	  	  echo "LINK FAILURE(S) DETECTED: $failuredevices"
		else
		  echo "ALL HEARTBEAT LINKS UP"
		fi
	fi
