#!/bin/bash
#
# getstorageconf
#
# Copyright (c) 2010 SUSE Linux GmbH, Germany. All rights reserved.
# GNU Public License.
#
# LP 20100614 22:00
#

DAT=$(date +%Y%m%d-%H%M%S)

ODR=${1:-"/oracle/*/sapdata /oracle/*/log /oracle/*/oraarch"}
DIR=${2:-"/root/getstorageconf.${HOSTNAME}.$DAT"}

CMD=$(basename $0)
ERR=${DIR}/err.txt
export PATH=${PATH}:/usr/symcli/bin


echo "### $CMD ### start $DAT"
logger "### $CMD ### start $DAT"

mkdir -p $DIR || exit
cd $DIR 2>>$ERR || exit

F="/var/log/messages /var/log/boot.* /var/log/sa/sa??"
for f in $F; do
        cp -a $f . 2>>$ERR
done

# TODO: QLogic, host numbers
( D=/sys/class/scsi_host
  for h in 9 10 11 12; do
        for P in lpfc_hba_queue_depth lpfc_lun_queue_depth cmd_per_lun; do
                echo -n "${D}/host${h}/$P "
                cat $D/host${h}/$P
        done
  done
) >>sys@class@scsi_host.txt

F="lspci lsscsi dmesg syminq dmidecode lsmod uptime"
for f in $F; do
        test -x $(type -p $f) && $f >$(basename $f).txt 2>>$ERR
done

F="df@-k multipath@-ll fdisk@-l dmsetup@table symcfg@list uname@-a modinfo@lpfc modinfo@qla2xxx modinfo@qlge"
for f in $F; do
        x=$(echo $f | tr "@" " ")
        test -x $(type -p $x) && ${x} >$f.txt 2>>$ERR
done

F="/proc/mounts /proc/cmdline /proc/sys/vm/dirty_* /etc/init.d/boot.local /etc/modprobe.conf.local"
for f in $F; do
        R=$(echo $f | tr "/" "@" )
        cat $f >$R.txt 2>>$ERR
done

find /dev/disk -exec ls -l {} \; | sort -n > find@dev@disk.txt 2>>$ERR
find /dev/mapper -exec ls -l {} \; | sort -n > find@dev@mapper.txt 2>>$ERR

for d in $ODR; do
        ls -lR ${d}* >ls@-lR.txt 2>>$ERR
done

# TODO: find devices from mounts
#mount >mount.out
#echo $ODR
#for d in $ODR; do
#       ls $d
#       # | while read; do
#       #       echo $REPLY
#       #       grep "$d" mount.out
#       #done
#done

OF=debugfs.ocfs2.txt
>$OF
for d in /dev/dm-* /dev/sda[1-9]; do
        echo $d >>$OF
        debugfs.ocfs2 -n -R "stats -h" "${d}" >>$OF 2>>$ERR
done

OF=dumpe2fs.txt
>$OF
for d in /dev/dm-* /dev/sda[1-9]; do
        echo $d >>$OF
        dumpe2fs $d 2>/dev/null | head -40 >>$OF 2>>$ERR
done

#supportconfig 2>>$ERR 1>&2
# TODO: check for diskspace in $DIR
#mv /var/log/nts_*$HOSTNAME*.tbz .

#
cd $OLDPWD

tar czf $DIR.tgz $DIR 2>>$ERR
ls -l $DIR.tgz 2>>$ERR
tar ztfv $DIR.tgz 2>>$ERR && rm -rf $DIR

echo "### $CMD ### stop $DAT :"$?
logger "### $CMD ### stop $DAT :"$?
#
