#!/bin/sh
# NAME=IPMI parser
# DESCRIPTION=Get some devices info using ipmitool.
# DEPENDS=Chassis,Mainboard,Platform,Power Supply,SCSI Backplane

# ===========================================================================
# Parsing base info from IPMI
# ===========================================================================

if FRU_INFO=`cat $HOME/fru.log | grep -A13 'Builtin FRU Device'`; then
	# Detecting chassis
	CHASSIS_VENDOR=`echo "$FRU_INFO" | sed -n 's/ Product Manufacturer *: //p'`
	CHASSIS_TYPE=`echo "$FRU_INFO" | sed -n 's/ Chassis Type *: //p' | sed 's/Unspecified//'`
	CHASSIS_PART_NUM=`echo "$FRU_INFO" | sed -n 's/ Chassis Part Number *: //p' | sed 's/Unspecified//'`
	CHASSIS_SERIAL=`echo "$FRU_INFO"| sed -n 's/ Chassis Serial *: //p'`
	if [ -z "$CHASSIS_TYPE" ] || [ -z "$CHASSIS_PART_NUM" ]; then
		SEP=''
	else
		SEP=' / '
	fi
	CHASSIS_MODEL="$CHASSIS_TYPE$SEP$CHASSIS_PART_NUM"
	if [ -n "$CHASSIS_TYPE" ] || [ -n "$CHASSIS_PART_NUM" ]; then
		add_component Chassis "$CHASSIS_VENDOR" "$CHASSIS_MODEL" "$CHASSIS_SERIAL" ""
	fi
	
	# Detecting mainboard
	# Motherboard's version is BIOS version in Inquisitor
	MB_VENDOR=`echo "$FRU_INFO" | sed -n 's/ Board Mfg *: //p'`
	MB_PRODUCT=`echo "$FRU_INFO" | sed -n 's/ Board Product *: //p'`
	MB_PART_NUM=`echo "$FRU_INFO" | sed -n 's/ Board Part Number *: //p'`
	MB_SERIAL=`echo "$FRU_INFO" | sed -n 's/ Board Serial *: //p'`
	MB_MODEL="$MB_PRODUCT / $MB_PART_NUM"
	MB_VERSION="`grep -A 3 "BIOS Information" $HOME/dmi.log | sed -n '/Version:/s/^.*Version: \(.*\)$/\1/pg'`"
	[ ! -z "$MB_VERSION" ] || MB_VERSION=`grep -A 5 "description: BIOS" < $HOME/lshw.log | sed -n 's/^ *version: \(.*\)$/\1/p'`

	# If mainboard model exists
	if [ -n "$MB_PRODUCT" ] || [ -n "$MB_PART_NUM" ]; then
		echo Mainboard "$MB_VENDOR" "$MB_MODEL" "$MB_SERIAL" ' - ipmi' >> $HOME/debug.log
		add_component Mainboard "$MB_VENDOR" "$MB_MODEL" "$MB_SERIAL" "$MB_VERSION"
	else
		# If IPMI detection of MB failed
		if MB_INFO=`cat $HOME/lshw.log | grep -A5 'description: Motherboard'`; then
			# Detecting mainboard from lshw
			MB_VENDOR=`echo "$MB_INFO" | sed -n 's/ *vendor: //p'`
			MB_MODEL=`echo "$MB_INFO" | sed -n 's/ *product: //p'`
			MB_SERIAL=`echo "$MB_INFO" | sed -n 's/ *serial: //p'`
			MB_VERSION="`grep -A 3 "BIOS Information" $HOME/dmi.log | sed -n '/Version:/s/^.*Version: \(.*\)$/\1/pg'`"
			[ ! -z "$MB_VERSION" ] || MB_VERSION=`grep -A 5 "description: BIOS" < $HOME/lshw.log | sed -n 's/^ *version: \(.*\)$/\1/p'`
			echo Mainboard "$MB_VENDOR" "$MB_MODEL" "$MB_SERIAL" ' - lshw' >> $HOME/debug.log
			add_component Mainboard "$MB_VENDOR" "$MB_MODEL" "$MB_SERIAL" "$MB_VERSION"
		fi
	fi
	
	# Detecting platform
	PLATFORM_VENDOR=`echo "$FRU_INFO" | sed -n 's/ Product Manufacturer *: //p'`
	PLATFORM_PRODUCT=`echo "$FRU_INFO" | sed -n 's/ Product Name *: //p'`
	PLATFORM_PART_NUM=`echo "$FRU_INFO" | sed -n 's/ Product Part Number *: //p'`
	PLATFORM_SERIAL=`echo "$FRU_INFO" | sed -n 's/ Product Serial *: //p'`
	PLATFORM_VERSION=`echo "$FRU_INFO" | sed -n 's/ Product Version *: //p'`
	if [ -z "$PLATFORM_PRODUCT" ] || [ -z "$PLATFORM_PART_NUM" ]; then
		SEP=''
	else
		SEP=' / '
	fi
	PLATFORM_MODEL="$PLATFORM_PRODUCT$SEP$PLATFORM_PART_NUM"
	if [ -n "$PLATFORM_PRODUCT" ] || [ -n "$PLATFORM_PART_NUM" ]; then
		add_component Platform "$PLATFORM_VENDOR" "$PLATFORM_MODEL" "$PLATFORM_SERIAL" "$PLATFORM_VERSION"
	fi
fi

# ===========================================================================
# Parsing additional info from IPMI
# ===========================================================================

# Detecting power supply
if PS_INFO=`cat $HOME/fru.log | grep -A9 'ps\.vpd'`; then
	PS_VENDOR=`echo "$PS_INFO" | sed -n 's/ Product Manufacturer *: //p'`
	PS_MODEL=`echo "$PS_INFO" | sed -n 's/ Product Part Number *: //p'`
	PS_VERSION=`echo "$PS_INFO" | sed -n 's/ Product Version *: //p'`
	PS_SERIAL=`echo "$PS_INFO" | sed -n 's/ Product Serial *: //p'`
	add_component 'Power Supply' "$PS_VENDOR" "$PS_MODEL" "$PS_SERIAL"
fi

# Detecting backplane
if BP_INFO=`cat $HOME/fru.log | grep -A9 'scsibp\.vpd'`; then
	BP_VENDOR=`echo "$BP_INFO" | sed -n 's/ Product Manufacturer *: //p'`
	BP_MODEL=`echo "$BP_INFO" | sed -n 's/ Product Part Number *: //p'`
	BP_VERSION=`echo "$BP_INFO" | sed -n 's/ Product Version *: //p'`
	BP_SERIAL=`echo "$BP_INFO" | sed -n 's/ Product Serial *: //p'`
	add_component 'SCSI Backplane' "$BP_VENDOR" "$BP_MODEL" "$BP_SERIAL" "$BP_VERSION"
fi
