#!/bin/sh

##########################################
#                                        #
# Hitachi Fibre Channel Adapter RAS Tool #
#                                        #
##########################################
TOOLNAME=hfcrasinfo
HFCLDDNUM=256                               # HBATOOL-536
VER="$Id: hfcrasinfo,v 1.1.2.2.2.6.14.2.2.1.4.1 2014/01/12 08:13:06 tiba Exp $"

if [ `whoami` != "root" ]; then
  echo "root?"
  exit 1
fi

BIOSMODE=0
CURDIR=`pwd`
DIRNAME=$CURDIR
FORCE=0
HOSTNAME=`hostname`

while [ $# -gt 0 ]
do
	case $1 in
		-f) FORCE=1
			shift
			;;
		-b) BIOSMODE=1
			shift
			;;
		-d) DIRNAME=$2
			shift
			shift
			;;
		-H) HOSTNAME=$2
			shift
			shift
			;;
		*)  echo "Usage : $TOOLNAME [-f] [-b] [-d <directory>] [-H <hostname>]"
			echo "        -f : ommit (y/n) confirm."
			echo "        -b : BIOS data access."
			echo "        -d : specify log directory."
			echo "        -H : hostname."
			exit 1
			;;
	esac
done

DATETIME=`date +%Y%m%d%H%M%S`
PREDIR=$DIRNAME
DIRNAME=$DIRNAME/$TOOLNAME-$HOSTNAME-$DATETIME
FILENAME="$TOOLNAME.txt"
BIOSFILE="hfcbios.txt"
FULLNAME=$DIRNAME/$FILENAME

if test -d $DIRNAME ; then
  echo "cannot create directory '$DIRNAME' : Directory exists"
  exit 1
fi

if test -f $DIRNAME ; then
  echo "cannot create directory '$DIRNAME' : File exists"
  exit 1
fi

# total size
for msg_file in `ls /var/log/message*`
do
	size=`wc -c $msg_file | awk '{print $1}'`
	total_size=`expr $total_size + $size`
done

total_size=`expr $total_size / 1000000`
total_size=`expr $total_size + 200`
echo "need disk space : $total_size Mbyte" 

echo "directory : $DIRNAME"

if [ $FORCE -eq 0 ] ; then
	echo -n "OK? (y/n) > "
	read ANSWER
	if [ $ANSWER != "y" ]; then
		echo "cancel."
		exit 0	
	fi
fi

mkdir $DIRNAME

echo "$TOOLNAME $VER" > $FULLNAME
echo "" >> $FULLNAME
echo "====================" >> $FULLNAME
echo "=====   date   =====" >> $FULLNAME
echo "====================" >> $FULLNAME
date >> $FULLNAME

