#!/bin/sh
#
#Fake sacctmgr show qos results for testing

#Order of fields is
#format=account,description,organization
# list account format=account,description,organization --parsable2 --noheader --readonly

verbose_flag=

print_header()
{
	echo "Descr|GraceTime|GrpCPUMins|GrpCPUs|GrpJobs|GrpNodes|GrpSubmit|GrpWall|MaxCPUMins|MaxCPUs|MaxCPUsPU|MaxJobs|MaxNodes|MaxNodesPU|MaxSubmit|MaxWall|Name|Preempt|PreemptMode|Priority|UsageFactor|"
}

print_qos()
{	
	#Clear values
	tmp_desc=
	tmp_grace=
	tmp_gcmins=
	tmp_gcpus=
	tmp_gjobs=
	tmp_gnodes=
	tmp_gsjobs=
	tmp_gwall=
	tmp_mcmins=
	tmp_mcpus=
	tmp_mcpuuser=
	tmp_mjobs=
	tmp_mnodes=
	tmp_mnodesuser=
	tmp_msjobs=
	tmp_mwall=
	tmp_name=
	tmp_preempt=
	tmp_pmode=
	tmp_pri=
	tmp_uf=

	#Set values
	while [ $# -gt 0 ]
	do
		key=$1
		val=$1
		shift
		key=`echo $key | sed -e 's/=.*$//'`
		val=`echo $val | sed -e 's/^.*=//'`
		#echo >&2 "$key = $val"

		case $key in
		    description)
			tmp_desc=$val
			;;
		    gracetime)
			tmp_grace=$val
			;;
		    grpcpumins)
			tmp_gcmins=$val
			;;
		    grpcpus)
			tmp_gcpus=$val
			;;
		    grpjobs)
			tmp_gjobs=$val
			;;
		    grpnodes)
			tmp_gnodes=$val
			;;
		    grpsubmitjobs)
			tmp_gsjobs=$val
			;;
		    grpwall)
			tmp_gwall=$val
			;;
		    maxcpumins)
			tmp_mcmins=$val
			;;
		    maxcpus)
			tmp_mcpus=$val
			;;
		    maxcpusperuser)
			tmp_mcpuuser=$val
			;;
		    maxjobs)
			tmp_mjobs=$val
			;;
		    maxnodes)
			tmp_mnodes=$val
			;;
		    maxnodesperuser)
			tmp_mnodesuser=$val
			;;
		    maxsubmitjobs)
			tmp_msjobs=$val
			;;
		    maxwall)
			tmp_mwall=$val
			;;
		    name)
			tmp_name=$val
			;;
		    preempt)
			tmp_preempt=$val
			;;
		    preemptmode)
			tmp_pmode=$val
			;;
		    priority)
			tmp_pri=$val
			;;
		    usagefactor)
			tmp_uf=$val
			;;
		    *)
			echo >&2 "Unrecognized parm $key, aborting"
			exit 1
			;;
		esac
	done
		    
	echo "$tmp_desc|$tmp_grace|$tmp_gcmins|$tmp_gcpus|$tmp_gjobs|$tmp_gnodes|$tmp_gsjobs|$tmp_gwall|$tmp_mcmins|$tmp_mcpus|$tmp_mcpuuser|$tmp_mjobs|$tmp_mnodes|$tmp_mnodesuser|$tmp_msjobs|$tmp_mwall|$tmp_name|$tmp_preempt|$tmp_pmode|$tmp_pri|$tmp_uf|"

}

print_qos_hi()
{	print_qos \
		name='high-priority'  description='High priority QoS' \
		gracetime=120  \
		grpcpumins=6000  grpcpus=50  grpnodes=10 \
		grpjobs=75  grpsubmitjobs=100  grpwall=600 \
		maxcpumins=12000  maxcpus=100  maxnodes=20 \
		maxjobs=75  maxsubmitjobs=100  maxwall=600 \
		maxcpusperuser=25  maxnodesperuser=5 \
		preempt='scavenger'  preemptmode='cluster' \
		priority=500  usagefactor=2 
}

print_qos_std()
{	print_qos \
		name='standard'  description='standard priority QoS' \
		gracetime=60  \
		maxcpumins=24000  maxcpus=200  maxnodes=40 \
		maxjobs=150  maxsubmitjobs=200  maxwall=1200 \
		maxcpusperuser=50  maxnodesperuser=10 \
		preempt='scavenger'  preemptmode='cluster' \
		priority=100  usagefactor=1 
}

print_qos_scav()
{	print_qos \
		name='scavenger'  description='bottom feeder QoS' \
		gracetime=10  preemptmode='cluster' \
		priority=0  usagefactor=0 
}


print_specified_qos()
{	qos=$1

	case $qos in
	   hi|high)
		print_qos_hi
		;;
	   std|standard)
		print_qos_std
		;;
	   scav|scavenger)
		print_qos_scav
		;;
	   *)
		x=x
		;;
	esac
}

print_qoses()
{	#We always have --noheader
	if [ "x$verbose_flag" = "xyes" ]; then
		print_header
	fi
	while [ $# -gt 0 ]
	do
		qos=$1
		shift
		print_specified_qos $qos
	done
}

print_all_qoses()
{	#Must do alphabetically
	print_qoses hi std scav
}


print_high_qos()
{	
	print_qoses hi
}

print_std_qos()
{	
	print_qoses std
}

print_scav_qos()
{	
	print_qoses  scav
}

print_no_qoses()
{	print_qoses 'no-such-qos'
}

#Parse options
name_flag=

while [ $# -gt 0 ]
do
	arg=$1
	shift

	case $arg in
	    name=* )
		tmp=`echo $arg | sed -e 's/^name=//' -e "s/'//g" -e 's/"//g' `
		name_flag=$tmp
		;;
	    -v|--verbose)
		verbose_flag=yes
		;;
	esac
done

if [ "x${name_flag}" != "x" ]; then
	#cluster requested, possibly with user
	if [ "x${name_flag}" = "xhigh-priority" ]; then
		print_high_qos
	elif [ "x${name_flag}" = "xstandard" ]; then
		print_std_qos
	elif [ "x${name_flag}" = "xscavenger" ]; then
		print_scav_qos
	else
		print_no_qoses
	fi
else
	print_all_qoses
fi

