#!/bin/bash
### Name: Simple XenStore Viewer
### Version: 1.2
### Release Date: 2012-08-17

function xenstoregetstatestr () {
	case "$1" in
		1)
			echo "正在初始化"
			;;
		2)
			echo "等待初始化"
			;;
		3)
			echo "已初始化"
			;;
		4)
			echo "已連接"
			;;
		5)
			echo "正在關閉"
			;;
		6)
			echo "已關閉"
			;;
		*)
			echo "不明"
			;;
	esac
}

function xenstoregetinfo () {
	case "$1" in
		m|h|'?'|'')
			echo " b 區塊裝置"
			echo " c 主控台"
			echo " n 網路介面卡"
			echo " p 虛擬 CPU"
			echo " r 記憶體"
			;;
		b)
			vbdpath="$xenstorepath/device/vbd"
			for i in `xenstore-list $vbdpath`
			do
				echo "虛擬裝置名稱:    $i"
				echo "虛擬裝置類型:    `xenstore-read $vbdpath/$i/device-type`"
				echo "虛擬裝置狀態:    `xenstoregetstatestr $(xenstore-read $vbdpath/$i/state)`"
				vbdbackpath="`xenstore-read $vbdpath/$i/backend`"
				echo "虛擬裝置後端名稱:`xenstore-read $vbdbackpath/dev`"
				echo "虛擬裝置後端類型:`xenstore-read $vbdbackpath/type`"
				echo "虛擬裝置後端參數:`xenstore-read $vbdbackpath/params`"
				echo -n "其他資訊:        "
				case "`xenstore-read $vbdbackpath/online`" in
					0)
						echo -n "離線"
						;;
					1)
						echo -n "線上"
						;;
					*)
						echo -n "不明"
						;;
				esac
				case "`xenstore-read $vbdbackpath/removable`" in
					0)
						echo -n "、不可卸除"
						;;
					1)
						echo -n "、卸除式裝置"
						;;
					*)
						echo -n "、不明"
						;;
				esac
				case "`xenstore-read $vbdbackpath/bootable`" in
					0)
						echo "、不可開機"
						;;
					1)
						echo "、可開機"
						;;
					*)
						echo "、不明"
						;;
				esac
				echo ""
			done
			;;
		c)
			conpath="$xenstorepath/console"
			echo "Xen Console 後端 TTY:      `xenstore-read $conpath/tty`"
			echo "Xen Console 緩衝區大小限制:`xenstore-read $conpath/limit`"
			echo "VNC 伺服器接聽於:          `xenstore-read $conpath/vnc-listen`:`xenstore-read $conpath/vnc-port`"
			echo ""
			;;
		n)
			vifpath="$xenstorepath/device/vif"
			for i in `xenstore-list $vifpath`
			do
				echo "虛擬裝置名稱:           $i"
				echo "虛擬裝置狀態:           `xenstoregetstatestr $(xenstore-read $vifpath/$i/state)`"
				echo "虛擬網路介面卡 MAC 位址:`xenstore-read $vifpath/$i/mac`"
				vifbackpath="`xenstore-read $vifpath/$i/backend`"
				echo "橋接至:                 `xenstore-read $vifbackpath/bridge`"
				echo "用來啟動/停止的 script: `xenstore-read $vifbackpath/script`"
				echo ""
			done
			;;
		p)
			cpupath="$xenstorepath/cpu"
			for i in `xenstore-list $cpupath`
			do
				echo "CPU $i: `xenstore-read $cpupath/$i/availability`"
			done
			;;
		r)
			mempath="$xenstorepath/memory"
			echo "記憶體大小    :`xenstore-read $mempath/target`"
			echo "記憶體大小上限:`xenstore-read $mempath/static-max`"
			echo "視訊記憶體大小:`xenstore-read $mempath/videoram`"
			;;
		*)
			echo "不明的指令。請輸入 m 來查看說明。"
			echo "若要離開,請送出 EOF,通常按下 Control-D 即可。"
			;;
	esac
}

[ "`id -u`" != "0" ] && echo "這個 script 必須以 root 身份執行" && exit 40

if [ -z "$1" ]
then
	read -p "請輸入 domain ID 或 domain 名稱:" xendominput
else
	xendominput="$1"
fi

[ -z "$xendominput" ] && echo "使用預設值 doamin 0" && xendominput=0

echo "正在搜尋 domain $xendominput ......"

if xenstore-read /local/domain/$xendominput 1> /dev/null 2> /dev/null
then
	xenstorepath="/local/domain/$xendominput"
else
	for i in `xenstore-list /local/domain`
	do
		if [ "$xendominput" = "`xenstore-read /local/domain/$i/name 2> /dev/null`" ]
		then
			xenstorepath="/local/domain/$i"
			break
		fi
	done
fi

if [ -z "$xenstorepath" ]
then
	echo "找不到 domain $xendominput" && exit 42
else
	echo "XenStore 路徑是 $xenstorepath"
fi

if [ -z "$2" ]
then
	while read -p "XSView>>> " infocmdinput
	do
		xenstoregetinfo "$infocmdinput"
	done
else
	xenstoregetinfo "$2"
fi