echo "" >> $FULLNAME
echo "=======================================" >> $FULLNAME
echo "=====   cat /proc/scsi/hfcldd/*   =====" >> $FULLNAME
echo "=======================================" >> $FULLNAME
cat /proc/scsi/hfcldd/* >> $FULLNAME 2>> $FULLNAME

echo "====================" >> $FULLNAME
echo "===== file copy ====" >> $FULLNAME
echo "====================" >> $FULLNAME
# file copy HBATOOL-627
cp /etc/hfcldd.conf    $DIRNAME/ 2>> /dev/null
cp /etc/modules.conf   $DIRNAME/ 2>> /dev/null
cp /etc/modprobe.conf  $DIRNAME/ 2>> /dev/null
cp /etc/fstab          $DIRNAME/
cp /var/log/messages   $DIRNAME/
cp /var/log/messages* $DIRNAME/ 2>> /dev/null
cp /tmp/hfcldd_install.log $DIRNAME/ 2>> /dev/null
cp /lib/modules/`uname -r`/kernel/drivers/scsi/hfcldd_conf.o  $DIRNAME/ 2>> /dev/null
cp /lib/modules/`uname -r`/kernel/drivers/scsi/hfcldd.o       $DIRNAME/ 2>> /dev/null

# ko file copy HBATOOL-627
for ko_file in `cat /lib/modules/\`uname -r\`/modules.dep | grep hfcldd | cut -d ":" -f 1`
do
	cp $ko_file $DIRNAME/ 2>> /dev/null
	cp /lib/modules/2.6.32-131.0.15.el6.`uname -m`/$ko_file $DIRNAME/ 2>> /dev/null
done

if [ `uname -i` == "ia64" ]; then
  cp /boot/efi/efi/redhat/elilo.conf $DIRNAME/
else
	cp /boot/grub/grub.conf  $DIRNAME/ 2>> /dev/null           # HBATOOL-681
	cp /boot/efi/EFI/redhat/grub.conf  $DIRNAME/ 2>> /dev/null # HBATOOL-681
	cp /boot/efi/efi/SuSE/elilo.conf  $DIRNAME/ 2>> /dev/null  # HBATOOL-681
fi

mkdir $DIRNAME/hba
cp /opt/hitachi/drivers/hba/*.txt $DIRNAME/hba/ 2>> /dev/null
cp /opt/hitachi/drivers/hba/*.log $DIRNAME/hba/ 2>> /dev/null
cp /opt/hitachi/drivers/hba/hfcldd_lumap.* $DIRNAME/hba/ 2>> /dev/null

echo "=======================" >> $FULLNAME
echo "===== history file ====" >> $FULLNAME
echo "=======================" >> $FULLNAME
# history file copy
echo "##### root #####"  >> $DIRNAME/history.txt 2>> /dev/null
cat /root/.bash_history >> $DIRNAME/history.txt 2>> /dev/null
for home_dir in `ls /home/`
do
	echo "##### $home_dir #####"       >> $DIRNAME/history.txt 2>> /dev/null
	cat /home/$home_dir/.bash_history >> $DIRNAME/history.txt 2>> /dev/null
done

# "============================"
# "=====   dddump hfcldd* ====="
# "============================"
CNT=0
while [ $CNT -lt $HFCLDDNUM ]
do
  HFCLDDPATH=`find /dev/ -name hfcldd$CNT`
  if [ ! -z $HFCLDDPATH ]; then
    /opt/hitachi/drivers/hba/dddump hfcldd$CNT $DIRNAME/dddump_hfcldd$CNT.txt > /dev/null
  fi

  CNT=`expr $CNT + 1`
done

echo "" >> $FULLNAME
echo "====================================" >> $FULLNAME
echo "=====   cat /proc/partitions   =====" >> $FULLNAME
echo "====================================" >> $FULLNAME
cat /proc/partitions >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "===============================" >> $FULLNAME
echo "=====   cat /proc/cpuinfo =====" >> $FULLNAME
echo "===============================" >> $FULLNAME
cat /proc/cpuinfo >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "===============================" >> $FULLNAME
echo "=====   cat /proc/devices =====" >> $FULLNAME
echo "===============================" >> $FULLNAME
cat /proc/devices >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "==================================" >> $FULLNAME
echo "=====   cat /proc/interrupts =====" >> $FULLNAME
echo "==================================" >> $FULLNAME
cat /proc/interrupts >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "===============================" >> $FULLNAME
echo "=====   cat /proc/meminfo =====" >> $FULLNAME
echo "===============================" >> $FULLNAME
cat /proc/meminfo >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "=======================" >> $FULLNAME
echo "===== /sbin/lspci =====" >> $FULLNAME
echo "=======================" >> $FULLNAME
/sbin/lspci >> $FULLNAME 2>> $FULLNAME


echo "" >> $FULLNAME
echo "==================" >> $FULLNAME
echo "=====   df   =====" >> $FULLNAME
echo "==================" >> $FULLNAME
df >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "========================" >> $FULLNAME
echo "=====   uname -a   =====" >> $FULLNAME
echo "========================" >> $FULLNAME
uname -a >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "===========================" >> $FULLNAME
echo "=====   ls -al /etc   =====" >> $FULLNAME
echo "===========================" >> $FULLNAME
ls -al /etc >> $FULLNAME 2>> $FULLNAME

if [ `uname -i` == "ia64" ]; then
echo "" >> $FULLNAME
echo "===========================================" >> $FULLNAME
echo "=====   ls -al /boot/efi/efi/redhat   =====" >> $FULLNAME
echo "===========================================" >> $FULLNAME
 ls -al /boot/efi/efi/redhat >> $FULLNAME 2>> $FULLNAME
else
echo "" >> $FULLNAME
echo "============================" >> $FULLNAME
echo "=====   ls -al /boot   =====" >> $FULLNAME
echo "============================" >> $FULLNAME
 ls -al /boot >> $FULLNAME 2>> $FULLNAME
fi

echo "" >> $FULLNAME
echo "=====================" >> $FULLNAME
echo "=====   lsmod   =====" >> $FULLNAME
echo "=====================" >> $FULLNAME
/sbin/lsmod >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "================================" >> $FULLNAME
echo "=====   chkconfig --list   =====" >> $FULLNAME
echo "================================" >> $FULLNAME
/sbin/chkconfig --list >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "=======================" >> $FULLNAME
echo "=====   rpm -qa   =====" >> $FULLNAME
echo "=======================" >> $FULLNAME
rpm -qa | grep hfc   >> $FULLNAME 2>> $FULLNAME
rpm -qa | grep kudzu >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "=========================" >> $FULLNAME
echo "=====   find /lib   =====" >> $FULLNAME
echo "=========================" >> $FULLNAME
find /lib -name hfcldd.* -print >> $FULLNAME 2>> $FULLNAME
find /lib -name hfcldd_* -print >> $FULLNAME 2>> $FULLNAME

echo "" >> $FULLNAME
echo "=====================================" >> $FULLNAME
echo "===== /sbin/hraspr > hraspr.txt =====" >> $FULLNAME
echo "=====================================" >> $FULLNAME
/sbin/hraspr >> $DIRNAME/hraspr.txt 2>> $DIRNAME/hraspr.txt

echo "" >> $FULLNAME
echo "================================" >> $FULLNAME
echo "===== libhfchbaapi VERSION =====" >> $FULLNAME
echo "================================" >> $FULLNAME
strings /opt/hitachi/drivers/hba/libhfchbaapi.so | grep "libhfchbaapi.so VER" >> $FULLNAME 2>> $FULLNAME

if [ -f /opt/hitachi/drivers/hba/hfcmgr ]; then
	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmgr -v      =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -v >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmgr -hp     =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -hp >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "===========================" >> $FULLNAME
	echo "=====   hfcmgr -hp -l =====" >> $FULLNAME
	echo "===========================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -hp -l >> $FULLNAME 2>> $FULLNAME
	
	echo "" >> $FULLNAME
	echo "===========================" >> $FULLNAME
	echo "=====   hfcmgr -hp -t =====" >> $FULLNAME
	echo "===========================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -hp -t >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "===========================" >> $FULLNAME
	echo "=====   hfcmgr -hp -d =====" >> $FULLNAME
	echo "===========================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -hp -d >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "========================" >> $FULLNAME
	echo "=====   hfcmgr -c  =====" >> $FULLNAME
	echo "========================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -c >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "========================" >> $FULLNAME
	echo "=====   hfcmgr -is  =====" >> $FULLNAME
	echo "========================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -is >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "==================================" >> $FULLNAME
	echo "=====   hfcmgr -is -p all    =====" >> $FULLNAME
	echo "==================================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmgr -is -p all >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "===================================" >> $FULLNAME
	echo "=====   hfcmgr -is -p hfcldd* =====" >> $FULLNAME
	echo "===================================" >> $FULLNAME
	CNT=0
	while [ $CNT -lt $HFCLDDNUM ]
	do
		HFCLDDPATH=`find /dev/ -name hfcldd$CNT`
		if [ ! -z $HFCLDDPATH ]; then
			echo "" >> $FULLNAME
			/opt/hitachi/drivers/hba/hfcmgr -is -p hfcldd$CNT >> $FULLNAME 2>> $FULLNAME
		fi
		CNT=`expr $CNT + 1`
	done
else
	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmputil -a   =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmputil -a >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmputil -c   =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmputil -c >> $FULLNAME 2>> $FULLNAME
	
	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmputil -e   =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmputil -e >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmputil -f   =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmputil -f >> $FULLNAME 2>> $FULLNAME

	echo "" >> $FULLNAME
	echo "============================" >> $FULLNAME
	echo "=====   hfcmputil -w   =====" >> $FULLNAME
	echo "============================" >> $FULLNAME
	/opt/hitachi/drivers/hba/hfcmputil -w >> $FULLNAME 2>> $FULLNAME
fi

if [ $BIOSMODE -ne 0 ]; then

  # BIOS data
  echo "" > $DIRNAME/$BIOSFILE
  echo "==================================" >> $DIRNAME/$BIOSFILE
  echo "=====   hfcbios -o devshow   =====" >> $DIRNAME/$BIOSFILE
  echo "==================================" >> $DIRNAME/$BIOSFILE
  /opt/hitachi/drivers/hba/hfcbios -o devshow >> $DIRNAME/$BIOSFILE 2>> $DIRNAME/$BIOSFILE
  
  echo "" >> $DIRNAME/$BIOSFILE
  echo "==================================================" >> $DIRNAME/$BIOSFILE
  echo "=====   hfcbios -d /dev/hfcldd* -o cfgshow   =====" >> $DIRNAME/$BIOSFILE
  echo "==================================================" >> $DIRNAME/$BIOSFILE
  CNT=0
  while [ $CNT -lt $HFCLDDNUM ]
  do
    HFCLDDPATH=`find /dev/ -name hfcldd$CNT`
    if [ ! -z $HFCLDDPATH ]; then
      /opt/hitachi/drivers/hba/hfcbios -d $HFCLDDPATH -o cfgshow >> $DIRNAME/$BIOSFILE 2>> $DIRNAME/$BIOSFILE
    fi

    CNT=`expr $CNT + 1`
  done
fi

cd $PREDIR 
tar zcf $TOOLNAME-$HOSTNAME-$DATETIME.tar.gz $TOOLNAME-$HOSTNAME-$DATETIME 2> /dev/null
rm -rf $DIRNAME
cd $CURDIR
echo "$TOOLNAME create file : $DIRNAME.tar.gz"
