#!/bin/bash
# $Header: /cvs/WebShield/wsrc/files/mgmt/disk-status,v 1.3.12.1 2004/09/10 10:19:31 bwhittak Exp $
#
# Copyright (C) 2004 Networks Associates Technology Inc. All rights reserved.
#
# generate the status of the disk subsystem
#
raidstate="N/A"
oldstate=

read_oldstate()
{
    test -f /tmp/diskstatus.txt 
    if [ $? = 0 ]
    then
       oldstate=`grep s.raidstatus /tmp/diskstatus.txt | cut -f2 -d" "`
    fi
}

disk_status_dpt()
{
       raidstate=`/usr/dpt/raidutil -d 0 -L logical | tail -2  | head -1  | cut -b 67-`
       if [ -z "${raidstate}" ]
       then
            raidstate="NOTMIRRORED"
       fi
       DISK_INFO=`/usr/dpt/raidutil -d 0 -L physical | /bin/grep Disk | /bin/awk ' { print $6 } '`
       DISK_INFO=`/bin/echo $DISK_INFO`
}
disk_status_perc()
{
	raidstate=`/usr/sbin/webshield percstate`
	DISK_INFO=
}
disk_status_sata()
{
	DISK_INFO=`awk ' { print $2 } ' < /proc/scsi/sg/device_strs`
}
ide_drive()
{
    DRIVER=`cat /proc/ide/${1}/driver | cut -f1 -d" "`
    if [ "${DRIVER}" = "ide-disk" ]
    then
        DISK_INFO=`/bin/cat /proc/ide/${1}/model`
    fi
}
disk_status_ide()
{
   ide_drive hda
}

disk_type()
{
	if [ -d /usr/dpt ]
	then
		DISK_TYPE=dpt
		return
	fi

	if [ -f /etc/init.d/raidmon ]
	then
		DISK_TYPE=perc
		return
	fi

	if [ -d /proc/scsi/ata_piix ]
	then
		DISK_TYPE=sata
		return
	fi

	DISK_TYPE=ide
}

disk_status()
{
	disk_type
	case $DISK_TYPE in
		dpt)
       		disk_status_dpt
			;;

		perc)
       		disk_status_perc
			;;

		sata)
       		disk_status_sata
			;;

		ide)
            disk_status_ide
			;;
	esac
    echo s.raidstatus "${raidstate}"
    echo s.disk $DISK_INFO
}
disk_change_state()
{
	case $1 in
		Optimal)
		/usr/sbin/webshield evrep -n diskmonitor --event DISK_STATUS_CHANGE::DiskOptimal
		;;
		Degraded)
		/usr/sbin/webshield evrep -n diskmonitor --event DISK_STATUS_CHANGE::DiskDegraded
		;;
		Reconstruct)
		/usr/sbin/webshield evrep -n diskmonitor --event DISK_STATUS_CHANGE::DiskRebuild
		;;
	esac
}
check_disk_status()
{
    newstate=`echo $raidstate | cut -f1 -d" "`
    if [ "T${oldstate}" != "T" ]
    then
	if [ "T${oldstate}" != "T${newstate}" ]
	then
		disk_change_state $newstate
	fi
    fi
}
read_oldstate

disk_status > /tmp/$$
mv /tmp/$$ /tmp/diskstatus.txt

check_disk_status

exit 0
