Skip to content

Instantly share code, notes, and snippets.

@jhyland87
Created December 7, 2017 19:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jhyland87/00e9cfe1f2a158478233cb78b8949d3b to your computer and use it in GitHub Desktop.
Save jhyland87/00e9cfe1f2a158478233cb78b8949d3b to your computer and use it in GitHub Desktop.
function _err {
echo "${1}" 1>&2
[[ -n $2 ]] && exit $2
}
function trim {
if test -p /dev/stdin; then
data="$(</dev/stdin)"
elif test -n "${1}"; then
data="$*"
else
return 1
fi
echo "${data}" | sed -E -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*$//g'
}
# Convert any lower case letters to upper case
function upper {
if test -p /dev/stdin
then
data=$(</dev/stdin)
elif test -n $1
then
data=$*
else
return 1
fi
echo "${data}" | tr '[a-z]' '[A-Z]'
}
# Convert any upper case letters to lower case
function lower {
if test -p /dev/stdin
then
data=$(</dev/stdin)
elif test -n $1
then
data=$*
else
return 1
fi
echo "${data}" | tr '[A-Z]' '[a-z]'
}
declare -A _f
_f[rst]=$(tput sgr0)
_f[bld]=$(tput bold)
_f[red]=$(tput setaf 1)
_f[grn]=$(tput setaf 2)
_f[yel]=$(tput setaf 3)
_f[blu]=$(tput setaf 4)
_f[cya]=$(tput setaf 6)
_f[whi]=$(tput setaf 7)
_f[gry]=$(tput setaf 8)
_f[red.bld]="${_f[red]}${_f[bld]}"
_f[grn.bld]="${_f[grn]}${_f[bld]}"
_f[yel.bld]="${_f[yel]}${_f[bld]}"
_f[blu.bld]="${_f[blu]}${_f[bld]}"
_f[cya.bld]="${_f[cya]}${_f[bld]}"
_f[whi.bld]="${_f[whi]}${_f[bld]}"
_f[check.result.notes]=" ${_f[gry]}%s${_f[rst]}"
function section_header {
printf "\n${_f[cya.bld]}%-10s${_f[rst]}" "${1}"
[[ -n ${2} ]] && printf " ${_f[gry]}(%s)${_f[rst]}" "${2}"
echo
}
function check_init {
printf " ${_f[whi.bld]}%-70s${_f[rst]} " "${1}"
}
function check_result {
result=$(echo ${1} | upper)
declare -A _s
_s[fail]="FAIL FAILED ERROR CRITICAL"
_s[pass]="PASS PASSED OK SUCCESS COMPLETE COMPLETED DONE FOUND"
_s[warn]="WARN WARNING"
_s[info]="INFO NOTICE DATA"
# If this is a failed result..
if echo "${_s[fail]}" | tr ' ' '\n' | grep -sqE "^${result}$"; then
txtcol="${_f[red.bld]}"
# If this is simply a warning
elif echo "${_s[warn]}" | tr ' ' '\n' | grep -sqE "^${result}$"; then
txtcol="${_f[yel.bld]}"
# If this is a passed result
elif echo "${_s[pass]}" | tr ' ' '\n' | grep -sqE "^${result}$"; then
txtcol="${_f[grn.bld]}"
# If this is a info result
elif echo "${_s[info]}" | tr ' ' '\n' | grep -sqE "^${result}$"; then
txtcol="${_f[cya.bld]}"
#idkwtf
else
txtcol="${_f[whi.bld]}"
fi
msg=$(echo ${result} | upper)
printf "%3s ${txtcol}%8s${_f[rst]} %s" "[" "${msg}" "]"
[[ -n ${2} ]] && printf "${_f[check.result.notes]}" "${2}"
echo
}
function check_pass {
check_result "$(echo ${2:-'SUCCESS'} | upper)" "${1}"
}
function check_fail {
check_result "$(echo ${2:-'ERROR'} | upper)" "${1}"
}
function check_warn {
check_result "$(echo ${2:-'WARN'} | upper)" "${1}"
}
function check_info {
check_result "$(echo ${2:-'INFO'} | upper)" "${1}"
}
# Gather Server Information
declare -A server_data
# CPU Cores
server_data[cpu.cores]=$(grep --count -E '^processor' /proc/cpuinfo)
# System Load
server_data[load.5min]=$(cut -d ' ' -f 1 /proc/loadavg)
server_data[load.10min]=$(cut -d ' ' -f 2 /proc/loadavg)
server_data[load.15min]=$(cut -d ' ' -f 3 /proc/loadavg)
# System Memory
server_data[mem.total]=$(awk '{if($1=="MemTotal:") print $2}' /proc/meminfo)
server_data[mem.free]=$(awk '{if($1=="MemFree:") print $2}' /proc/meminfo)
server_data[mem.used]=$((${server_data[mem.total]} - ${server_data[mem.free]}))
# Swap Usage
server_data[swap.total]=$(awk '{if($1=="SwapTotal:") print $2}' /proc/meminfo)
server_data[swap.free]=$(awk '{if($1=="SwapFree:") print $2}' /proc/meminfo)
server_data[swap.used]=$((${server_data[swap.total]} - ${server_data[swap.free]}))
section_header "System Resource Utilization" "CPU, Memory, I/O, etc"
check_init "Checking 5 minute load average"
if [[ ${server_data[cpu.cores]} < ${server_data[load.5min]} ]]; then
check_fail "${server_data[load.5min]}"
else
check_pass "${server_data[load.5min]}"
fi
check_init "Checking 10 minute load average"
if [[ ${server_data[cpu.cores]} < ${server_data[load.10min]} ]]; then
check_fail "${server_data[load.10min]}"
else
check_pass "${server_data[load.10min]}"
fi
check_init "Checking 15 minute load average"
if [[ ${server_data[cpu.cores]} < ${server_data[load.15min]} ]]; then
check_fail "${server_data[load.15min]}"
else
check_pass "${server_data[load.15min]}"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment