#!/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.

DMESG_LOG_FILE=/var/log/kern.log
CLIENT_LOG_FILE_LIST="$DMESG_LOG_FILE"
HOST_LOG_FILE_LIST="/var/log/ksvd/1/*.txt $DMESG_LOG_FILE"
GUEST_LOG_FILE_LIST="$DMESG_LOG_FILE"


do_justerrors=1
do_ksvd_logs=1

usage()
{
	cat <<EOT
$1 [--core-only] [--notjusterrors] [--logs file1 [files ...]]

Examples:
	$1 --logs /tmp/uniqb.txt.prev /var/log/ksvd/2/ksvdmpcd.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="/var/lib/ksvd/settings.node"
	eval `grep UNIQB_MC_USER= $settings_node`
	home_=`su - "$UNIQB_MC_USER" -c 'pwd'`
}

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

	while [ $# -gt 0 ]; do
		grep ' E ' $1 | sed "s| E | $1 E |" >> $tmp2
		grep ' W ' $1 | sed "s| W | $1 W |" >> $tmp2
		grep ' ERROR ' $1 | sed "s| ERROR | $1 ERROR |" >> $tmp2
		grep ' WARN ' $1 | sed "s| WARN | $1 WARN |" >> $tmp2
		if [ 0 -eq $do_justerrors ] ;then
			grep ' I ' $1 | sed "s| I | $1 I |" >> $tmp2
			grep ' N ' $1 | sed "s| N | $1 N |" >> $tmp2
			grep ' D ' $1 | sed "s| D | $1 D |" >> $tmp2
			grep ' INFO ' $1 | sed "s| INFO | $1 INFO |" >> $tmp2
			grep ' NOTE ' $1 | sed "s| NOTE | $1 NOTE |" >> $tmp2
			grep ' DEBUG ' $1 | sed "s| DEBUG | $1 DEBUG |" >> $tmp2
		fi
		shift
	done


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

# --- main starts here ---

	# parse the command line
	cmdname=`basename $0`
	while [ $# -gt 0 ]; do
		case "$1" in 
		--notjusterrors|-notjusterrors) do_justerrors=0;;
		--log*|-log*) do_logs=1;;
		--core-only|-core-only) core_only=1;;
		--h*|-h*) usage $cmdname; exit 0;;
		-*|--*)   echo "unknown option $1"; usage $cmdname; exit 1;;
		*) break;;
		esac
		shift
	done

	# determine where we are running (host, client or guest)

	# assume on host XXX: TODO: Enstone: add switch to detect/handle client and guest
	ksvdfilelist=/tmp/uniqbtxtfiles.$$.list
	touch $ksvdfilelist
	set_home

	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 >> $ksvdfilelist
			[ -d $home_/.ksvd-pools ] && find $home_/.ksvd-pools -name uniqb.txt >> $ksvdfilelist
			[ -d $home_/.ksvd-users ] && find $home_/.ksvd-users -name uniqb.txt >> $ksvdfilelist
			[ -d $home_/logs ] && find $home_/logs -name \*-mc.log >> $ksvdfilelist
			[ -d $home_/logs ] && find $home_/logs -name \*-VIA.log >> $ksvdfilelist
			[ -d $home_/logs ] && find $home_/logs -name \*-db.log >> $ksvdfilelist
		fi
	fi

	analyze_log_files $HOST_LOG_FILE_LIST `cat $ksvdfilelist` $@
	/bin/rm -f $ksvdfilelist

	exit 0

	usage $cmdname
