#!/bin/sh
#
# Copyright 2006-2016 Hunan Kylin, Inc.  All Rights Reserved.
# 
# NOTICE: ALL INFORMATION CONTAINED HEREIN IS, AND REMAINS THE PROPERTY OF
# HUNAN KYLIN, INC. AND ITS SUPPLIERS, IF ANY. THE INTELLECTUAL AND
# TECHNICAL CONCEPTS CONTAINED HEREIN ARE PROPRIETARY TO HUNAN KYLIN, INC.
# AND ITS SUPPLIERS AND MAY BE COVERED BY U.S. AND FOREIGN PATENTS, PATENTS IN
# PROCESS, AND ARE PROTECTED BY TRADE SECRET OR COPYRIGHT LAW. DISSEMINATION
# OF THIS INFORMATION OR REPRODUCTION OF THIS MATERIAL IS STRICTLY FORBIDDEN
# UNLESS PRIOR WRITTEN PERMISSION IS OBTAINED FROM HUNAN KYLIN, INC.

usage()
{
	cat <<EOT
ksvd-show [options]

Options:
	--logs file1 [files ...]
	--ksvd-logs
	--gold
	--errors

Examples:
	ksvd-show --ksvd-logs
	ksvd-show --logs /home/kylin-ksvd/ksvd-users/org-0/users/0local/mcadmin1/win7/uniqb.txt
	ksvd-show --ksvd-logs --logs /home/kylin-ksvd/ksvd-users/org-0/users/0local/mcadmin1/win7/uniqb.txt
EOT
}

set_home()
{
	me=`id -u`
	if [ $me != "0" ] ; then
		echo "run as root to also see additional info"
		echo
		return
	fi
	settings_node="$VARPREFIX/settings.node"
	eval `grep UNIQB_MC_USER= $settings_node`
	home_=`su - "$UNIQB_MC_USER" -c 'pwd'`
}

show_list()
{
	if [ "$me" != "0" ] ; then
		echo "must run as root"
		return
	fi

	if [ ! -d "$home_" ] ; then
		printf "Home directory of user '%s' not found\n" "$UNIQB_MC_USER"
	else 
		[ -d $home_/ksvd-orgs ] && find $home_/ksvd-orgs -name uniqb.txt
		[ -d $home_/.ksvd-pools ] && find $home_/.ksvd-pools -name uniqb.txt
		[ -d $home_/.ksvd-users ] && find $home_/.ksvd-users -name uniqb.txt
	fi
}

show_gold()
{
	if [ "$me" != "0" ] ; then
		echo "must run as root"
		return
	fi

	if [ ! -d "$home_" ] ; then
		printf "Home directory of user '%s' not found\n" "$UNIQB_MC_USER"
		return
	fi

	tmp1=/tmp/vse.$$.list
	if [ -d $home_/ksvd-orgs ] ; then
		ls -1 $home_/ksvd-orgs/org*/gold/*/GUEST.IMG > $tmp1
	else 
		ls -1 $home_/*/GUEST.IMG > $tmp1
	fi

	for dir in `cat $tmp1`
	do
		base=`dirname $dir`
		if [ -f $base/.session-info -a -f $base/settings.local ] ; then
			echo $dir
		else
			echo $dir is missing .session-info or settings.local
		fi
	done
	/bin/rm $tmp1
}

show_errors()
{
	tmp1=/tmp/vse.$$.list
	tmp2=/tmp/vse.$$.out
	touch $tmp1 $tmp2

	for i in $PRODLOGDIR/1/*.txt
	do
		echo $i >> $tmp1
	done

	if [ "$me" = "0" ] ; then
		if [ ! -d "$home_" ] ; then
			printf "Home directory of user '%s' not found\n" "$UNIQB_MC_USER"
		else 
			[ -d $home_/ksvd-orgs ] && find $home_/ksvd-orgs -name uniqb.txt >> $tmp1
			[ -d $home_/.ksvd-pools ] && find $home_/.ksvd-pools -name uniqb.txt >> $tmp1
			[ -d $home_/.ksvd-users ] && find $home_/.ksvd-users -name uniqb.txt >> $tmp1
		fi
	fi

	for file in `cat $tmp1`
	do
		grep ' E ' $file | sed "s| E | $file E |" >> $tmp2
		grep ' W ' $file | sed "s| W | $file W |" >> $tmp2
	done

	if [ -n "$core_only" ] ; then
		sort $tmp2 |grep -v 'G:'
	else
		sort $tmp2
	fi
	/bin/rm $tmp1 $tmp2
}

show_logs()
{
	tmp2=/tmp/vse.$$.out
	touch $tmp2 

	while [ $# -gt 0 ]; do
		name=`basename "$1"`
		cat "$1" | grep -n -H --label "$name" ' [EWIND] ' | \
			sed 's/:/@@@/'| \
			sed 's/:/@@@/' | \
			sed 's/ [EWIND] /@@@&/'| \
			awk -F@@@ '{printf "%s %-20s %s\n",$3,$1,$4}' >> $tmp2
		shift
	done

	if [ -n "$do_ksvd_logs" ] ; then
		for i in $PRODLOGDIR/1/*.txt*
		do
			name=`basename "$i"`
			cat "$i" | grep -n -H --label "$name" ' [EWIN] ' | \
				sed 's/:/@@@/'| \
				sed 's/:/@@@/' | \
				sed 's/ [EWIN] /@@@&/'| \
				awk -F@@@ '{printf "%s %-20s %s\n",$3,$1,$4}' >> $tmp2
		done
	fi

	sort $tmp2

	/bin/rm $tmp2
}

# --- main starts here ---

	while [ $# -gt 0 ]; do
		case "$1" in 
		--gold|-gold) do_gold=1;;
		--list|-list) do_list=1;;
		--errors|-errors) do_errors=1;;
		--log*|-log*) do_logs=1;;
		--ksvd-log*|-ksvdc-log*) do_ksvd_logs=1; do_logs=1;;
		--core-only|-core-only) core_only=1;;
		--h*|-h*) usage; exit 0;;
		-*|--*)   echo "unknown option $1"; exit 1;;
		*) break;;
		esac
		shift
	done

	eval `uniqbenv`

	set_home

	if [ -n "$do_logs" ] ;then
		show_logs $@
		exit 0
	fi

	if [ -n "$do_list" ] ;then
		show_list
		exit 0
	fi

	if [ -n "$do_gold" ] ;then
		show_gold
		exit 0
	fi

	if [ -n "$do_errors" ] ;then
		show_errors
		exit 0
	fi

	usage
