One Hat Cyber Team
Your IP :
216.73.217.126
Server IP :
185.33.55.30
Server :
Linux cl30.webspacecontrol.com 5.14.0-611.38.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 10 17:21:28 EDT 2026 x86_64
Server Software :
Apache
PHP Version :
8.1.34
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
lib64
/
nagios
/
plugins
/
custom
/
View File Name :
check_supermicro_hw
#!/bin/bash STATUS_OK=0 STATUS_WARNING=1 STATUS_CRITICAL=2 STATUS_UNKNOWN=3 # Checking for SuperDoctor _SDT_BIN=$( which sdt 2>/dev/null) if [ -z "${_SDT_BIN}" ]; then echo "SuperDoctor binary (eg. /usr/sbin/sdt) not found!" exit ${STATUS_CRITICAL} fi div () # Arguments: dividend and divisor { if [ $2 -eq 0 ]; then echo division by 0; return 1; fi p=12 # precision c=${c:-0} # precision counter d=. # decimal separator r=$(($1/$2)); echo -n $r # result of division m=$(($r*$2)) [ $c -eq 0 ] && [ $m -ne $1 ] && echo -n $d [ $1 -eq $m ] || [ $c -eq $p ] && return d=$(($1-$m)) let c=c+1 div $(($d*10)) $2 | tr -d '-' } _RAWDATA="$( /usr/bin/sudo ${_SDT_BIN} | grep -A1000 'Monitored Item' | tail -n+3 | head -n-1 )" #_RAWDATA="$( ${_SDT_BIN} | grep -A1000 'Monitored Item' | tail -n+3 | head -n-1 )" if [ $( echo "${_RAWDATA}" | wc -l ) -lt 6 ]; then echo "CRITICAL - No data found" exit ${STATUS_CRITICAL} fi _SPEED_DATA="$( echo "${_RAWDATA}" | grep -i '^fan' )" ; _SPEED_DATA=${_SPEED_DATA//RPM/} ; _SPEED_DATA=${_SPEED_DATA//.0/} _VOLTAGE_DATA="$( echo "${_RAWDATA}" | grep '\( Voltage\| V[ 0-9.]\+ V\)' )" ; _VOLTAGE_DATA=${_VOLTAGE_DATA// V/} _TEMPERATURE_DATA="$( echo "${_RAWDATA}" | grep '\(Temperature\| Temp\)' )" ; _TEMPERATURE_DATA=${_TEMPERATURE_DATA// C/} ; _TEMPERATURE_DATA=${_TEMPERATURE_DATA//.0/} #echo "***************************" #echo "${_TEMPERATURE_DATA}" #echo "***************************" _STATUS_DATA="$( echo "${_RAWDATA}" | grep 'Status' )" _TEXT_OUTPUT='' _EXIT_STATUS=${STATUS_OK} _OLD_IFS="${IFS}" IFS=$'\n' for _CURR_LINE in ${_SPEED_DATA}; do # echo "Line: ${_CURR_LINE}" _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $1 }' | rev ) #_CURR_VALUE=199 _CURR_LIMIT_LOW=$( echo ${_CURR_LINE} | rev | awk '{ print $2 }' | rev ) if [ $( echo "${_CURR_VALUE}" | grep '[a-zA-Z]' | wc -l ) -gt 0 ]; then _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $2 }' | rev ) _CURR_LIMIT_LOW=$( echo ${_CURR_LINE} | rev | awk '{ print $3 }' | rev ) fi _CURR_LABEL=${_CURR_LINE:0:30} _CURR_LABEL=${_CURR_LABEL//Fan Speed/} _CURR_LABEL=${_CURR_LABEL// /} if [ $( echo "${_CURR_VALUE}" | grep -i warning | wc -l ) -gt 0 ] || [ ${_CURR_VALUE} -lt ${_CURR_LIMIT_LOW} ]; then _TEXT_OUTPUT=" ${_CURR_LABEL} ${_CURR_VALUE}rpm (<${_CURR_LIMIT_LOW}),${_TEXT_OUTPUT}" _EXIT_STATUS=${STATUS_CRITICAL} else _TEXT_OUTPUT="${_TEXT_OUTPUT}, ${_CURR_LABEL} ${_CURR_VALUE}rpm (>${_CURR_LIMIT_LOW})" fi done for _CURR_LINE in ${_VOLTAGE_DATA}; do # echo -n "Line: ${_CURR_LINE}" # _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $1 }' | rev | sed 's|\.||g' | sed 's|\b0||g' ) # _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $1 }' | rev | sed -n 's|.*\b\([\b-]*[0-9]\+\.[0-9][0-9]\).*|\1|p' | sed 's|\.||g' | sed 's|\b0||g' ) #' _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $1 }' | rev | tr -d '[a-zA-Z]' | sed 's|\([0-9]\+\)\.\([0-9][0-9]\).*|\1\2|g' | sed 's|\b0||g' ) #' #echo "_CURR_VALUE=${_CURR_VALUE}" #_CURR_VALUE=508 _CURR_LIMIT_LOW=$( echo ${_CURR_LINE} | rev | awk '{ print $2 }' | rev | tr -d '[a-zA-Z]' | sed 's|\([0-9]\+\)\.\([0-9][0-9]\).*|\1\2|g' | sed 's|\b0||g' ) #' _CURR_LIMIT_HIGH=$( echo ${_CURR_LINE} | rev | awk '{ print $3 }' | rev | tr -d '[a-zA-Z]' | sed 's|\([0-9]\+\)\.\([0-9][0-9]\).*|\1\2|g' | sed 's|\b0||g' ) #' _CURR_LABEL=${_CURR_LINE:0:28} _CURR_LABEL=${_CURR_LABEL//Voltage/} _CURR_LABEL=${_CURR_LABEL// /} if [ ${_CURR_VALUE} -gt ${_CURR_LIMIT_HIGH} ]; then _TEXT_OUTPUT=" ${_CURR_LABEL} HIGH: $(div ${_CURR_VALUE} 100)V (>$(div ${_CURR_LIMIT_HIGH} 100)),${_TEXT_OUTPUT}" _EXIT_STATUS=${STATUS_CRITICAL} elif [ ${_CURR_VALUE} -lt ${_CURR_LIMIT_LOW} ]; then _TEXT_OUTPUT=" ${_CURR_LABEL} LOW: $(div ${_CURR_VALUE} 100)V (<$(div ${_CURR_LIMIT_LOW} 100)),${_TEXT_OUTPUT}" _EXIT_STATUS=${STATUS_CRITICAL} else _TEXT_OUTPUT="${_TEXT_OUTPUT}, ${_CURR_LABEL} $(div ${_CURR_VALUE} 100)V ($(div ${_CURR_LIMIT_LOW} 100)-$(div ${_CURR_LIMIT_HIGH} 100))" fi done _TEXT_OUTPUT="$( echo ${_TEXT_OUTPUT} | sed 's|Voltage||g' | sed 's|oltage||g' )" for _CURR_LINE in ${_TEMPERATURE_DATA}; do # echo "Line: ${_CURR_LINE}" _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $1 }' | rev | cut -d'/' -f1 ) #_CURR_VALUE=86 _CURR_LIMIT_HIGH=$( echo ${_CURR_LINE} | rev | awk '{ print $2 }' | rev | cut -d'/' -f1 ) _CURR_LABEL=${_CURR_LINE:0:30} _CURR_LABEL=${_CURR_LABEL//Temperature/Temp} _CURR_LABEL=${_CURR_LABEL// /} if [ ${_CURR_VALUE} -gt ${_CURR_LIMIT_HIGH} ] 2>/dev/null; then _TEXT_OUTPUT=" ${_CURR_LABEL} HIGH: ${_CURR_VALUE}°C (>${_CURR_LIMIT_HIGH}),${_TEXT_OUTPUT}" _EXIT_STATUS=${STATUS_CRITICAL} else _TEXT_OUTPUT="${_TEXT_OUTPUT}, ${_CURR_LABEL} ${_CURR_VALUE}°C (<${_CURR_LIMIT_HIGH})" fi done for _CURR_LINE in ${_STATUS_DATA}; do # echo -n "Line: ${_CURR_LINE}" _CURR_VALUE=$( echo ${_CURR_LINE} | rev | awk '{ print $1 }' | rev ) #_CURR_VALUE="Not Good" # if [ $( echo "${_CURR_VALUE}" | grep -i 'Good' | wc -l ) -ne 1 ]; then _CURR_LABEL=${_CURR_LINE:0:30} _CURR_LABEL=${_CURR_LABEL// /} if [ "${_CURR_VALUE}" != 'Good' ]; then _TEXT_OUTPUT=" ${_CURR_LABEL}: ${_CURR_VALUE},${_TEXT_OUTPUT}" _EXIT_STATUS=${STATUS_CRITICAL} else _TEXT_OUTPUT="${_TEXT_OUTPUT}, ${_CURR_LABEL}: ${_CURR_VALUE}" fi done IFS="${_OLD_IFS}" if [ ${_EXIT_STATUS} -gt 0 ]; then _TEXT_OUTPUT=${_TEXT_OUTPUT/,,/, OK:} echo "CRITICAL${_TEXT_OUTPUT}" else echo "OK${_TEXT_OUTPUT}" fi exit ${_EXIT_STATUS}