#! /bin/bash

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

# load GRIS common code and initialization
. ${libexecdir}/grid-info-common

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

emit_resource_mem_summary ()
{
    # $1 is dn suffix
    # $2 .. $N are additional object entries
if [ ! "X${_mds_want_glue}" = "Xtrue" ]
then
${GLOBUS_SH_CAT-cat} <<EOF
${_line_class_dn}dn: $1
${_line_class_oc}objectclass: MdsMemoryRamTotal
${_line_class_oc}objectclass: MdsMemoryVmTotal
EOF
else
${GLOBUS_SH_CAT-cat} <<EOF
${_line_class_oc}objectclass: EDTTop
${_line_class_oc}objectclass: ClusterTop
${_line_class_oc}objectclass: HostMemory
EOF
fi
    shift
    while [ $# -gt 0 ]
    do
	${GLOBUS_SH_CAT-cat} <<EOF
$1
EOF
	shift
    done
    if [ ! "X${_mds_want_glue}" = "Xtrue" ]
    then
${GLOBUS_SH_CAT-cat} <<EOF
${_line_class_av}Mds-Memory-Ram-Total-sizeMB: ${_mem_size_mbytes}
${_line_class_av}Mds-Memory-Ram-Total-freeMB: ${_mem_free_mbytes}
${_line_class_av}Mds-Memory-Vm-Total-sizeMB: ${_vm_size_mbytes}
${_line_class_av}Mds-Memory-Vm-Total-freeMB: ${_vm_free_mbytes}
${_line_class_av}Mds-Memory-Ram-sizeMB: ${_mem_size_mbytes}
${_line_class_av}Mds-Memory-Ram-freeMB: ${_mem_free_mbytes}
${_line_class_av}Mds-Memory-Vm-sizeMB: ${_vm_size_mbytes}
${_line_class_av}Mds-Memory-Vm-freeMB: ${_vm_free_mbytes}

EOF
else
${GLOBUS_SH_CAT-cat} <<EOF
${_line_class_av}MemPhysical: ${_mem_size_mbytes}
${_line_class_av}MemVM: ${_vm_size_mbytes}
${_line_class_av}MemRAMFree: `expr ${_mem_size_mbytes} + ${_vm_size_mbytes}`

EOF
fi
}

emit_resource_mem_devices ()
{
${GLOBUS_SH_CAT-cat} <<EOF
${_line_class_dn}dn: Mds-Device-name=physical memory, $1
${_line_class_oc}objectclass: Mds
${_line_class_oc}objectclass: MdsDevice
${_line_class_oc}objectclass: MdsMemoryRam
${_line_class_av}Mds-Device-name: physical memory
${_line_class_av}Mds-Memory-Ram-sizeMB: ${_mem_size_mbytes}
${_line_class_av}Mds-Memory-Ram-freeMB: ${_mem_free_mbytes}
`emit_mds_object_timestamps`

EOF

${GLOBUS_SH_CAT-cat} <<EOF
${_line_class_dn}dn: Mds-Device-name=virtual memory, $1
${_line_class_oc}objectclass: Mds
${_line_class_oc}objectclass: MdsDevice
${_line_class_oc}objectclass: MdsMemoryVm
${_line_class_av}Mds-Device-name: virtual memory
${_line_class_av}Mds-Memory-Vm-sizeMB: ${_vm_size_mbytes}
${_line_class_av}Mds-Memory-Vm-freeMB: ${_vm_free_mbytes}
`emit_mds_object_timestamps`

EOF
}

emit_resource_mem_descriptions ()
{
    probe_mds_object_timestamps

    timestamps=`emit_mds_object_timestamps`

    if [ "X${_dump_host_object}" = "Xtrue" ]
    then
	emit_resource_mem_summary "${_suffix}"
    fi

    if [ "X${_dump_devclass_object}" = "Xtrue" ]
    then
	emit_resource_mem_summary "Mds-Device-Group-name=memory, ${_suffix}" "${_line_class_oc}objectclass: MdsDeviceGroup" "${_line_class_av}Mds-Device-Group-name: memory" "${timestamps}"
    fi

    if [ "X${_dump_dev_objects}" = "Xtrue" ]
    then
	emit_resource_mem_devices "Mds-Device-Group-name=memory, ${_suffix}"
    fi
}

drop_echo ()
{
    echo $1
}

drop_M ()
{
    IFS=M
    drop_echo $1
    IFS="$IFS_save"
}

drop_K ()
{
    IFS=K
    drop_echo $1
    IFS="$IFS_save"
}

drop_G ()
{
    IFS=G
    drop_echo $1
    IFS="$IFS_save"
}

drop_MKG ()
{
    case "$1" in
	*M)
	    drop_M $1
	    ;;
	*K)
	    $EXPR `drop_K $1` / 1024
	    ;;
	*G)
	    $EXPR "`drop_G $1` * 1024"
	    ;;
    esac
}
