Sleds/utils/sequencelogic-gather-stats.sh

87 lines
2.7 KiB
Bash

#!/bin/bash
#
# This script gathers a slew of statistics on the current VM/host and emits a propertyname=JSON object stream of the summary
function emit(){
key="$1"
val="$2"
if [ "$3" = "stripBrackets" ]; then
val=`echo "${val}" | sed 's/^[[]//' | sed 's/[]]$//'`
fi
echo "\"${key}\":${val}"
}
MONGO_QUIET=true
source /sl/bin/sequencelogic-helpers.sh 2>&1 >/dev/null
### file systems
(
FSROOT=$(/sl/bin/sequencelogic-fs-usage.sh / 2>/dev/null)
emit fs_root "$FSROOT" stripBrackets
FSTMP=$(/sl/bin/sequencelogic-fs-usage.sh /sl/tmp 2>/dev/null)
emit fs_tmp "$FSTMP" stripBrackets
FSSYNC=$(/sl/bin/sequencelogic-fs-usage.sh /sl/SLSync 2>/dev/null)
emit fs_slsync "$FSSYNC" stripBrackets
### cpu
if [ "$PLATFORM" = "Darwin" ]; then
CPU=`iostat -n0 -c1 | tail -1`
else
CPU=`iostat -c 2 2 | grep -v '^$' | tail -1`
fi
CPU="$(echo -e "${CPU}" | sed -e 's/^[[:space:]]*//')"
CPU="$(echo "${CPU}" | awk '{ printf "{\"system\":%d, \"user\":%d}", $2, $1 }')"
emit cpu "${CPU}"
### memory
if [ "$PLATFORM" = "Darwin" ]; then
MEMTOT="$(sysctl hw.memsize | cut -d' ' -f2)"
#vm.swapusage: total = 8192.00M used = 6739.25M free = 1452.75M (encrypted)
SWAPTOT="$(sysctl vm.swapusage | awk '{gsub("M","",$4); print $4;}')"
SWAPFREE="$(sysctl vm.swapusage | awk '{gsub("M","",$10); print $10;}')"
#echo "st ${SWAPTOT} sf ${SWAPFREE}"
vm_stat | sed 's/[.]//g' | awk -v MEMTOT="${MEMTOT}" -v SWAPTOT="${SWAPTOT}" -v SWAPFREE="${SWAPFREE}" '
BEGIN { used=0; free=0; }
/Pages (active|speculative|throttled|wired down)/ { gsub(/^.*:[ \t]*/,""); used = used + $1;
#printf "used %ld %ld\n", $1, used;
next;}
/Pages (free|inactive|purgeable)/ { gsub(/^.*:[ \t]*/,""); free = free + $1;
#printf "free %ld %ld\n", $1, free;
next;}
{ next }
END { printf "\"mem\":{\"total\": %ld, \"free\":%ld, \"used\":%ld, \"swap_total\":%ld, \"swap_free\":%ld}\n", MEMTOT, free*4096, used*4096, SWAPTOT*1024*1024, SWAPFREE*1024*1024 }
'
else
cat /proc/meminfo | awk '
BEGIN { total=0; free=0; swaptot=0; swapfree=0; }
/MemTotal/ { total = $2; }
/MemFree|Buffers|Cached/ { free += $2; }
/SwapTotal/ { swaptot += $2; }
/SwapFree/ { swapfree += $2; }
END { printf "\"mem\":{\"total\": %ld, \"free\":%ld, \"used\":%ld, \"swap_total\":%ld, \"swap_free\":%ld}\n", total*1024, free*1024, (total*1024-free*1024), swaptot*1024, swapfree*1024 }
'
fi
### cores
if [ "$PLATFORM" = "Darwin" ]; then
CORES=$(/usr/sbin/sysctl -n hw.logicalcpu)
else
CORES=$(nproc)
fi
emit cores "${CORES}"
### load average
LOADAVG=$(uptime | sed 's/^.*load average[s]*:[ ]*//' | awk '{gsub(/,/,"",$2); print $2}') # 5 min avg
emit loadavg "${LOADAVG}"
) | awk '
BEGIN {comma=""; printf "{\n";}
{
printf " %s%s\n", comma, $0
comma=","
}
END {printf "}\n"}
'
exit 0;