Created
December 7, 2017 19:56
-
-
Save jhyland87/00e9cfe1f2a158478233cb78b8949d3b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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