#!/bin/ksh -p
# $Id: //depot/stable/explorer/tools/sanextended#3 $
#
# Explorer Version:
EXP_VERSION=4.0
#

# Source tools functions
. ${EXP_LIB}/exp_tools

# Run if specified to do so
script=${0##*/}
which_gate_exit storage extended interactive $script default all

# defaults
SAN_NAME="NOTNOISE"
SAN_TYPE=""
SAN_TIME=300
CLIENT="${EXP_HOME}/bin/capture.`uname -p`"

TTY=`tty`
if [ "${TTY}" = "not a tty" ]
then
    TTY=""
fi

collect_data () {
    logfile "Collecting ${SAN_TYPE} specific data"
    
    case ${SAN_TYPE} in
    ancor)
	if [ -x "${CLIENT}" ]
	then
	    get_cmd "${CLIENT} ${SAN_NAME}" san/${SAN_NAME}/capture
	fi
	# Support for version 4.0 switches
	get_cmd "show support" ${OPT} san/${SAN_NAME}/
	if [ "$?" -ne 0 ]
	then
	    logfile ERROR "${SAN_NAME} is engaged or password for user ${SAN_USER} is incorrect"
	fi
        ;;
    brocade)
	OPT="telnet:brocade:${SAN_NAME}:${SAN_PASS}:${SAN_TIME}:${SAN_USER}"
	get_cmd "supportshow" ${OPT} san/${SAN_NAME}/
	if [ "$?" -ne 0 ]
	then
	    logfile ERROR "${SAN_NAME} is engaged or password for user ${SAN_USER} is incorrect"
	fi
        ;;
    *)
	logfile "Unknown switch type: ${SAN_TYPE}"
        ;;
    esac
}

# Interactive?
RUN=""
which_gate interactive  && RUN=notempty
which_gate sanextended  && RUN=notempty
which_gate extended     && RUN=notempty

if [ -n "${RUN}" ]
then
    logfile "Collecting extended data interactively"

    TEXT=`gettext "\nYou will be prompted for a Switch name.\n    If hostname cannot be resolved, please use IP address.\n\nType return to end the list.\n\n"`
    prompt "${TEXT}"
    prompt ""

    while [ -n "${SAN_NAME}" ]
    do
	SAN_TYPE=""
	SAN_USER=""
	SAN_PASS=""

	TEXT=`gettext "Please enter the name of the Switch: "`
	prompt "${TEXT}\c"
	read SAN_NAME

	if [ -n "${SAN_NAME}" ]
	then
	    # Can we ping it?
	    TEXT=`gettext "Verifying connection to %s"`
	    TEXT=`printf "${TEXT}" "${SAN_NAME}"`
	    logfile "${TEXT}"
	    ping ${SAN_NAME} >/dev/null 2>&1
	    if [ "$?" -ne 0 ]
	    then
		TEXT=`gettext "Unable to connect to %s"`
		TEXT=`printf "${TEXT}" "${SAN_NAME}"`
		logfile ERROR "${TEXT}"
		prompt ""
		continue
	    fi

	    # Get Switch type
	    while [ -z "${SAN_TYPE}" ]
	    do
		TEXT=`gettext "Switch type (brocade or ancor): "`
		prompt "${TEXT}\c"
		read TYPE
		SAN_TYPE=`echo ${TYPE} | tr '[:upper:]' '[:lower:]'`
		case ${SAN_TYPE} in
		    ancor)
			continue
		        ;;
		    brocade)
			# Get admin account
			TEXT=`gettext "Please enter the admin user name for %s: [admin] "`
			TEXT=`printf "${TEXT}" "${SAN_NAME}"`
			prompt "${TEXT}\c"
			read SAN_USER
			# If null, set user to admin
			[ -z "${SAN_USER}" ] && SAN_USER=admin

		        # Get password
			TEXT=`gettext "Please enter the %s password for %s: "`
			TEXT=`printf "${TEXT}" "${SAN_USER}" "${SAN_NAME}"`
			prompt "${TEXT}\c"
			[ -n "${TTY}" ] && stty -echo
			read SAN_PASS
			[ -n "${TTY}" ] && stty echo
			prompt ""
			continue
		        ;;
		    *)
			SAN_TYPE=""
		        ;;
		esac
	    done

	    collect_data
	    prompt ""
	fi
    done
fi

# Collect input file if secure mode selected (-w secure)
which_gate secure && SECURE=notempty
if [ -n "${SECURE}" ]
then
    get_file "${EXP_ETC}/saninput.txt" san/
fi

# Not interactive, get data if input file?
get_cmd "/bin/ls -l ${EXP_ETC}/saninput.txt" san/
if [ -r "${EXP_ETC}/saninput.txt" ]
then
    # Make sure input file is mode 0600
    if `ls -l ${EXP_ETC}/saninput.txt | nawk '{ print $1 }' | egrep -s -e '------$'`
    then
        logfile "Collecting extended data from ${EXP_ETC}/saninput.txt file"

	while read line
	do
	    # Skip comments and blank lines
	    echo $line | sed -e 's/^ *//' -e 's/ *$//' | egrep -s -e '^#' && continue
	    echo $line | egrep -s -e '^$' && continue

	    SAN_NAME=`echo $line | nawk '{ print $1 }'`
	    SAN_TYPE=`echo $line | nawk '{ print $2 }'`
	    SAN_PASS=`echo $line | nawk '{ print $3 }'`
	    SAN_USER=`echo $line | nawk '{ print $4 }'`

	    if [ -d "${EXP_TARGET}/san/${SAN_NAME}" ]
	    then
		logfile "Data for ${SAN_NAME} already collected"
	    else
		# Can we ping it?
		TEXT=`gettext "Verifying connection to %s"`
		TEXT=`printf "${TEXT}" "${SAN_NAME}"`
		logfile "${TEXT}"
		ping ${SAN_NAME} >/dev/null 2>&1
		if [ "$?" -ne 0 ]
		then
		    TEXT=`gettext "Unable to connect to %s"`
		    TEXT=`printf "${TEXT}" "${SAN_NAME}"`
		    logfile ERROR "${TEXT}"
		    prompt ""
		    continue
		fi

		logfile "Collecting extended data for ${SAN_NAME}"
		collect_data
	    fi
	done < ${EXP_ETC}/saninput.txt
    else
        logfile WARNING "${EXP_ETC}/saninput.txt file not correct mode"
    fi
fi
