#!/bin/sh
# vmkheartbeat:  log a message every hour with some simple
# information:  vmk loaded, uptime, num vms.
#

count_vms() {
  ps -auxw | grep -c [v]mware-vmx
}

vmkernel_loaded() {
   [ -e /proc/vmware/vm ]
}

get_build_numbers() {
   VMK_BUILD=`grep -E 'vmkernel build: [0-9]+' /proc/vmware/version | awk '{print $3}'`
   VMX_BUILD=`vmware -v | sed 's/.*build-//'`
   echo "$VMK_BUILD $VMX_BUILD"
}

get_mem_usage() {
   swapUsed=`grep Swap: /proc/meminfo | awk '{print $3}'`
   # grab the 3 worst memory offenders, and their resident size, obviously.
   memHogs=`ps -A --no-headers --format fname,rss --sort=-rss | head -3 | \
            sed -r 's/\s+/-/g' | column | sed -r 's/\s+/, /g'`
   echo  "$swapUsed, $memHogs"
}

UPTIME=`cat /proc/uptime | awk '{print $1}'`
TIME=`date +"%s"`

if vmkernel_loaded;  then
   NUM_VMS=`count_vms`
   VMK_UPTIME=`cat /proc/vmware/uptime`
   BUILDS=`get_build_numbers`
   MEM=`get_mem_usage`
   /usr/bin/logger -p "local6.info" "($TIME)" hb: vmk loaded, $UPTIME, $VMK_UPTIME, $NUM_VMS, $BUILDS, $MEM
else
   /usr/bin/logger -p "local6.info" "($TIME)" hb: vmk not loaded, $UPTIME, `uname -r`
fi
