#! /bin/sh

# default libexecdir used to bootstrap scripts
libexecdir=${GLOBUS_LOCATION}/libexec

# load GRIS CPU common code and initialization
. ${libexecdir}/grid-hostinfo-cpu-common

# so we know where SYSINFO is
. ${libexecdir}/globus-sh-tools.sh

#########################################################################

_probe_cache_tmp=${localstatedir}cpu-cache-$$.tmp

# set mode for cache file
umask 077

cleanup ()
{
    rm -f "$_probe_cache_tmp"
}

trap cleanup 0

cleanup

report_resource_cpu ()
{
    ${GLOBUS_SH_LSCFG} | grep L2cache | \
    {
	while read v1 cache v2
	do
	   _cpu_l2cache_size=`${GLOBUS_SH_LSATTR} -E -l $cache -a size -F value`


	    if [ ! "X${_probe_cache}" = "X" ]
	    then
		${GLOBUS_SH_CAT-cat} 2>/dev/null >> "${_probe_cache_tmp}" <<EOF
_cpu_${_cpu}_l2cache_size="${_cpu_l2cache_size}"
EOF
	    fi
	done
    }

    _cpu_count=0
    _cpu=-1
    ${GLOBUS_SH_LSCFG} | grep proc | \
    {
	while read v1 proc v2
	do
	    _cpu=`$EXPR ${_cpu} + 1`
	    speed=`${GLOBUS_SH_LSATTR} -E -l $proc -a frequency -F value`
	    _cpu_speed=`$EXPR ${speed} / 1000000`
	    _cpu_model=`${GLOBUS_SH_LSATTR} -E -l $proc -a type -F value`
	    _cpu_vendor="IBM"
	    _cpu_count=`$EXPR ${_cpu_count} + 1`

	    eval "_cpu_${_cpu}_speed=\"${_cpu_speed}\""
	    eval "_cpu_${_cpu}_vendor=\"${_cpu_vendor}\""
	    eval "_cpu_${_cpu}_model=\"${_cpu_model}\""
	    eval "_cpu_${_cpu}_l2cache_size=\"${_cpu_l2cache_size}\""
		    
	    if [ ! "X${_probe_cache}" = "X" ]
	    then
		${GLOBUS_SH_CAT-cat} 2>/dev/null >> "${_probe_cache_tmp}" <<EOF
_cpu_${_cpu}_speed="${_cpu_speed}"
_cpu_${_cpu}_vendor="${_cpu_vendor}"
_cpu_${_cpu}_model="${_cpu_model}"
_cpu_${_cpu}_l2cache_size="${_cpu_l2cache_size}"
EOF
	    fi
	done
    }


	if [ ! "X${_probe_cache}" = "X" ]
	then
	    ${GLOBUS_SH_CAT-cat} 2>/dev/null >> "${_probe_cache_tmp}" <<EOF
_cpu_count="${_cpu_count}"
EOF
	    mv -f "${_probe_cache_tmp}" "${_probe_cache}" 2> /dev/null
	fi

	probe_resource_cpufree_uptime

	# run this in initialized subshell environment
	emit_resource_cpu_descriptions
}

#############
# do the work
report_resource_cpu
