1765 lines
103 KiB
Bash
1765 lines
103 KiB
Bash
AVERAGEPOWER(){
|
|
sensorid=${1}
|
|
daysback=${2}
|
|
|
|
if [[ "${daysback^^}" = *"M"* ]]; then
|
|
interval="${daysback::-1} MINUTE"
|
|
elif [[ "${daysback^^}" = *"H"* ]]; then
|
|
interval="${daysback::-1} HOUR"
|
|
elif [[ "${daysback^^}" = *"D"* ]]; then
|
|
interval="${daysback::-1} DAY"
|
|
elif [[ "${daysback}" =~ ^[0-9]+$ ]]; then
|
|
interval="${daysback} DAY"
|
|
fi
|
|
|
|
if [ "${3}" = "both" ]; then
|
|
logsfound_amp=0;
|
|
logsfound_watt=0;
|
|
total_amp=0
|
|
total_watt=0
|
|
while IFS=$'\t' read date amp watt ;do
|
|
if [ "${amp}" != "" ] && [ "${amp}" != "0" ] && [ "${amp}" != "0.00" ] && [ "${amp}" != "NULL" ] && [[ "${amp}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
|
|
total_amp=$(bc <<< "scale=2; ${total_amp}+${amp}")
|
|
((logsfound_amp++))
|
|
# echo "A:${amp}-${total_amp}=${average_amp}"
|
|
fi
|
|
if [ "${watt}" != "" ] && [ "${watt}" != "0" ] && [ "${watt}" != "0.00" ] && [ "${watt}" != "NULL" ] && [[ "${watt}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
|
|
total_watt=$(bc <<< "scale=2; ${total_watt}+${watt}")
|
|
((logsfound_watt++))
|
|
# echo "W:${watt}-${total_watt}=${average_watt}"
|
|
fi
|
|
done < <(${mysql_conn} -se "USE servermonitor; SELECT date,amp,watt from power_data WHERE sensorid=${sensorid} AND date >= DATE_SUB(NOW(), INTERVAL ${interval}) ORDER BY id DESC;")
|
|
if [ "${logsfound_watt}" != "0" ]; then
|
|
average_amp=$(bc <<< "scale=2; ${total_amp}/${logsfound_amp}")
|
|
average_watt=$(bc <<< "scale=2; ${total_watt}/${logsfound_watt}")
|
|
else
|
|
average_amp=0
|
|
average_watt=0
|
|
fi
|
|
echo "${average_amp}~${average_watt}"
|
|
else
|
|
logsfound=0;
|
|
total=0
|
|
[ "${3}" != "" ] && ptype=${3} || ptype=watt
|
|
while IFS=$'\t' read date ${ptype} ;do
|
|
if [ "${!ptype}" != "" ] && [ "${!ptype}" != "NULL" ]; then
|
|
total=$(bc <<< "scale=2; ${total}+${!ptype}")
|
|
((logsfound++))
|
|
fi
|
|
done < <(${mysql_conn} -se "USE servermonitor; SELECT date,${ptype} from power_data WHERE sensorid=${sensorid} AND date >= DATE_SUB(NOW(), INTERVAL ${interval}) ORDER BY id DESC;")
|
|
[ "${logsfound}" != "0" ] && average=$(bc <<< "scale=2; ${total}/${logsfound}") || average=0
|
|
echo ${average}
|
|
fi
|
|
}
|
|
|
|
CHECKPOWER(){
|
|
rm -f ${PW_TMPFOLDER}/*.hostpower*
|
|
REPORT=0
|
|
wspc=10
|
|
[ ${REPORT} -eq 0 ] && modstart=$(date +%s)
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-a|-avg) avgdays=${2};;
|
|
-o|-offsite) STYPE=offsite;;
|
|
-m|-mainsite) STYPE=mainsite;;
|
|
-k|-kyle) STYPE=kyle;;
|
|
-e|-esxi) PTYPE=esxi;;
|
|
-p|-power) PTYPE=power;;
|
|
-r|-report)
|
|
REPORT=1
|
|
unset idsCL idsBG idsST
|
|
idsCL=('')
|
|
idsBG=('')
|
|
idsST=('')
|
|
;;
|
|
esac
|
|
shift 1
|
|
done
|
|
if [ "${avgdays}" != "" ]; then
|
|
if [ "${avgdays}" = "0" ]; then
|
|
unset avgdays
|
|
elif [[ "${avgdays^^}" = *"M"* ]]; then
|
|
avgdays_disp="${avgdays::-1}Min"
|
|
elif [[ "${avgdays^^}" = *"H"* ]]; then
|
|
avgdays_disp="${avgdays::-1}Hr"
|
|
elif [[ "${avgdays^^}" = *"D"* ]]; then
|
|
avgdays_disp="${avgdays::-1}Day"
|
|
elif [[ "${avgdays}" =~ ^[0-9]+$ ]]; then
|
|
avgdays_disp="${avgdays}Day"
|
|
fi
|
|
# else
|
|
# avgdays=noavg
|
|
fi
|
|
|
|
if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "mainsite" ]) && [ "${PTYPE}" != "esxi" ]; then
|
|
[ ${REPORT} -eq 0 ] && echo
|
|
[ ${REPORT} -eq 0 ] && DIVIDER . yellow ${PRI_WIDTH}
|
|
echo -en "${idsCL[Yellow]}Mainsite Power Information"
|
|
[ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---" || echo
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
|
|
if [[ "${IP}" != "10.6.1"* ]]; then
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from 'Powerwall' ... "
|
|
|
|
INVSTATSINFO=$(curl -m 3 -s "http://${PW_INVERTER_IP}/stats.json")
|
|
if [ "${INVSTATSINFO}" != "" ]; then
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTV=${TEST_INPUTACV} || INPUTV=$(echo ${INVSTATSINFO} | jq '.inputs .inV')
|
|
INPUTA=`echo ${INVSTATSINFO} | jq '.inputs .inA'`
|
|
INV_ALARM=`echo ${INVSTATSINFO} | jq '.errors .Alms'`
|
|
[ "${INV_ALARM}" = "0" ] && INV_ALARM_disp="${idsCL[Green]}No Alarms (${INV_ALARM})" || INV_ALARM_disp="${idsCL[LightRed]}${PW_INVERTER_ALARMS[${INV_ALARM}]}"
|
|
INV_ERROR=`echo ${INVSTATSINFO} | jq '.errors .Err'`
|
|
[ "${INV_ERROR}" = "0" ] && INV_ERROR_disp="${idsCL[Green]}No Errors (${INV_ERROR})" || INV_ERROR_disp="${idsCL[LightRed]}${PW_INVERTER_ERRORS[${INV_ERROR}]}"
|
|
INV_STATE=`echo ${INVSTATSINFO} | jq '.stats .invSTATES'`
|
|
[ "${INV_STATE}" != "0" ] && INV_STATE_disp="${idsCL[Green]}${PW_INVERTER_STATES[${INV_STATE}]}" || INV_STATE_disp="${idsCL[LightRed]}${PW_INVERTER_STATES[${INV_STATE}]}"
|
|
INV_MODE=`echo ${INVSTATSINFO} | jq '.stats .power'`
|
|
([ "${INV_MODE}" != "3" ] && [ "${INV_MODE}" != "4" ] && [ "${INV_MODE}" != "E" ]) && INV_MODE_disp="${idsCL[Green]}${PW_INVERTER_MODES[${INV_MODE}]}" || INV_MODE_disp="${idsCL[LightRed]}${PW_INVERTER_MODES[${INV_MODE}]}"
|
|
OUTPUTV=`echo ${INVSTATSINFO} | jq '.outputs .outV'`
|
|
OUTPUTV2=`echo "scale=2; ${OUTPUTV}/2" | tr -d $'\r' | bc`
|
|
OUTPUTA=`echo ${INVSTATSINFO} | jq '.outputs .outA'`
|
|
OUTPUTA2=`echo "scale=2; ${OUTPUTA}*2" | tr -d $'\r' | bc`
|
|
OUTPUTW=`echo ${INVSTATSINFO} | jq '.outputs .outW'`
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTV=${TEST_BATTVOLT} || BATTV=`echo ${INVSTATSINFO} | jq '.inputs .battV'`
|
|
BATTA=`echo ${INVSTATSINFO} | jq '.inputs .xfA'`
|
|
BATTLIFE=`echo "scale=2; (${BATTV}*100)/${BATT_FULL}" | tr -d $'\r' | bc`
|
|
if (( $(bc <<<"${BATTV} >= ${FLOAT_CHARGE}") )) || ([ "${PW_INVERTER_MODES[${INV_MODE}]}" == "AC Input" ] && (( $(bc <<<"${BATTA} < -2") ))); then
|
|
if (( $(bc <<<"${BATTV} >= ${BULK_CHARGE}") )) || ([ "${PW_INVERTER_MODES[${INV_MODE}]}" == "AC Input" ] && (( $(bc <<<"${BATTA} < -2") ))); then
|
|
BATTA_disp="${idsCL[Green]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Bulk Charging"
|
|
else
|
|
BATTA_disp="${idsCL[Green]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Float Charging"
|
|
fi
|
|
elif [ "${BATTA}" = "-0.1" ] || [ "${BATTA}" = "-0.2" ] || [ "${BATTA}" = "-0.3" ]; then
|
|
BATTA_disp="${idsCL[LightCyan]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Standby"
|
|
else
|
|
BATTA_disp="${idsCL[LightRed]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Discharging"
|
|
fi
|
|
fi
|
|
# if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
|
|
SVRRM_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.2.2.1.3.1.1 | sed 's/.*: //')
|
|
SVRRM_VOLTIN=`echo "scale=2; ${SVRRM_VOLTIN}/10" | tr -d $'\r' | bc`
|
|
SVRRM_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.2.1.1 | sed 's/.*: //')
|
|
SVRRM_VOLTOUT=`echo "scale=2; ${SVRRM_VOLTOUT}/10" | tr -d $'\r' | bc`
|
|
|
|
SVRRM_WATT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.4.1.1 | sed 's/.*: //')
|
|
SVRRM_AMP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.3.1.1 | sed 's/.*: //')
|
|
SVRRM_AMP=`echo "scale=2; ${SVRRM_AMP}/100" | tr -d $'\r' | bc`
|
|
|
|
AIRCON_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['ServerRoom-AC']}:8888/status/${PW_SENSOR_DEVICEID['ServerRoom-AC']} | jq '.dps')
|
|
if [ "${AIRCON_INFO}" != "" ]; then
|
|
AIRCON_AMP=$(echo "${AIRCON_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
AIRCON_AMP=$(ROUND_NUMBER $(echo "scale=3; ${AIRCON_AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
AIRCON_WATT=$(echo "${AIRCON_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
AIRCON_WATT=$(echo "scale=1; ${AIRCON_WATT}/10" | tr -d $'\r' | bc -l)
|
|
else
|
|
AIRCON_AMP=0
|
|
AIRCON_WATT=0
|
|
fi
|
|
|
|
SVRRM_AMP_WAC=$(echo "scale=2; ${SVRRM_AMP}+${AIRCON_AMP}" | tr -d $'\r' | bc -l)
|
|
SVRRM_WATT_WAC=$(echo "scale=2; ${SVRRM_WATT}+${AIRCON_WATT}" | tr -d $'\r' | bc -l)
|
|
# fi
|
|
#
|
|
# if [ "$(CHECK_HOST ${PW_APCPDU_IP})" != "false" ]; then
|
|
APCPDU_AMP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1 | sed 's/.*: //')
|
|
APCPDU_AMP=`echo "scale=2; ${APCPDU_AMP}/10" | tr -d $'\r' | bc`
|
|
APCPDU_WATT2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.1.16.0 | sed 's/.*: //')
|
|
APCPDU_WATT=`echo "scale=2; ${APCPDU_AMP}*${SVRRM_VOLTOUT}" | tr -d $'\r' | bc`
|
|
# fi
|
|
if [ "${SVRRM_VOLTOUT}" != "" ]; then
|
|
if [ "${APCPDU_AMP}" != "" ]; then
|
|
NETRK_AMP=`echo "scale=2; ${SVRRM_AMP}-${APCPDU_AMP}" | tr -d $'\r' | bc`
|
|
NETRK_WATT=`echo "scale=2; ${SVRRM_WATT}-${APCPDU_WATT}" | tr -d $'\r' | bc`
|
|
NETRK_WATT2=`echo "scale=2; ${SVRRM_WATT}-${APCPDU_WATT2}" | tr -d $'\r' | bc`
|
|
fi
|
|
VOLT_DROP=`echo "scale=1; ${OUTPUTV2}-${SVRRM_VOLTIN}" | tr -d $'\r' | bc`
|
|
fi
|
|
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
echo -e "${idsCL[White]}Inverter State ${idsCL[Default]}: ${INV_STATE_disp}"
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo -e "${idsCL[White]}Inverter Mode ${idsCL[Default]}: ${INV_MODE_disp}"
|
|
echo -e "${idsCL[White]}Inverter Alarms ${idsCL[Default]}: ${INV_ALARM_disp}"
|
|
echo -e "${idsCL[White]}Inverter Errors ${idsCL[Default]}: ${INV_ERROR_disp}"
|
|
echo
|
|
fi
|
|
echo -en "${idsCL[White]}Inverter Input Volts ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${INPUTV}`'V"
|
|
[ ${TESTMODE} -eq 1 ] && echo -e " ${idsCL[Yellow]}***TEST MODE***" || echo ""
|
|
echo -e "${idsCL[White]}Inverter Input Amps ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${INPUTA}`'A"
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo
|
|
echo -e "${idsCL[White]}Inverter Output Volts ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OUTPUTV}`'V / `IDS_NUMBER_FORMAT ${OUTPUTV2}`'V"
|
|
echo -e "${idsCL[White]}Inverter Output Amps ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OUTPUTA}`'A / `IDS_NUMBER_FORMAT ${OUTPUTA2}`'A"
|
|
echo -e "${idsCL[White]}Inverter Output Watts ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OUTPUTW} 0`'W"
|
|
echo
|
|
fi
|
|
|
|
echo -en "${idsCL[White]}Battery Voltage ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${BATTV}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)"
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && echo -e " ${idsCL[Yellow]}***TEST MODE***" || echo ""
|
|
echo -e "${idsCL[White]}Battery Amps Chg/DChg ${idsCL[Default]}: ${BATTA_disp}${idsCL[Default]}"
|
|
echo
|
|
echo -e "${idsCL[White]}Server Room Voltage IN ${idsCL[Default]}: ${idsCL[Green]}${SVRRM_VOLTIN}'V${idsCL[Default]}"
|
|
echo -e "${idsCL[White]}Server Room Voltage OUT ${idsCL[Default]}: ${idsCL[Green]}${SVRRM_VOLTOUT}'V${idsCL[Default]}"
|
|
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[White]}Voltage Drop ${idsCL[Default]}: ${idsCL[LightRed]}${VOLT_DROP}'V${idsCL[Default]}"
|
|
|
|
# echo
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
[ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---"
|
|
echo -en "${idsCL[LightCyan]}Totals Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
|
|
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo -en "\r\033[K"
|
|
AD=$(IDS_NUMBER_FORMAT ${NETRK_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsCL[White]}Network Rack ~est~ ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${NETRK_WATT} 1 yes`'W"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating NetworkRack Averages ... "
|
|
NETRK_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['network-rack']} ${avgdays} both)
|
|
NETRK_AMP_avg=$(echo ${NETRK_avg} | cut -d'~' -f 1)
|
|
NETRK_WATT_avg=$(echo ${NETRK_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${NETRK_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 5`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${NETRK_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${idsCL[LightYellow]}${spcA}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${NETRK_WATT_avg} 1 yes`'W"
|
|
else
|
|
echo
|
|
fi
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${APCPDU_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsCL[White]}Server Rack ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${APCPDU_WATT} 1 yes`'W"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Server Rack Averages ... "
|
|
APCPDU_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['server-rack']} ${avgdays} both)
|
|
APCPDU_AMP_avg=$(echo ${APCPDU_avg} | cut -d'~' -f 1)
|
|
APCPDU_WATT_avg=$(echo ${APCPDU_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${APCPDU_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 5`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${APCPDU_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${idsCL[LightYellow]}${spcA}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${APCPDU_WATT_avg} 1 yes`'W"
|
|
else
|
|
echo
|
|
fi
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsBG[Blue]}${idsCL[White]}Equipment Subtotal ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SVRRM_WATT} 1 yes`'W ${idsBG[Default]}"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Equipment Subtotal Averages ... "
|
|
SVRRM_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['total']} ${avgdays} both)
|
|
SVRRM_AMP_avg=$(echo ${SVRRM_avg} | cut -d'~' -f 1)
|
|
SVRRM_WATT_avg=$(echo ${SVRRM_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${SVRRM_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${idsBG[Blue]}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${SVRRM_WATT_avg} 1 yes`'W ${idsBG[Default]}"
|
|
else
|
|
echo -e "${idsBG[Default]}"
|
|
fi
|
|
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${AIRCON_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsCL[White]}Air Conditioner ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${AIRCON_WATT} 1 yes`'W"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Air Conditioner Averages ... "
|
|
AIRCON_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ServerRoom-AC']} ${avgdays} both)
|
|
AIRCON_AMP_avg=$(echo ${AIRCON_avg} | cut -d'~' -f 1)
|
|
AIRCON_WATT_avg=$(echo ${AIRCON_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${AIRCON_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 5`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${AIRCON_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${idsCL[LightYellow]}${spcA}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${AIRCON_WATT_avg} 1 yes`'W"
|
|
else
|
|
echo
|
|
fi
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP_WAC} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsBG[Blue]}${idsCL[White]}Server Room Total w/AIR ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SVRRM_WATT_WAC} 1 yes`'W ${idsBG[Default]}"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Server Room w/AIR Total Averages ... "
|
|
|
|
SVRRM_WAC_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['total-wac']} ${avgdays} both)
|
|
SVRRM_AMP_WAC_avg=$(echo ${SVRRM_WAC_avg} | cut -d'~' -f 1)
|
|
SVRRM_WATT_WAC_avg=$(echo ${SVRRM_WAC_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${SVRRM_WATT_WAC} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP_WAC_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${idsBG[Blue]}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${SVRRM_WATT_WAC_avg} 1 yes`'W ${idsBG[Default]}"
|
|
else
|
|
echo -e "${idsBG[Default]}"
|
|
fi
|
|
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
|
|
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
fi
|
|
#########################################################################################################
|
|
else ############### KYLE #########################################################################################################
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from 'UPS' ... "
|
|
|
|
|
|
if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
|
|
## VERTIV
|
|
UPS_STATUS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.3.9 | sed 's/.*: //')
|
|
UPS_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //')
|
|
UPS_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.2.1 | sed 's/.*: //')
|
|
UPS_LOAD=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.2.2.1.11.3 | sed 's/.*: //')
|
|
UPS_LOAD=`echo "scale=2; ${UPS_LOAD}/10" | tr -d $'\r' | bc`
|
|
UPS_AMPSIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.3.3.1.4.1 | sed 's/.*: //')\
|
|
UPS_AMPSIN=`echo "scale=2; ${UPS_AMPSIN}/10" | tr -d $'\r' | bc`
|
|
UPS_AMPSOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.3.1 | sed 's/.*: //')\
|
|
UPS_AMPSOUT=`echo "scale=2; ${UPS_AMPSOUT}/10" | tr -d $'\r' | bc`
|
|
UPS_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.2.2.1.8.3 | sed 's/.*: //')
|
|
UPS_BATT_RUNTIME=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.18.0 | sed 's/.*: //')
|
|
UPS_BATT_VOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.10.0 | sed 's/.*: //')
|
|
UPS_BATT_CAP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.19.0 | sed 's/.*: //')
|
|
|
|
# ## APC
|
|
# UPS_STATUS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.1.0 | sed 's/.*: //')
|
|
# UPS_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //')
|
|
# UPS_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.2.1 | sed 's/.*: //')
|
|
# UPS_LOAD=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.5.1 | sed 's/.*: //')
|
|
# UPS_AMPSIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.3.3.1.4.1 | sed 's/.*: //')\
|
|
# #UPS_AMPSIN=`echo "scale=2; ${UPS_AMPSIN}/10" | tr -d $'\r' | bc`
|
|
# UPS_AMPSOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.3.1 | sed 's/.*: //')\
|
|
# UPS_AMPSOUT=`echo "scale=2; ${UPS_AMPSOUT}/10" | tr -d $'\r' | bc`
|
|
# # UPS_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.4.1 | sed 's/.*: //')
|
|
# UPS_WATTS=`echo "scale=2; ${UPS_VOLTOUT}*${UPS_AMPSOUT}" | tr -d $'\r' | bc`
|
|
# UPS_BATT_RUNTIME=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.3.0 | sed 's/.*: //')
|
|
# UPS_BATT_VOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.5.0 | sed 's/.*: //')
|
|
# UPS_BATT_VOLT=`echo "scale=2; ${UPS_BATT_VOLT}/10" | tr -d $'\r' | bc`
|
|
# UPS_BATT_CAP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.4.0 | sed 's/.*: //')
|
|
|
|
[ "${PW_UPS_STATES[${UPS_STATUS}]}" != "" ] && UPS_DISP_STATUS=${PW_UPS_STATES[${UPS_STATUS}]} || UPS_DISP_STATUS=${UPS_STATUS}
|
|
|
|
declare -A UPS_MISC
|
|
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
|
|
UPS_MISC[${mSENSOR}]=$(GET_TUYA_POWER ${mSENSOR})
|
|
done
|
|
|
|
fi
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
|
|
echo -e "${idsCL[White]}UPS Status ${idsCL[Default]}: ${idsCL[LightCyan]}${UPS_DISP_STATUS}${idsCL[Default]}"
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo
|
|
echo -en "${idsCL[LightCyan]} Amps Volts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps" || echo ""
|
|
|
|
AD1=$(IDS_NUMBER_FORMAT ${UPS_AMPSIN} 2 yes); c=0; spc1=''; spca=`expr ${wspc} - ${#AD1}`; until [ ${c} = ${spca} ]; do spc1="${spc1} "; ((c++)); done
|
|
echo -en "${idsCL[White]}UPS Input ${idsCL[Default]}: ${idsCL[Green]}${AD1}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTIN}`'V${idsCL[Default]}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... "
|
|
AMP_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ups-input']} ${avgdays} amp)
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
echo -e "${idsCL[White]}UPS Input ${idsCL[Default]}: ${idsCL[Green]}${AD1}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTIN}`'V${idsCL[LightYellow]} ${AMP_avg}'A${idsCL[Default]}"
|
|
else
|
|
echo ""
|
|
fi
|
|
|
|
AD2=$(IDS_NUMBER_FORMAT ${UPS_AMPSOUT} 2 yes); c=0; spc2=''; spca=`expr ${wspc} - ${#AD2}`; until [ ${c} = ${spca} ]; do spc2="${spc2} "; ((c++)); done
|
|
echo -en "${idsCL[White]}UPS Output ${idsCL[Default]}: ${idsCL[Green]}${AD2}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTOUT}`'V${idsCL[Default]}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... "
|
|
AMP_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ups-output']} ${avgdays} amp)
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
echo -e "${idsCL[White]}UPS Output ${idsCL[Default]}: ${idsCL[Green]}${AD2}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTOUT}`'V${idsCL[LightYellow]} ${AMP_avg}'A${idsCL[Default]}"
|
|
else
|
|
echo ""
|
|
fi
|
|
|
|
echo
|
|
fi
|
|
echo -en "${idsCL[White]}UPS Load Usage ${idsCL[Default]}: ${idsCL[Green]}${UPS_LOAD}'%${idsCL[Default]}"
|
|
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightCyan]} Watts" || echo ""
|
|
|
|
echo -en "${idsCL[White]}UPS Watts ${idsCL[Default]}: ${idsCL[Green]}${UPS_WATTS}'W${idsCL[Default]}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... "
|
|
WATT_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ups-output']} ${avgdays} watt)
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
echo -e "${idsCL[White]}UPS Watts ${idsCL[Default]}: ${idsCL[Green]}${UPS_WATTS}'W${idsCL[LightYellow]} ${WATT_avg}'W${idsCL[Default]}"
|
|
else
|
|
echo ""
|
|
fi
|
|
[ ${REPORT} -eq 0 ] && echo
|
|
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[White]}UPS Battery Voltage ${idsCL[Default]}: ${idsCL[Green]}${UPS_BATT_VOLT}'V${idsCL[Default]}"
|
|
echo -e "${idsCL[White]}UPS Battery Capacity ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${UPS_BATT_CAP}`'%${idsCL[Default]}"
|
|
echo -e "${idsCL[White]}UPS Battery Runtime ${idsCL[Default]}: ${idsCL[Green]}${UPS_BATT_RUNTIME}'mins${idsCL[Default]}"
|
|
[ ${REPORT} -eq 0 ] && echo
|
|
|
|
TOTAL_MISC_WATTS=0; TOTAL_MISC_AMPS=0
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo -en "${idsCL[LightCyan]}Misc Sensors Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo -e " Volts"
|
|
fi
|
|
for mSENSOR in "${!UPS_MISC[@]}"; do
|
|
IFS=: read -r AMP WATT VOLT <<< ${UPS_MISC[${mSENSOR}]}; unset IFS
|
|
TOTAL_MISC_WATTS=`echo "scale=2; ${TOTAL_MISC_WATTS}+${WATT}" | tr -d $'\r' | bc`
|
|
TOTAL_MISC_AMPS=`echo "scale=2; ${TOTAL_MISC_AMPS}+${AMP}" | tr -d $'\r' | bc`
|
|
AD1="${PW_MISCSENSOR_DESC[${mSENSOR}]}"; c=0; spc1=''; spca=`expr 25 - ${#AD1}`; until [ ${c} = ${spca} ]; do spc1="${spc1} "; ((c++)); done
|
|
AD2=$(IDS_NUMBER_FORMAT ${AMP} 2 yes); c=0; spc2=''; spca=`expr ${wspc} - ${#AD2}`; until [ ${c} = ${spca} ]; do spc2="${spc2} "; ((c++)); done
|
|
AD3=$(IDS_NUMBER_FORMAT ${WATT} 1 yes)
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Default]}${AD1}${spc1}: ${idsCL[Green]}${AD2}'A${spc2}${AD3}'W"
|
|
if [ "${avgdays}" == "" ]; then
|
|
c=0; spc3=''; spca=`expr ${wspc} - ${#AD3}`; until [ ${c} = ${spca} ]; do spc3="${spc3} "; ((c++)); done
|
|
[ ${REPORT} -eq 0 ] && echo -e "${spc3}${VOLT}'V${idsCL[Default]}"
|
|
else
|
|
echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... "
|
|
avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID[${mSENSOR}]} ${avgdays} both)
|
|
AMP_avg=$(echo ${avg} | cut -d'~' -f 1)
|
|
WATT_avg=$(echo ${avg} | cut -d'~' -f 2)
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
echo -en "${idsCL[Default]}${AD1}${spc1}: ${idsCL[Green]}${AD2}'A${spc2}${AD3}'W"
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${AMP_avg} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${WATT_avg} 1 yes`'W"
|
|
fi
|
|
done
|
|
|
|
# DIVIDER . lightCyan ${PRI_WIDTH}
|
|
# [ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---"
|
|
# echo -en "${idsCL[LightCyan]}Totals Amps Watts"
|
|
# [ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
|
|
# AW=${TOTAL_MISC_WATTS}
|
|
# AD=$(IDS_NUMBER_FORMAT ${TOTAL_MISC_AMPS} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
# echo -en "${idsCL[White]}Mainsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${AW} 1 yes`'W"
|
|
# if [ "${avgdays}" != "" ]; then
|
|
# echo -en "${idsCL[Yellow]} Calculating Mainsite Equipment Total Averages ... "
|
|
# UPS_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['mainsite-ups']} ${avgdays} both)
|
|
# UPS_AMP_avg=$(echo ${UPS_avg} | cut -d'~' -f 1)
|
|
# UPS_WATT_avg=$(echo ${UPS_avg} | cut -d'~' -f 2)
|
|
# echo -en "\r\033[K"
|
|
# echo -en "${idsCL[White]}Mainsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${AW} 1 yes`'W"
|
|
#
|
|
# AD=$(IDS_NUMBER_FORMAT ${OFFSITE_AMP_avg} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
# echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${OFFSITE_WATT_avg} 1 yes`'W"
|
|
# else
|
|
# echo
|
|
# fi
|
|
|
|
|
|
fi
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[Default]}"
|
|
|
|
fi
|
|
|
|
if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "offsite" ]) && [ "${PTYPE}" != "esxi" ] && [[ "${IP}" != "10.6.1"* ]]; then
|
|
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
echo -en "${idsCL[Yellow]}Offsite Power Information"
|
|
[ "${avgdays}" != "" ] && echo -e " ${idsCL[LightYellow]}--${avgdays_disp}-Averages---" || echo
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from 'Offsite' ... "
|
|
|
|
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && upsinfo=$(upsc offsite-ups 2>&1) || upsinfo=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} 'upsc offsite-ups 2>&1')
|
|
if [ "$(echo "${upsinfo}" | grep 'input.voltage:')" != "" ]; then
|
|
OFFSITE_STATUS=$(echo "${upsinfo}" | grep 'ups.status:' | sed 's/.*: //' | tr -d $'\r')
|
|
[ "${PW_OFFSITE_UPS_CODES[${OFFSITE_STATUS}]}" != "" ] && OFFSITE_STATUS=${PW_OFFSITE_UPS_CODES[${OFFSITE_STATUS}]} || OFFSITE_STATUS=${OFFSITE_STATUS}
|
|
OFFSITE_VOLTIN=$(echo "${upsinfo}" | grep 'input.voltage:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_VOLTOUT=$(echo "${upsinfo}" | grep 'output.voltage:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_LOAD=$(echo "${upsinfo}" | grep 'ups.load:' | sed 's/.*: //' | tr -d $'\r')
|
|
# OFFSITE_WATTS=`echo "scale=2; $(echo "scale=2; ${OFFSITE_LOAD}/100" | tr -d $'\r' | bc)*$(echo "${upsinfo}" | grep 'ups.realpower.nominal:' | sed 's/.*: //')" | tr -d $'\r' | bc`
|
|
# OFFSITE_AMPS=`echo "scale=2; ${OFFSITE_WATTS}/${OFFSITE_VOLTOUT}" | tr -d $'\r' | bc`
|
|
# (( $(bc <<<"${OFFSITE_AMPS} < 1") )) && [[ "${OFFSITE_AMPS}" = *"."* ]] && OFFSITE_AMPS="0${OFFSITE_AMPS}"
|
|
OFFSITE_BATT_RUNTIME=$(echo "${upsinfo}" | grep 'battery.runtime:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_BATT_RUNTIME=`echo "scale=2; ${OFFSITE_BATT_RUNTIME}/60" | tr -d $'\r' | bc`
|
|
OFFSITE_BATT_VOLT=$(echo "${upsinfo}" | grep 'battery.voltage:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_BATT_CAP=$(echo "${upsinfo}" | grep 'battery.charge:' | sed 's/.*: //' | tr -d $'\r')
|
|
|
|
POWER_STRIP_DATA=$(kasa --type strip --json --host ${PW_OFFSITE_POWER_STRIP} energy)
|
|
OFFSITE_WATTS=$(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l)
|
|
OFFSITE_AMPS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.current_ma')/1000" | tr -d $'\r' | bc -l))
|
|
OFFSITE_VOLTS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.voltage_mv')/1000" | tr -d $'\r' | bc -l))
|
|
|
|
declare -A OFFSITE_MISC
|
|
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
|
|
OFFSITE_MISC[${mSENSOR}]=$(GET_KASA_POWER ${mSENSOR})
|
|
done
|
|
|
|
fi
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
|
|
echo -e "${idsCL[White]}UPS Status ${idsCL[Default]}: ${idsCL[LightCyan]}${OFFSITE_STATUS}${idsCL[Default]}"
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo
|
|
echo -e "${idsCL[White]}UPS Voltage In ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_VOLTIN}`'V${idsCL[Default]}"
|
|
echo -e "${idsCL[White]}UPS Voltage Out ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_VOLTOUT}`'V${idsCL[Default]}"
|
|
fi
|
|
echo -e "${idsCL[White]}UPS Load Usage ${idsCL[Default]}: ${idsCL[Green]}${OFFSITE_LOAD}'%${idsCL[Default]}"
|
|
[ ${REPORT} -eq 0 ] && echo
|
|
echo -e "${idsCL[White]}UPS Battery Capacity ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_BATT_CAP}`'%${idsCL[Default]}"
|
|
echo -e "${idsCL[White]}UPS Battery Runtime ${idsCL[Default]}: ${idsCL[Green]}${OFFSITE_BATT_RUNTIME}'mins${idsCL[Default]}"
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo -e "${idsCL[White]}UPS Battery Voltage ${idsCL[Default]}: ${idsCL[Green]}${OFFSITE_BATT_VOLT}'V${idsCL[Default]}"
|
|
echo
|
|
fi
|
|
|
|
TOTAL_MISC_WATTS=0; TOTAL_MISC_AMPS=0
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo -en "${idsCL[LightCyan]}Misc Sensors Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo -e " Volts"
|
|
fi
|
|
for mSENSOR in "${!OFFSITE_MISC[@]}"; do
|
|
IFS=: read -r AMP WATT VOLT <<< ${OFFSITE_MISC[${mSENSOR}]}; unset IFS
|
|
TOTAL_MISC_WATTS=`echo "scale=2; ${TOTAL_MISC_WATTS}+${WATT}" | tr -d $'\r' | bc`
|
|
TOTAL_MISC_AMPS=`echo "scale=2; ${TOTAL_MISC_AMPS}+${AMP}" | tr -d $'\r' | bc`
|
|
AD1="${PW_MISCSENSOR_DESC[${mSENSOR}]}"; c=0; spc1=''; spca=`expr 25 - ${#AD1}`; until [ ${c} = ${spca} ]; do spc1="${spc1} "; ((c++)); done
|
|
AD2=$(IDS_NUMBER_FORMAT ${AMP} 2 yes); c=0; spc2=''; spca=`expr ${wspc} - ${#AD2}`; until [ ${c} = ${spca} ]; do spc2="${spc2} "; ((c++)); done
|
|
AD3=$(IDS_NUMBER_FORMAT ${WATT} 2 yes)
|
|
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
echo -en "${idsCL[Default]}${AD1}${spc1}: ${idsCL[Green]}${AD2}'A${spc2}${AD3}'W"
|
|
if [ "${avgdays}" == "" ]; then
|
|
c=0; spc3=''; spca=`expr ${wspc} - ${#AD3}`; until [ ${c} = ${spca} ]; do spc3="${spc3} "; ((c++)); done
|
|
[ ${REPORT} -eq 0 ] && echo -e "${spc3}${VOLT}'V${idsCL[Default]}"
|
|
else
|
|
echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... "
|
|
# AVERAGEPOWER ${PW_POWERSENSOR_ID[${mSENSOR}]} ${avgdays} both
|
|
avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID[${mSENSOR}]} ${avgdays} both)
|
|
AMP_avg=$(echo ${avg} | cut -d'~' -f 1)
|
|
WATT_avg=$(echo ${avg} | cut -d'~' -f 2)
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
echo -en "${idsCL[Default]}${AD1}${spc1}: ${idsCL[Green]}${AD2}'A${spc2}${AD3}'W"
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${AMP_avg} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${WATT_avg} 2 yes`'W"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
[ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---"
|
|
echo -en "${idsCL[LightCyan]}Totals Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo -e " Volts"
|
|
if (( $(bc <<<"${OFFSITE_WATTS} < ${TOTAL_MISC_WATTS}") )); then
|
|
AW=$(IDS_NUMBER_FORMAT ${TOTAL_MISC_WATTS} 2 yes)
|
|
AD=${TOTAL_MISC_AMPS}
|
|
else
|
|
AW=$(IDS_NUMBER_FORMAT ${OFFSITE_WATTS} 2 yes)
|
|
AD=${OFFSITE_AMPS}
|
|
fi
|
|
AD=$(IDS_NUMBER_FORMAT ${AD} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -en "${idsCL[White]}Offsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}${AW}'W"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Offsite Equipment Total Averages ... "
|
|
OFFSITE_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['offsite-ups']} ${avgdays} both)
|
|
OFFSITE_AMP_avg=$(echo ${OFFSITE_avg} | cut -d'~' -f 1)
|
|
OFFSITE_WATT_avg=$(echo ${OFFSITE_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
echo -en "${idsCL[White]}Offsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}${AW}'W"
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${OFFSITE_AMP_avg} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${OFFSITE_WATT_avg} 2 yes`'W"
|
|
else
|
|
c=0; spc3=''; spca=`expr ${wspc} - ${#AW}`; until [ ${c} = ${spca} ]; do spc3="${spc3} "; ((c++)); done
|
|
echo -e "${spc3}${OFFSITE_VOLTS}'V${idsCL[Default]}"
|
|
fi
|
|
|
|
# echo -en "${idsCL[White]}Total Amps ${idsCL[Default]}: ${idsCL[Green]}${AD}'A ${idsCL[Default]}~ est${idsCL[Green]}${idsCL[Default]}"
|
|
# [ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} `IDS_NUMBER_FORMAT ${OFFSITE_AMP_avg}`'A" || echo -e "${idsCL[Default]}"
|
|
# echo -en "${idsCL[White]}Total Wattage ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_WATTS} 0`'W ${idsCL[Default]}~ est"
|
|
# [ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} `IDS_NUMBER_FORMAT ${OFFSITE_WATT_avg} 0`'W" || echo -e "${idsCL[Default]}\n"
|
|
#
|
|
fi
|
|
|
|
########## KYLE #############
|
|
if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "kyle" ]) && [ "${PTYPE}" != "esxi" ] && [[ "${IP}" != "10.6.1"* ]]; then
|
|
echo
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
echo -en "${idsCL[Yellow]}Kyle's Power Information"
|
|
[ "${avgdays}" != "" ] && echo -e " ${idsCL[LightYellow]}--${avgdays_disp}-Averages---" || echo
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
echo -en "${idsCL[LightCyan]} Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from Kyle's Equipment ... "
|
|
|
|
KYLE_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-Power']}:8888/status/${PW_SENSOR_DEVICEID['KP-Power']} | jq '.dps')
|
|
if [ "${KYLE_INFO}" != "" ]; then
|
|
KYLE_AMP=$(echo "${KYLE_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
KYLE_AMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
KYLE_WATT=$(echo "${KYLE_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l)
|
|
else
|
|
KYLE_AMP=0
|
|
KYLE_WATT=0
|
|
fi
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${KYLE_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsCL[White]}Outlet #7 Total Power ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${KYLE_WATT} 1 yes`'W ${idsCL[Default]}"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Power Averages ... "
|
|
|
|
KYLE_POWER_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['KP-Power']} ${avgdays} both)
|
|
KYLE_AMP_avg=$(echo ${KYLE_POWER_avg} | cut -d'~' -f 1)
|
|
KYLE_WATT_avg=$(echo ${KYLE_POWER_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${KYLE_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${KYLE_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${KYLE_WATT_avg} 1 yes`'W ${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Default]}"
|
|
fi
|
|
|
|
KYLE_SASINFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-SAS']}:8888/status/${PW_SENSOR_DEVICEID['KP-SAS']} | jq '.dps')
|
|
if [ "${KYLE_INFO}" != "" ]; then
|
|
KYLE_SASAMP=$(echo "${KYLE_SASINFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
KYLE_SASAMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_SASAMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
KYLE_SASWATT=$(echo "${KYLE_SASINFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
KYLE_SASWATT=$(echo "scale=1; ${KYLE_SASWATT}/10" | tr -d $'\r' | bc -l)
|
|
else
|
|
KYLE_SASAMP=0
|
|
KYLE_SASWATT=0
|
|
fi
|
|
|
|
AD=$(IDS_NUMBER_FORMAT ${KYLE_SASAMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsCL[White]}Outlet #8 KP SAS Power ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${KYLE_SASWATT} 1 yes`'W ${idsCL[Default]}"
|
|
echo -en "${MSG}"
|
|
if [ "${avgdays}" != "" ]; then
|
|
echo -en "${idsCL[Yellow]} Calculating Power Averages ... "
|
|
|
|
KYLE_SASPOWER_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['KP-SAS']} ${avgdays} both)
|
|
KYLE_SASAMP_avg=$(echo ${KYLE_SASPOWER_avg} | cut -d'~' -f 1)
|
|
KYLE_SASWATT_avg=$(echo ${KYLE_SASPOWER_avg} | cut -d'~' -f 2)
|
|
echo -en "\r\033[K"
|
|
|
|
AS=$(IDS_NUMBER_FORMAT ${KYLE_SASWATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
|
|
AD=$(IDS_NUMBER_FORMAT ${KYLE_SASAMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
|
|
echo -e "${MSG}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${KYLE_SASWATT_avg} 1 yes`'W ${idsCL[Default]}"
|
|
else
|
|
echo -e "${idsCL[Default]}"
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[Default]}"
|
|
|
|
if [ "${PTYPE}" != "power" ]; then
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
echo -e "${idsCL[Yellow]}ESXi Host Power Information"
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
[ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---"
|
|
echo -en "${idsCL[LightCyan]} Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
|
|
SENSOR_TOTAL_WATTS_MAINSITE=0
|
|
SENSOR_TOTAL_AMPS_MAINSITE=0
|
|
SENSOR_TOTAL_WATTS_OFFSITE=0
|
|
SENSOR_TOTAL_AMPS_OFFSITE=0
|
|
SENSOR_TOTAL_WATTS_KYLE=0
|
|
SENSOR_TOTAL_AMPS_KYLE=0
|
|
SENSOR_TOTAL_WATTS=0
|
|
SENSOR_TOTAL_AMPS=0
|
|
if [ "${avgdays}" != "" ]; then
|
|
AVERAGE_WATTS_MAINSITE=0
|
|
AVERAGE_AMPS_MAINSITE=0
|
|
AVERAGE_WATTS_OFFSITE=0
|
|
AVERAGE_AMPS_OFFSITE=0
|
|
AVERAGE_WATTS_KYLE=0
|
|
AVERAGE_AMPS_KYLE=0
|
|
AVERAGE_TOTAL_WATTS=0
|
|
AVERAGE_TOTAL_AMPS=0
|
|
fi
|
|
|
|
for SENSOR in ${PW_SENSOR_ORD[@]}; do
|
|
if [ "${PW_HOST_IDRACS[${SENSOR}]}" != "" ]; then
|
|
[[ "${PW_HOST_IDRACS[${SENSOR}]}" = "10.6."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
|
|
if [ "${STYPE}" = "" ] || ([ "${STYPE}" = "mainsite" ] && [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.10."* ]]) || ([ "${STYPE}" = "offsite" ] && [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.2.1."* ]]) || ([ "${STYPE}" = "kyle" ] && [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.6."* ]]); then
|
|
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data for '${SENSOR}' ... "
|
|
|
|
HOST_WATT_SENSORS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1 -O vq 2> /dev/null | sed -e 's/"//g')
|
|
IFS=$'\n'
|
|
read -rd '' -a HOST_WATT_SENSORS <<<"${HOST_WATT_SENSORS}"
|
|
unset IFS
|
|
PS1='0.0'; PS2='0.0'; HOST_WATTS=0
|
|
if [ "${HOST_WATT_SENSORS}" != "" ]; then
|
|
found=0
|
|
for s in {1..5}; do
|
|
DP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1.${s} | sed 's/.*: //')
|
|
if [[ "${DP}" = *"System Board"* ]]; then
|
|
found=1
|
|
HOST_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
|
|
elif [[ "${DP}" = *"PS1"* ]]; then
|
|
PS1=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
elif [[ "${DP}" = *"PS2"* ]]; then
|
|
PS2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
fi
|
|
done
|
|
PS1V=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.12.1.16.1.1 | sed 's/.*: //')
|
|
PS2V=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.12.1.16.1.2 | sed 's/.*: //')
|
|
|
|
if [ ${found} -eq 1 ] && [ "${HOST_WATTS}" != "0" ] && [ "${HOST_WATTS}" != "" ]; then
|
|
[ "${PS1}" != "0.0" ] && PS1=`echo "scale=1; ${PS1}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS1} < 1") )) && [[ "${PS1}" = *"."* ]] && PS1="0${PS1}"
|
|
[ "${PS2}" != "0.0" ] && PS2=`echo "scale=1; ${PS2}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS2} < 1") )) && [[ "${PS2}" = *"."* ]] && PS2="0${PS2}"
|
|
HOST_AMPS=`echo "scale=1; ${PS1}+${PS2}" | tr -d $'\r' | bc`
|
|
AD=$(IDS_NUMBER_FORMAT ${HOST_AMPS} 1 true); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
HOST_WATTS_disp="${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${HOST_WATTS} 0`'W"
|
|
|
|
elif [ ! -f ${PW_TMPFOLDER}/${SENSOR}.down ] && [ "$(ipmitool -I lanplus -H ${PW_HOST_IDRACS[${SENSOR}]} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep off)" != "" ]; then
|
|
HOST_WATTS_disp="${idsCL[LightRed]}Host powered down"
|
|
HOST_WATTS=-1
|
|
elif [ "${HOST_WATTS}" = "0" ]; then
|
|
HOST_WATTS_disp="${idsCL[Yellow]}Host PSU not capable"
|
|
HOST_WATTS=-2
|
|
else
|
|
HOST_WATTS_disp="${idsCL[LightRed]}Could not pull data"
|
|
fi
|
|
|
|
[ "${HOST_WATTS}" = "" ] && HOST_WATTS=0
|
|
|
|
else
|
|
HOST_WATTS_disp="${idsCL[LightRed]}Host offline"
|
|
fi
|
|
|
|
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
|
|
c=0; spc=''; spc1=`expr 25 - ${#SENSOR}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
MSG="${idsCL[White]}${SENSOR}${spc}${idsCL[Default]}: ${HOST_WATTS_disp}"
|
|
echo -en "${MSG}"
|
|
|
|
if [ "${avgdays}" != "" ] && [ ${HOST_WATTS} -ne -2 ] && [ "${SENSOR}" != "iDS-vMS-Host6" ]; then
|
|
echo -en "${idsCL[LightYellow]} Calculating average ...${idsCL[Default]}"
|
|
# AVERAGEPOWER ${PW_POWERSENSOR_ID[${SENSOR}]} ${avgdays} both
|
|
average=$(AVERAGEPOWER ${PW_POWERSENSOR_ID[${SENSOR}]} ${avgdays} both)
|
|
average_amp=$(echo ${average} | cut -d'~' -f 1)
|
|
average_watt=$(echo ${average} | cut -d'~' -f 2)
|
|
AD=${average_amp}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
average_disp=" `IDS_NUMBER_FORMAT ${AD} 1 true`'A${spc}`IDS_NUMBER_FORMAT ${average_watt} 0`'W"
|
|
echo -en "\r\033[K"
|
|
echo -e "${MSG}${idsCL[LightYellow]}${average_disp}${idsCL[Default]}"
|
|
|
|
if [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.10."* ]]; then
|
|
AVERAGE_WATTS_MAINSITE=`echo "scale=2; ${AVERAGE_WATTS_MAINSITE}+${average_watt}" | tr -d $'\r' | bc`
|
|
AVERAGE_AMPS_MAINSITE=`echo "scale=2; ${AVERAGE_AMPS_MAINSITE}+${average_amp}" | tr -d $'\r' | bc`
|
|
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.2.1."* ]]; then
|
|
AVERAGE_WATTS_OFFSITE=`echo "scale=2; ${AVERAGE_WATTS_OFFSITE}+${average_watt}" | tr -d $'\r' | bc`
|
|
AVERAGE_AMPS_OFFSITE=`echo "scale=2; ${AVERAGE_AMPS_OFFSITE}+${average_amp}" | tr -d $'\r' | bc`
|
|
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.6."* ]]; then
|
|
AVERAGE_WATTS_KYLE=`echo "scale=2; ${AVERAGE_WATTS_KYLE}+${average_watt}" | tr -d $'\r' | bc`
|
|
AVERAGE_AMPS_KYLE=`echo "scale=2; ${AVERAGE_AMPS_KYLE}+${average_amp}" | tr -d $'\r' | bc`
|
|
fi
|
|
AVERAGE_TOTAL_WATTS=`echo "scale=2; ${AVERAGE_TOTAL_WATTS}+${average_watt}" | tr -d $'\r' | bc`
|
|
AVERAGE_TOTAL_AMPS=`echo "scale=2; ${AVERAGE_TOTAL_AMPS}+${average_amp}" | tr -d $'\r' | bc`
|
|
|
|
else
|
|
echo -e "${idsCL[Default]}"
|
|
fi
|
|
|
|
if [ ${HOST_WATTS} -gt 0 ]; then
|
|
DIVIDER . darkGray ${PRI_WIDTH}
|
|
echo -e " PS1 : ${idsCL[Green]}`IDS_NUMBER_FORMAT ${PS1} 1 true`'A ${idsCL[Default]}@${idsCL[LightCyan]} ${PS1V}'V${idsCL[Default]}"
|
|
echo -e " PS2 : ${idsCL[Green]}`IDS_NUMBER_FORMAT ${PS2} 1 true`'A ${idsCL[Default]}@${idsCL[LightCyan]} ${PS2V}'V${idsCL[Default]}"
|
|
fi
|
|
[ "${SENSOR}" != "KP-vMS-Host1" ] && DIVIDER . lightCyan ${PRI_WIDTH}
|
|
|
|
if [ "${HOST_WATT_SENSORS}" != "" ] && [ ${HOST_WATTS} -gt 0 ]; then
|
|
if [[ "${IP}" != "10.6.1"* ]]; then
|
|
if [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.10."* ]]; then
|
|
SENSOR_TOTAL_WATTS_MAINSITE=$(expr ${SENSOR_TOTAL_WATTS_MAINSITE} + ${HOST_WATTS})
|
|
SENSOR_TOTAL_AMPS_MAINSITE=$(echo "scale=1; ${SENSOR_TOTAL_AMPS_MAINSITE}+${HOST_AMPS}" | tr -d $'\r' | bc)
|
|
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.2.1."* ]]; then
|
|
SENSOR_TOTAL_WATTS_OFFSITE=$(expr ${SENSOR_TOTAL_WATTS_OFFSITE} + ${HOST_WATTS})
|
|
SENSOR_TOTAL_AMPS_OFFSITE=$(echo "scale=1; ${SENSOR_TOTAL_AMPS_OFFSITE}+${HOST_AMPS}" | tr -d $'\r' | bc)
|
|
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.6."* ]]; then
|
|
SENSOR_TOTAL_WATTS_KYLE=$(expr ${SENSOR_TOTAL_WATTS_KYLE} + ${HOST_WATTS})
|
|
SENSOR_TOTAL_AMPS_KYLE=$(echo "scale=1; ${SENSOR_TOTAL_AMPS_KYLE}+${HOST_AMPS}" | tr -d $'\r' | bc)
|
|
fi
|
|
fi
|
|
SENSOR_TOTAL_WATTS=$(expr ${SENSOR_TOTAL_WATTS} + ${HOST_WATTS})
|
|
SENSOR_TOTAL_AMPS=$(echo "scale=1; ${SENSOR_TOTAL_AMPS}+${HOST_AMPS}" | tr -d $'\r' | bc)
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
if [[ "${IP}" != "10.6.1"* ]]; then
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
echo -en "${idsCL[LightCyan]}TOTALS Amps Watts"
|
|
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
|
|
DIVIDER . lightCyan ${PRI_WIDTH}
|
|
if [ "${STYPE}" = "" ] || [ "${STYPE}" = "mainsite" ]; then
|
|
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS_MAINSITE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -en "${idsCL[LightCyan]}Mainsite ESXi Total ${idsCL[Default]}: ${idsCL[LightGreen]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS_MAINSITE} 0`'W "
|
|
[ "${avgdays}" != "" ] && AD=`IDS_NUMBER_FORMAT ${AVERAGE_AMPS_MAINSITE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_WATTS_MAINSITE} 0`'W" || echo
|
|
fi
|
|
if [ "${STYPE}" = "" ] || [ "${STYPE}" = "offsite" ]; then
|
|
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS_OFFSITE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -en "${idsCL[LightCyan]}Offsite ESXi Total ${idsCL[Default]}: ${idsCL[LightGreen]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS_OFFSITE} 0`'W "
|
|
[ "${avgdays}" != "" ] && AD=${AVERAGE_AMPS_OFFSITE}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_WATTS_OFFSITE} 0`'W" || echo
|
|
fi
|
|
if [ "${STYPE}" = "" ] || [ "${STYPE}" = "kyle" ]; then
|
|
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS_KYLE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -en "${idsCL[LightCyan]}Kyle ESXi Total ${idsCL[Default]}: ${idsCL[LightGreen]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS_KYLE} 0`'W "
|
|
[ "${avgdays}" != "" ] && AD=${AVERAGE_AMPS_KYLE}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_WATTS_KYLE} 0`'W" || echo
|
|
fi
|
|
fi
|
|
|
|
if [ "${STYPE}" = "" ]; then
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -en "${idsBG[Blue]}${idsCL[White]}ESXi Total ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS} 0`'W "
|
|
[ "${avgdays}" != "" ] && AD=${AVERAGE_TOTAL_AMPS}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
[ "${avgdays}" != "" ] && echo -e "${idsBG[Blue]}${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_TOTAL_WATTS} 0`'W${idsBG[Default]}" || echo -e "${idsBG[Default]}"
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
if [ ${REPORT} -eq 0 ]; then
|
|
# if [ "${avgdays}" != "" ]; then
|
|
modend=`date +%s`; modruntime=$((modend-modstart)); echo -e "\n${idsCL[Default]}script runtime: ${modruntime}s"
|
|
# fi
|
|
[ "${PW_ACTION}" != "" ] && echo -e "${idsCL[Default]}"
|
|
fi
|
|
}
|
|
|
|
CHECKPOWER_SERVICE(){
|
|
touch ${PW_TMPFOLDER}/power.ac.start
|
|
touch ${PW_TMPFOLDER}/power.dc.start
|
|
[ "${PW_SERVICE_POWER_SCANRATE}" != "" ] && runEvery=${PW_SERVICE_POWER_SCANRATE} || runEvery=10
|
|
while true; do
|
|
start=$(date +%s)
|
|
log_start=$(date "+%Y-%m-%d %H:%M:%S")
|
|
source ${PW_FOLDER}/defaults.inc
|
|
|
|
if [[ "${IP}" != "10.6.1"* ]]; then
|
|
|
|
INVSTATSINFO=$(curl -m 3 -s "http://${PW_INVERTER_IP}/stats.json")
|
|
SVRRM_UPS_INPUTACV=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.2.2.1.3.1.1 | sed 's/.*: //')
|
|
|
|
if (( $(bc <<<"${SVRRM_UPS_INPUTACV} < ${min_acvolt}") )); then
|
|
if [ ! -f ${PW_TMPFOLDER}/power.ups.low ]; then
|
|
touch ${PW_TMPFOLDER}/power.ups.low
|
|
|
|
elif [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.ups.low)) -ge 60 ]; then
|
|
SENDNOTICE "POWER ALERT - UPS POWER OFF/LOW POWER!!" "UPS has no power for 1min, shutting all servers down!" 1
|
|
|
|
|
|
######################### FINISH
|
|
|
|
|
|
fi
|
|
|
|
elif [ -f ${PW_TMPFOLDER}/power.ups.low ]; then
|
|
rm -f ${PW_TMPFOLDER}/power.ups.low
|
|
fi
|
|
|
|
else
|
|
[ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ] && INVSTATSINFO=1
|
|
|
|
fi
|
|
|
|
if [ "${INVSTATSINFO}" != "" ] || [ ${TESTMODE} -eq 1 ]; then
|
|
if [[ "${IP}" == "10.6.1"* ]]; then
|
|
## VERTIV
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTACV=${TEST_INPUTACV} || INPUTACV=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //')
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTVOLT=${TEST_BATTVOLT} || BATTVOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.10.0 | sed 's/.*: //')
|
|
# ## APC
|
|
# ([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTACV=${TEST_INPUTACV} || INPUTACV=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //')
|
|
# ([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTVOLT=${TEST_BATTVOLT} || BATTVOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.5.0 | sed 's/.*: //')
|
|
|
|
BATTLIFE=`echo "scale=2; (${BATTVOLT}*100)/${BATT_FULL}" | tr -d $'\r' | bc`
|
|
else
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTACV=${TEST_INPUTACV} || INPUTACV=$(echo ${INVSTATSINFO} | jq '.inputs .inV' | tr -d $'\r')
|
|
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTVOLT=${TEST_BATTVOLT} || BATTVOLT=$(echo ${INVSTATSINFO} | jq '.inputs .battV' | tr -d $'\r')
|
|
BATTA=`echo ${INVSTATSINFO} | jq '.inputs .xfA'`
|
|
BATTLIFE=`echo "scale=2; (${BATTVOLT}*100)/${BATT_FULL}" | tr -d $'\r' | bc`
|
|
fi
|
|
PW_DISCHARGE=0
|
|
|
|
if [ ${TESTMODE} -eq 1 ] && [ ! -f ${PW_TMPFOLDER}/power.testmode.enabled ]; then
|
|
touch ${PW_TMPFOLDER}/power.testmode.enabled
|
|
SENDNOTICE "TEST MODE" "***TEST MODE*** ENABLED!"
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** ENABLED" >> ${PW_LOGFILE}
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** ENABLED" >> ${PW_LOGPOWER}
|
|
elif [ ${TESTMODE} -eq 0 ] && [ -f ${PW_TMPFOLDER}/power.testmode.enabled ]; then
|
|
rm -f ${PW_TMPFOLDER}/power.testmode.enabled
|
|
SENDNOTICE "TEST MODE" "***TEST MODE*** DISABLED!"
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** DISABLED" >> ${PW_LOGFILE}
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** DISABLED" >> ${PW_LOGPOWER}
|
|
fi
|
|
|
|
[ ! "${last_battvolt}" ] && last_battvolt=${BATTVOLT}
|
|
|
|
if (( $(bc <<<"${INPUTACV} >= ${min_acvolt}") )) && [ "${PW_DISCHARGE}" != "1" ]; then
|
|
[ "${last_battvolt}" != "${BATTVOLT}" ] && last_battvolt=${BATTVOLT}
|
|
if [ -f ${PW_TMPFOLDER}/power.ac.low ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Back to Normal Voltage" >> ${PW_LOGPOWER}
|
|
SENDNOTICE "POWER NOMINAL AGAIN" "Normal voltage detected
|
|
GRID VOLTAGE: ${INPUTACV}'V
|
|
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)"
|
|
else
|
|
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge $(echo "scale=0; ${PW_LOG_INTERVAL_NORMAL}*60" | tr -d $'\r' | bc) ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V - Normal Voltage" >> ${PW_LOGPOWER}
|
|
if [ -f ${PW_TMPFOLDER}/power.ac.start ]; then
|
|
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && SENDNOTICE "POWER Startup - Nominal" "Service Startup
|
|
Normal voltage detected
|
|
GRID VOLTAGE: ${INPUTACV}'V
|
|
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)"
|
|
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - 'Check Power' Service Startup - Normal voltage detected - Input: ${INPUTACV}'V" >> ${PW_LOGPOWER}
|
|
rm -f ${PW_TMPFOLDER}/power.ac.start
|
|
fi
|
|
fi
|
|
if [ ! -f ${PW_TMPFOLDER}/power.ac.good ]; then
|
|
|
|
if [[ "${IP}" != "10.6.1"* ]] && ([ -f ${PW_TMPFOLDER}/shutdown.SYS ] || [ -f ${PW_TMPFOLDER}/shutdown.MAIN ] || [ -f ${PW_TMPFOLDER}/power.ac.conserve ]); then
|
|
SENDNOTICE "HOSTS POWER" "Power restored! Will wait ${PW_WAIT_TO_POWER_SERVERS}'mins before turning host(s) back on"
|
|
touch ${PW_TMPFOLDER}/.power.restored
|
|
fi
|
|
|
|
rm -f ${PW_TMPFOLDER}/power.ac.*
|
|
touch ${PW_TMPFOLDER}/power.ac.good
|
|
|
|
elif [ -f ${PW_TMPFOLDER}/.power.restored ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/.power.restored)) -ge $(echo "scale=0; ${PW_WAIT_TO_POWER_SERVERS}*60" | tr -d $'\r' | bc) ]; then
|
|
HOSTMGMT mainsite -p on >/dev/null 2>&1 &
|
|
rm -f ${PW_TMPFOLDER}/.power.restored
|
|
fi
|
|
|
|
else
|
|
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge 300 ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Power OFF or LOW" >> ${PW_LOGPOWER}
|
|
if [ -f ${PW_TMPFOLDER}/power.ac.start ]; then
|
|
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && SENDNOTICE "POWER Startup - POWER OFF/LOW -${PW_DISCHARGE}- !!" "Service Startup
|
|
Power off or low voltage detected
|
|
GRID VOLTAGE: ${INPUTACV}'V
|
|
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)" 1
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - 'Check Power' Service Startup - OWER OFF/LOW - Input: ${INPUTACV}'V" >> ${PW_LOGPOWER}
|
|
rm -f ${PW_TMPFOLDER}/power.ac.start
|
|
rm -f ${PW_TMPFOLDER}/power.ac.good
|
|
touch ${PW_TMPFOLDER}/power.ac.low
|
|
|
|
elif [ -f ${PW_TMPFOLDER}/power.ac.good ]; then
|
|
if (( $(bc <<<"${INPUTACV} < ${min_acvolt}") )); then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Power OFF or LOW voltage detected" >> ${PW_LOGPOWER}
|
|
SENDNOTICE "POWER ALERT - POWER OFF/LOW" "Power off or low voltage detected
|
|
GRID VOLTAGE: ${INPUTACV}'V
|
|
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)" 1
|
|
else
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Running on Batteries" >> ${PW_LOGPOWER}
|
|
SENDNOTICE "POWER ALERT - RUNNING ON BATTERIES!!" "Running on Batteries
|
|
GRID VOLTAGE: ${INPUTACV}'V
|
|
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)" 1
|
|
fi
|
|
rm -f ${PW_TMPFOLDER}/power.ac.good
|
|
touch ${PW_TMPFOLDER}/power.ac.low
|
|
|
|
fi
|
|
if [ "${PW_CONSERVE_HOSTS}" != "" ] && [ ! -f ${PW_TMPFOLDER}/power.ac.conserve ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.ac.low)) -ge $(echo "scale=0; ${PW_CONSERVE_AFTER}*60/1" | tr -d $'\r' | bc) ]; then
|
|
echo -e "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Shutting down iSCSI VM's and Host to conserve power" >> ${PW_LOGPOWER}
|
|
SENDNOTICE "POWER ALERT - Conserving Power" "Shutting down iSCSI VM's and Host to conserve power" 1
|
|
# SHUTDOWN_SERVER ${PW_MAIN_ISCSI} -esxi off &
|
|
CONSERVE_POWER &
|
|
touch ${PW_TMPFOLDER}/power.ac.conserve
|
|
fi
|
|
fi
|
|
|
|
if (( $(bc <<<"${BATTVOLT} >= ${min_battvolt}") )); then
|
|
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge $(echo "scale=0; ${PW_LOG_INTERVAL_NORMAL}*60" | tr -d $'\r' | bc) ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Battery Voltage" >> ${PW_LOGPOWER}
|
|
if [ -f ${PW_TMPFOLDER}/power.dc.start ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Battery: ${BATTVOLT}'V - Service Startup - Normal voltage detected" >> ${PW_LOGPOWER}
|
|
rm -f ${PW_TMPFOLDER}/power.dc.start
|
|
fi
|
|
if [ ! -f ${PW_TMPFOLDER}/power.dc.good ]; then
|
|
rm -f ${PW_TMPFOLDER}/power.dc.*
|
|
touch ${PW_TMPFOLDER}/power.dc.good
|
|
fi
|
|
|
|
else
|
|
[ -f ${PW_TMPFOLDER}/power.dc.good ] && rm -f ${PW_TMPFOLDER}/power.dc.good
|
|
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge $(echo "scale=0; ${PW_LOG_INTERVAL_ABNORMAL}*60" | tr -d $'\r' | bc) ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - LOW BATTERY Voltage" >> ${PW_LOGPOWER}
|
|
|
|
if (( $(bc <<<"${BATTVOLT} <= ${min_battvolt_sys}") )); then
|
|
[ ! -f ${PW_TMPFOLDER}/power.dc.critlow ] && touch ${PW_TMPFOLDER}/power.dc.critlow
|
|
|
|
if [ ! -f ${PW_TMPFOLDER}/shutdown.SYS.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.MAINSITE.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.ALL.started ] && (( $(bc <<<"${INPUTACV} < ${min_acvolt}") )) && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.dc.critlow)) -ge 30 ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down all remaining servers..." >> ${PW_LOGFILE}
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down all remaining servers..." >> ${PW_LOGPOWER}
|
|
SENDNOTICE "BATT-VOLT REALLY LOW: SHUTDOWN SYS SERVERS" "Battery Voltage REALLY LOW: ${BATTVOLT}'V
|
|
Shutting down all remaining servers" 1
|
|
SHUTDOWN_SYS POWER &
|
|
|
|
fi
|
|
|
|
elif (( $(bc <<<"${BATTVOLT} < ${min_battvolt}") )); then
|
|
[ ! -f ${PW_TMPFOLDER}/power.dc.low ] && touch ${PW_TMPFOLDER}/power.dc.low
|
|
[ -f ${PW_TMPFOLDER}/power.dc.critlow ] && rm -f ${PW_TMPFOLDER}/power.dc.critlow
|
|
|
|
if [ ! -f ${PW_TMPFOLDER}/shutdown.MAIN.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.MAINSITE.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.ALL.started ] && (( $(bc <<<"${INPUTACV} < ${min_acvolt}") )) && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.dc.low)) -ge 30 ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGFILE}
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGPOWER}
|
|
SENDNOTICE "BATT-VOLT LOW: SHUTDOWN MAIN SERVERS" "Battery Voltage LOW: ${BATTVOLT}'V
|
|
Shutting down main servers" 1
|
|
SHUTDOWN_MAIN POWER &
|
|
|
|
fi
|
|
|
|
elif [ ! -f ${PW_TMPFOLDER}/shutdown.MAIN.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.MAINSITE.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.ALL.started ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.ac.low)) -ge $(echo "scale=0; ${PW_SHUTDOWN_MAINSERVERS_AFTER}*60" | tr -d $'\r' | bc) ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGFILE}
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGPOWER}
|
|
SENDNOTICE "BATT-VOLT LOW: SHUTDOWN MAIN SERVERS" "Battery Voltage LOW: ${BATTVOLT}'V
|
|
Shutting down main servers" 1
|
|
SHUTDOWN_MAIN POWER &
|
|
fi
|
|
|
|
fi
|
|
if [ -f ${PW_TMPFOLDER}/power.ac.low ] || [ -f ${PW_TMPFOLDER}/power.dc.low ]; then
|
|
volt_diff=`echo "scale=1; ${last_battvolt}-${BATTVOLT}" | tr -d $'\r' | bc`
|
|
(( $(bc <<<"${volt_diff} < 0") )) && volt_diff=`echo "scale=2; ${volt_diff} * -1" | tr -d $'\r' | bc`
|
|
if (( $(bc <<<"${volt_diff} >= 0.5") )); then
|
|
SENDNOTICE "BATTERY VOLTAGE CHANGE" "Battery Voltage: ${BATTVOLT}'V"
|
|
echo -e "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Battery Voltage Change" >> ${PW_LOGPOWER}
|
|
last_battvolt=${BATTVOLT}
|
|
fi
|
|
fi
|
|
|
|
else
|
|
sleep 20s
|
|
fi
|
|
|
|
end=`date +%s`; runtime=$((end-start))
|
|
# echo -e "script runtime: ${runtime}s"; [ ${runtime} -lt ${runEvery} ] && echo "Sleeping for $(expr ${runEvery} - ${runtime})s"
|
|
echo "${log_start}~${runtime}~power" >> ${PW_LOGFOLDER}/service.scantimes
|
|
[ ${runtime} -lt ${runEvery} ] && sleep $(expr ${runEvery} - ${runtime})s ###|| echo "Not sleeping, ran for ${runtime}s previsoulsy"
|
|
done # &
|
|
}
|
|
|
|
OFFSITE_CHECKPOWER_SERVICE(){
|
|
startup=true
|
|
[ "${PW_SERVICE_POWER_SCANRATE}" != "" ] && runEvery=${PW_SERVICE_POWER_SCANRATE} || runEvery=10
|
|
while true; do
|
|
start=$(date +%s)
|
|
log_start=$(date "+%Y-%m-%d %H:%M:%S")
|
|
source ${PW_FOLDER}/defaults.inc
|
|
|
|
PW_OFFSITEHOSTS=$(echo ${PW_OFFSITE_HOSTS} | tr ',' ' ')
|
|
[ "${TEST_OFFSITE}" != "" ] && TEST=${TEST_OFFSITE} || TEST=''
|
|
|
|
if [ "${TEST}" != "" ]; then
|
|
PW_OFFSITE_SHUTDOWNSERVERS_AT_BATTCAP=98 #percent
|
|
PW_OFFSITE_SHUTDOWNSERVERS_AFTER=1 #minutes
|
|
PW_OFFSITE_WAIT_TO_POWER_SERVERS=1 #minutes
|
|
TESTMSG="### TEST MODE ACTIVE ###
|
|
|
|
"
|
|
else
|
|
TESTMSG=""
|
|
fi
|
|
|
|
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && upsinfo=$(upsc offsite-ups 2>&1) || upsinfo=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} 'upsc offsite-ups 2>&1')
|
|
if [ "$(echo "${upsinfo}" | grep 'input.voltage:' | sed 's/.*: //' | tr -d $'\r')" != "" ]; then
|
|
rm -f ${PW_TMPFOLDER}/power.offsite.ups.losscomm
|
|
OFFSITE_VOLTIN=$(echo "${upsinfo}" | grep 'input.voltage:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_LOAD=$(echo "${upsinfo}" | grep 'ups.load:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_LOAD=`echo "scale=2; ${OFFSITE_LOAD}/100" | tr -d $'\r' | bc`
|
|
|
|
OFFSITE_BATT_RUNTIME=$(echo "${upsinfo}" | grep 'battery.runtime:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_BATT_RUNTIME=`echo "scale=2; ${OFFSITE_BATT_RUNTIME}/60" | tr -d $'\r' | bc`
|
|
OFFSITE_BATT_CAP=$(echo "${upsinfo}" | grep 'battery.charge:' | sed 's/.*: //' | tr -d $'\r')
|
|
|
|
POWER_STRIP_DATA=$(kasa --type strip --json --host ${PW_OFFSITE_POWER_STRIP} energy)
|
|
OFFSITE_WATTS=$(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l)
|
|
|
|
|
|
if (( $(bc <<<"${OFFSITE_WATTS} < 100") )); then
|
|
TOTAL_MISC_WATTS=0
|
|
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
|
|
TOTAL_MISC_WATTS=`echo "scale=2; ${TOTAL_MISC_WATTS}+$(GET_KASA_POWER ${mSENSOR})" | tr -d $'\r' | bc`
|
|
done
|
|
(( $(bc <<<"${OFFSITE_WATTS} < ${TOTAL_MISC_WATTS}") )) && OFFSITE_WATTS=${TOTAL_MISC_WATTS}
|
|
fi
|
|
|
|
if [ "${PW_OFFSITE_MONITOR}" == "${IP}" ]; then
|
|
if [ ! -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
|
|
/bin/dtoverlay w1-gpio gpiopin=4
|
|
sleep 2s
|
|
fi
|
|
if [ -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
|
|
temp_c=$(cat /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']}/w1_slave | tail -n1 | cut -d "=" -f2)
|
|
OFFSITE_TEMP=$(bc <<< "scale=2; ((${temp_c}/1000)*(9/5))+32")
|
|
else
|
|
OFFSITE_TEMP=ERR
|
|
|
|
fi
|
|
else
|
|
if ${SSHCMD} root@${PW_OFFSITE_MONITOR} [ ! -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
|
|
${SSHCMD} root@${PW_OFFSITE_MONITOR} '/bin/dtoverlay w1-gpio gpiopin=4'
|
|
sleep 2s
|
|
fi
|
|
if ${SSHCMD} root@${PW_OFFSITE_MONITOR} [ -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
|
|
temp_c=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} cat /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']}/w1_slave | tail -n1 | cut -d "=" -f2)
|
|
OFFSITE_TEMP=$(bc <<< "scale=2; ((${temp_c}/1000)*(9/5))+32")
|
|
else
|
|
OFFSITE_TEMP=ERR
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
SENDNOTICE2(){
|
|
MESSAGE="${TESTMSG}${2}
|
|
|
|
BATTERY CHARGE: ${OFFSITE_BATT_CAP}'%
|
|
BATT RUNTIME: ${OFFSITE_BATT_RUNTIME}'mins
|
|
AC VOLTAGE: ${OFFSITE_VOLTIN}'V
|
|
WATT USAGE: ${OFFSITE_WATTS}'W
|
|
AMBIENT TEMP: ${OFFSITE_TEMP}'F"
|
|
[ "${3}" != "" ] && PRIORITY=${3} || PRIORITY=0
|
|
SENDNOTICE "${1}" "${MESSAGE}" ${PRIORITY} cosmic
|
|
}
|
|
if [ "${startup}" = "true" ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_WATTS}'W - ${OFFSITE_BATT_CAP}'% Battery - ${OFFSITE_BATT_RUNTIME}'mins - Service startup" >> ${PW_LOGPOWER}
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Service startup" >> ${PW_LOGFILE}
|
|
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && OFFSITE_SENDPOWER "OFFSITE MONITOR Service Startup" &
|
|
startup=false
|
|
fi
|
|
|
|
if [ ${OFFSITE_VOLTIN%.*} -gt 105 ]; then
|
|
if [ -f ${PW_TMPFOLDER}/power.offsite.charging ] && [ ${OFFSITE_BATT_CAP%.*} -eq 100 ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Charging Complete" >> ${PW_LOGFILE}
|
|
SENDNOTICE2 "OFFSITE POWER" "Batteries are fully recharged"
|
|
rm -f ${PW_TMPFOLDER}/power.offsite.charging
|
|
# elif [ ${OFFSITE_BATT_CAP%.*} -lt 100 ] && [ ! -f ${PW_TMPFOLDER}/power.offsite.charging ]; then
|
|
elif [ ${OFFSITE_BATT_CAP%.*} -lt 100 ] && ([ ! -f ${PW_TMPFOLDER}/power.offsite.charging ] || [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.charging)) -gt 60 ]); then
|
|
# touch ${PW_TMPFOLDER}/power.offsite.charging
|
|
echo "${OFFSITE_BATT_CAP%.*}'%" >| ${PW_TMPFOLDER}/power.offsite.charging
|
|
fi
|
|
if [ -f ${PW_TMPFOLDER}/power.offsite.ac.low ]; then
|
|
if [ -f ${PW_TMPFOLDER}/shutdown.OFFSITE ]; then
|
|
touch ${PW_TMPFOLDER}/power.offsite.restored
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Offsite Power Restored" >> ${PW_LOGFILE}
|
|
SENDNOTICE2 "OFFSITE POWER" "Power restored! Will wait ${PW_OFFSITE_WAIT_TO_POWER_SERVERS}'mins before turning host(s) back on"
|
|
fi
|
|
|
|
rm -f ${PW_TMPFOLDER}/power.offsite.ac.*
|
|
fi
|
|
if [ -f ${PW_TMPFOLDER}/shutdown.OFFSITE ]; then
|
|
if [ -f ${PW_TMPFOLDER}/power.offsite.restored ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.restored)) -gt $(echo "scale=2; ${PW_OFFSITE_WAIT_TO_POWER_SERVERS}*60" | tr -d $'\r' | bc) ]; then
|
|
if [ "$(CHECK_HOST ${PW_IP})" != "false" ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Powering Hosts ON After Power Outage" >> ${PW_LOGFILE}
|
|
if [ -f ${PW_TMPFOLDER}/power.offsite.nohomeconn ]; then
|
|
SENDNOTICE2 "OFFSITE HOST POWER" "Powerwall connections has been established, powering offsite host(s) back ONLINE after power outage"
|
|
else
|
|
SENDNOTICE2 "OFFSITE HOST POWER" "Powering offsite host(s) back ONLINE after power outage"
|
|
fi
|
|
for host in ${PW_OFFSITEHOSTS_IDRAC}; do
|
|
if [ "${TEST}" = "" ] || [ "${TEST}" = "full" ]; then
|
|
ipmitool -I lanplus -H ${host} -U ${PW_ESXI_USER} -P "${PW_ESXI_PASS}" chassis power on &
|
|
else
|
|
echo "TESTMODE: Powering up '${host}'"
|
|
fi
|
|
done
|
|
rm -f ${PW_TMPFOLDER}/power.offsite.restored ${PW_TMPFOLDER}/power.offsite.nohomeconn ${PW_TMPFOLDER}/shutdown.OFFSITE
|
|
else
|
|
if [ ! -f ${PW_TMPFOLDER}/power.offsite.nohomeconn ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Will wait to power on offsite host(s) until powerwall connection is regained" >> ${PW_LOGFILE}
|
|
touch ${PW_TMPFOLDER}/power.offsite.nohomeconn
|
|
SENDNOTICE2 "OFFSITE HOST POWER" "Will wait to power on offsite host(s) until powerwall connection is regained"
|
|
elif [ -f ${PW_TMPFOLDER}/power.offsite.nohomeconn ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.nohomeconn)) -gt $(echo "scale=2; ${PW_OFFSITE_WAIT_TO_POWER_SERVERS}*60" | tr -d $'\r' | bc) ]; then
|
|
touch ${PW_TMPFOLDER}/power.offsite.nohomeconn
|
|
SENDNOTICE2 "OFFSITE HOST POWER" "Still waiting for connection to powerwall before powering offsite host(s) back on"
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
logtime=$(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER}))
|
|
if [ ${logtime} -ge $(echo "scale=0; ${PW_LOG_INTERVAL_NORMAL}*60" | tr -d $'\r' | bc) ] || ([ ${OFFSITE_BATT_CAP%.*} -lt 100 ] && [ ${logtime} -gt ${PW_LOG_INTERVAL_CHARGING} ]); then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_WATTS}'W - ${OFFSITE_BATT_CAP}'% Battery - ${OFFSITE_BATT_RUNTIME}'mins - Normal" >> ${PW_LOGPOWER}
|
|
fi
|
|
else
|
|
[ ! -f ${PW_TMPFOLDER}/power.offsite.ac.low ] && touch ${PW_TMPFOLDER}/power.offsite.ac.low
|
|
|
|
if [ ! -f ${PW_TMPFOLDER}/power.offsite.ac.low.notice ] || [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.ac.low.notice)) -gt $(echo "scale=2; ${PW_RENOTIFY_LOWPOWER}*60" | tr -d $'\r' | bc) ]; then
|
|
# echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Powering LOW/OFF!" >> ${PW_LOGFILE}
|
|
SENDNOTICE2 "OFFSITE POWER - POWER OFF/LOW!!" "Power off or low voltage detected" 1
|
|
touch ${PW_TMPFOLDER}/power.offsite.ac.low.notice
|
|
fi
|
|
|
|
if [ ! -f ${PW_TMPFOLDER}/shutdown.OFFSITE ] && [ ${OFFSITE_WATTS%.*} -gt 100 ] && ([ ${OFFSITE_BATT_CAP%.*} -le ${PW_OFFSITE_SHUTDOWNSERVERS_AT_BATTCAP} ] || [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.ac.low)) -ge $(echo "scale=2; ${PW_OFFSITE_SHUTDOWNSERVERS_AFTER}*60" | tr -d $'\r' | bc) ]); then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Powering Down Hosts!" >> ${PW_LOGFILE}
|
|
SENDNOTICE2 "OFFSITE HOST POWER" "Powering DOWN offsite host(s) due to power outage" 1
|
|
touch ${PW_TMPFOLDER}/shutdown.OFFSITE
|
|
for host in ${PW_OFFSITEHOSTS}; do
|
|
if [ "${TEST}" = "" ] || [ "${TEST}" = "full" ]; then
|
|
SHUTDOWN_SERVER ${host} -esxi off &
|
|
fi
|
|
done
|
|
fi
|
|
if [ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -gt ${PW_LOG_INTERVAL_ABNORMAL} ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_WATTS}'W - ${OFFSITE_BATT_CAP}'% Battery - ${OFFSITE_BATT_RUNTIME}'mins - OFF/LOW POWER!!" >> ${PW_LOGPOWER}
|
|
fi
|
|
fi
|
|
|
|
else
|
|
if [ ! -f ${PW_TMPFOLDER}/power.offsite.ups.losscomm ]; then
|
|
touch ${PW_TMPFOLDER}/power.offsite.ups.losscomm
|
|
|
|
elif [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.ups.losscomm)) -ge 120 ]; then
|
|
echo "($(date +'%Y-%m-%d %H:%M:%S')) - 0.0'V - 0'% Battery - Restarting NUT service" >> ${PW_LOGFILE}
|
|
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && systemctl restart nut-driver || ${SSHCMD} root@${PW_OFFSITE_MONITOR} 'systemctl restart nut-driver'
|
|
sleep 10s
|
|
touch ${PW_TMPFOLDER}/power.offsite.ups.losscomm
|
|
fi
|
|
fi
|
|
|
|
end=`date +%s`; runtime=$((end-start))
|
|
# echo -e "script runtime: ${runtime}s"; [ ${runtime} -lt ${runEvery} ] && echo "Sleeping for $(expr ${runEvery} - ${runtime})s"
|
|
echo "${log_start}~${runtime}~offsite-power" >> ${PW_LOGFOLDER}/service.scantimes
|
|
[ ${runtime} -lt ${runEvery} ] && sleep $(expr ${runEvery} - ${runtime})s ###|| echo "Not sleeping, ran for ${runtime}s previsoulsy"
|
|
done
|
|
}
|
|
|
|
POWERLOGGER_SERVICE(){
|
|
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && SENDPOWER "POWER LOGGING Service Startup" &
|
|
while true; do
|
|
start=$(date +%s)
|
|
log_start=$(date "+%Y-%m-%d %H:%M:%S")
|
|
|
|
LogDataTime=`date +'%Y-%m-%d %H:%M:%S'`
|
|
source ${PW_FOLDER}/defaults.inc
|
|
|
|
if [[ "${IP}" != "10.6.1"* ]]; then
|
|
|
|
INVSTATSINFO=$(curl -m 3 -s "http://${PW_INVERTER_IP}/stats.json")
|
|
if [ "${INVSTATSINFO}" != "" ]; then
|
|
INPUTV=`echo ${INVSTATSINFO} | jq '.inputs .inV' | tr -d $'\r'`
|
|
INPUTA=`echo ${INVSTATSINFO} | jq '.inputs .inA' | tr -d $'\r'`
|
|
OUTPUTV=`echo ${INVSTATSINFO} | jq '.outputs .outV' | tr -d $'\r'`
|
|
OUTPUTA=`echo ${INVSTATSINFO} | jq '.outputs .outA' | tr -d $'\r'`
|
|
OUTPUTW=`echo ${INVSTATSINFO} | jq '.outputs .outW' | tr -d $'\r'`
|
|
BATTV=`echo ${INVSTATSINFO} | jq '.inputs .battV' | tr -d $'\r'`
|
|
BATTA=`echo ${INVSTATSINFO} | jq '.inputs .xfA' | tr -d $'\r'`
|
|
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp) VALUES ('${PW_POWERSENSOR_ID['inv-in']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${INPUTV}','${INPUTA}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['inv-out']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${OUTPUTV}','${OUTPUTA}','${OUTPUTW}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp) VALUES ('${PW_POWERSENSOR_ID['battery']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${BATTV}','${BATTA}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), volt = '${INPUTV}', amp = '${INPUTA}' WHERE sensorid='${PW_POWERSENSOR_ID['inv-in']}'"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), volt = '${OUTPUTV}', amp = '${OUTPUTA}' WHERE sensorid='${PW_POWERSENSOR_ID['inv-out']}'"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), volt = '${BATTV}', amp = '${BATTA}' WHERE sensorid='${PW_POWERSENSOR_ID['battery']}'"
|
|
|
|
|
|
QRY="INSERT INTO inv_jsonstats (date, data) VALUES (CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${INVSTATSINFO}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
|
|
if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
|
|
SVRRM_VOLT=$(snmpwalk -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.2.1.1 | sed 's/.*: //')
|
|
SVRRM_VOLT=`echo "scale=1; ${SVRRM_VOLT}/10" | tr -d $'\r' | bc`
|
|
SVRRM_WATT=$(snmpwalk -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.4.1.1 | sed 's/.*: //')
|
|
SVRRM_AMP=$(snmpwalk -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.3.1.1 | sed 's/.*: //')
|
|
SVRRM_AMP=`echo "scale=2; ${SVRRM_AMP}/100" | tr -d $'\r' | bc`
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['total']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_VOLT}','${SVRRM_AMP}','${SVRRM_WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${SVRRM_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['total']}'"
|
|
fi
|
|
|
|
if [ "$(CHECK_HOST ${PW_APCPDU_IP})" != "false" ]; then
|
|
APCPDU_AMP=$(snmpwalk -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1 | sed 's/.*: //')
|
|
APCPDU_AMP=`echo "scale=1; ${APCPDU_AMP}/10" | tr -d $'\r' | bc`
|
|
if [ "${SVRRM_VOLT}" != "" ]; then
|
|
APCPDU_WATT=`echo "scale=2; ${APCPDU_AMP}*${SVRRM_VOLT}" | tr -d $'\r' | bc`
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['server-rack']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_VOLT}','${APCPDU_AMP}','${APCPDU_WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${APCPDU_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['server-rack']}'"
|
|
else
|
|
QRY="INSERT INTO power_data (sensorid, date, amp) VALUES ('12',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${APCPDU_AMP}')"
|
|
fi
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
|
|
if [ "${SVRRM_VOLT}" != "" ] && [ "${APCPDU_AMP}" != "" ]; then
|
|
NETRK_AMP=`echo "scale=2; ${SVRRM_AMP}-${APCPDU_AMP}" | tr -d $'\r' | bc`
|
|
NETRK_WATT=$(ROUND_NUMBER `echo "scale=2; ${SVRRM_WATT}-${APCPDU_WATT}" | tr -d $'\r' | bc` 0)
|
|
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['network-rack']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_VOLT}','${NETRK_AMP}','${NETRK_WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${NETRK_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['network-rack']}'"
|
|
fi
|
|
|
|
AIRCON_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['ServerRoom-AC']}:8888/status/${PW_SENSOR_DEVICEID['ServerRoom-AC']} | jq '.dps')
|
|
if [ "${AIRCON_INFO}" != "" ]; then
|
|
AIRCON_AMP=$(echo "${AIRCON_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
AIRCON_AMP=$(ROUND_NUMBER $(echo "scale=3; ${AIRCON_AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
AIRCON_WATT=$(echo "${AIRCON_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
AIRCON_WATT=$(echo "scale=1; ${AIRCON_WATT}/10" | tr -d $'\r' | bc -l)
|
|
AIRCON_VOLT=$(echo "${AIRCON_INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
AIRCON_VOLT=$(echo "scale=3; ${AIRCON_VOLT}/10" | tr -d $'\r' | bc -l)
|
|
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['ServerRoom-AC']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${AIRCON_VOLT}','${AIRCON_AMP}','${AIRCON_WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${AIRCON_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['ServerRoom-AC']}'"
|
|
|
|
else
|
|
AIRCON_WATT=0
|
|
AIRCON_AMP=0
|
|
fi
|
|
|
|
if [ "${SVRRM_WATT}" != "" ]; then
|
|
SVRRM_AMP_WAC=$(echo "scale=2; ${SVRRM_AMP}+${AIRCON_AMP}" | tr -d $'\r' | bc -l)
|
|
SVRRM_WATT_WAC=$(echo "scale=2; ${SVRRM_WATT}+${AIRCON_WATT}" | tr -d $'\r' | bc -l)
|
|
QRY="INSERT INTO power_data (sensorid, date, amp, watt) VALUES ('${PW_POWERSENSOR_ID['total-wac']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_AMP_WAC}','${SVRRM_WATT_WAC}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${SVRRM_WATT_WAC}' WHERE sensorid='${PW_POWERSENSOR_ID['total-wac']}'"
|
|
fi
|
|
|
|
### KYLE
|
|
KYLE_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-Power']}:8888/status/${PW_SENSOR_DEVICEID['KP-Power']} | jq '.dps')
|
|
if [ "${KYLE_INFO}" != "" ]; then
|
|
KYLE_AMP=$(echo "${KYLE_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
KYLE_AMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
KYLE_WATT=$(echo "${KYLE_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l)
|
|
KYLE_VOLT=$(echo "${KYLE_INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
KYLE_VOLT=$(echo "scale=3; ${KYLE_VOLT}/10" | tr -d $'\r' | bc -l)
|
|
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['KP-Power']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${KYLE_VOLT}','${KYLE_AMP}','${KYLE_WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${KYLE_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['KP-Power']}'"
|
|
|
|
else
|
|
KYLE_AMP=0
|
|
KYLE_WATT=0
|
|
fi
|
|
KYLE_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-SAS']}:8888/status/${PW_SENSOR_DEVICEID['KP-SAS']} | jq '.dps')
|
|
if [ "${KYLE_INFO}" != "" ]; then
|
|
KYLE_AMP=$(echo "${KYLE_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
KYLE_AMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
KYLE_WATT=$(echo "${KYLE_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l)
|
|
KYLE_VOLT=$(echo "${KYLE_INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
|
|
KYLE_VOLT=$(echo "scale=3; ${KYLE_VOLT}/10" | tr -d $'\r' | bc -l)
|
|
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['KP-SAS']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${KYLE_VOLT}','${KYLE_AMP}','${KYLE_WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
|
|
else
|
|
KYLE_AMP=0
|
|
KYLE_WATT=0
|
|
fi
|
|
|
|
|
|
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && upsinfo=$(upsc offsite-ups 2>&1) || upsinfo=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} 'upsc offsite-ups' 2>&1)
|
|
if [ "$(echo "${upsinfo}" | grep 'input.voltage:')" != "" ]; then
|
|
OFFSITE_VOLTOUT=$(echo "${upsinfo}" | grep 'output.voltage:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_LOAD=$(echo "${upsinfo}" | grep 'ups.load:' | sed 's/.*: //' | tr -d $'\r')
|
|
OFFSITE_LOAD=`echo "scale=2; ${OFFSITE_LOAD}/100" | tr -d $'\r' | bc`
|
|
OFFSITE_WATTS=`echo "scale=2; ${OFFSITE_LOAD}*$(echo "${upsinfo}" | grep 'ups.realpower.nominal:' | sed 's/.*: //')" | tr -d $'\r' | bc`
|
|
OFFSITE_AMPS=`echo "scale=2; ${OFFSITE_WATTS}/${OFFSITE_VOLTOUT}" | tr -d $'\r' | bc`
|
|
|
|
POWER_STRIP_DATA=$(kasa --type strip --json --host ${PW_OFFSITE_POWER_STRIP} energy)
|
|
OFFSITE_STRIP_WATTS=$(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l)
|
|
OFFSITE_STRIP_AMPS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.current_ma')/1000" | tr -d $'\r' | bc -l))
|
|
OFFSITE_STRIP_VOLTS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.voltage_mv')/1000" | tr -d $'\r' | bc -l))
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['offsite-strip']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${OFFSITE_STRIP_VOLTS}','${OFFSITE_STRIP_AMPS}','${OFFSITE_STRIP_WATTS}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
|
|
if (( $(bc <<<"${OFFSITE_WATTS} < 100") )); then
|
|
TOTAL_MISC_WATTS=0; TOTAL_MISC_AMPS=0
|
|
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
|
|
IFS=: read -r AMP WATT VOLT <<< $(GET_KASA_POWER ${mSENSOR}); unset IFS
|
|
TOTAL_MISC_WATTS=`echo "scale=2; ${TOTAL_MISC_WATTS}+${WATT}" | tr -d $'\r' | bc`
|
|
TOTAL_MISC_AMPS=`echo "scale=2; ${TOTAL_MISC_AMPS}+${AMP}" | tr -d $'\r' | bc`
|
|
done
|
|
if (( $(bc <<<"${OFFSITE_WATTS} < ${TOTAL_MISC_WATTS}") )); then
|
|
OFFSITE_WATTS=${TOTAL_MISC_WATTS}
|
|
OFFSITE_AMPS=${TOTAL_MISC_AMPS}
|
|
fi
|
|
fi
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['offsite-ups']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${OFFSITE_VOLTOUT}','${OFFSITE_AMPS}','${OFFSITE_WATTS}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
|
|
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
|
|
IFS=: read -r AMP WATT VOLT <<< $(GET_KASA_POWER ${mSENSOR}); unset IFS
|
|
if [ "${VOLT}" != "" ] && [ "${PW_POWERSENSOR_ID[${mSENSOR}]}" != "" ]; then
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${mSENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${VOLT}','${AMP}','${WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
done
|
|
|
|
for SENSOR in ${PW_SENSOR_ORD[@]}; do
|
|
[[ "${PW_HOST_IDRACS[${SENSOR}]}" = "10.6."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
|
|
if [ "${PW_HOST_IDRACS[${SENSOR}]}" != "" ] && [ ! -f ${PW_TMPFOLDER}/${SENSOR}.down ] && [ "$(ipmitool -I lanplus -H ${PW_HOST_IDRACS[${SENSOR}]} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep 'Power is on')" != "" ]; then
|
|
HOST_WATT_SENSORS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1 -O vq | sed -e 's/"//g')
|
|
if [[ "${HOST_WATTS}" != *"Timeout"* ]] && [ "${HOST_WATT_SENSORS}" != "" ]; then
|
|
IFS=$'\n'
|
|
read -rd '' -a HOST_WATT_SENSORS <<<"${HOST_WATT_SENSORS}"
|
|
unset IFS
|
|
if [ ! -f ${PW_TMPFOLDER}/${SENSOR}.disable ] || ([ -f ${PW_TMPFOLDER}/${SENSOR}.disable ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/${SENSOR}.disable)) -ge 120 ]); then
|
|
[ -f ${PW_TMPFOLDER}/${SENSOR}.shutdown ] && rm -f ${PW_TMPFOLDER}/${SENSOR}.shutdown
|
|
[ -f ${PW_TMPFOLDER}/shutdown.ALL ] && rm -f ${PW_TMPFOLDER}/shutdown.ALL
|
|
[[ "${PW_OFFSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.OFFSITE
|
|
[[ "${PW_MAINSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAINSITE
|
|
[[ "${PW_MAIN_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAIN
|
|
[[ "${PW_SYS_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.SYS
|
|
rm -f ${PW_TMPFOLDER}/${SENSOR}.disable
|
|
fi
|
|
|
|
|
|
PS1='0.0'; PS2='0.0'; HOST_WATTS=0
|
|
for s in {1..5}; do
|
|
DP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1.${s} | sed 's/.*: //')
|
|
if [[ "${DP}" = *"System Board"* ]]; then
|
|
found=1
|
|
HOST_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
|
|
elif [[ "${DP}" = *"PS1"* ]]; then
|
|
PS1=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
elif [[ "${DP}" = *"PS2"* ]]; then
|
|
PS2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
fi
|
|
done
|
|
if [ ${found} -eq 1 ] && [ "${HOST_WATTS}" != "0" ] && [ "${HOST_WATTS}" != "" ] && [[ "${HOST_WATTS}" != *"Timeout"* ]]; then
|
|
[ "${PS1}" != "0.0" ] && PS1=`echo "scale=1; ${PS1}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS1} < 1") )) && [[ "${PS1}" = *"."* ]] && PS1="0${PS1}"
|
|
[ "${PS2}" != "0.0" ] && PS2=`echo "scale=1; ${PS2}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS2} < 1") )) && [[ "${PS2}" = *"."* ]] && PS2="0${PS2}"
|
|
HOST_AMPS=`echo "scale=1; ${PS1}+${PS2}" | tr -d $'\r' | bc`
|
|
QRY="INSERT INTO power_data (sensorid, date, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${SENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${HOST_AMPS}','${HOST_WATTS}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
#############################################################
|
|
else ################# KYLE #########################
|
|
if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
|
|
## VERTIV
|
|
UPS_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //')
|
|
UPS_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.2.1 | sed 's/.*: //')
|
|
UPS_LOAD=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.2.2.1.11.3 | sed 's/.*: //')
|
|
UPS_LOAD=`echo "scale=2; ${UPS_LOAD}/10" | tr -d $'\r' | bc`
|
|
UPS_AMPSIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.3.3.1.4.1 | sed 's/.*: //')\
|
|
UPS_AMPSIN=`echo "scale=2; ${UPS_AMPSIN}/10" | tr -d $'\r' | bc`
|
|
UPS_AMPSOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.3.1 | sed 's/.*: //')\
|
|
UPS_AMPSOUT=`echo "scale=2; ${UPS_AMPSOUT}/10" | tr -d $'\r' | bc`
|
|
UPS_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.2.2.1.8.3 | sed 's/.*: //')
|
|
UPS_BATT_RUNTIME=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.18.0 | sed 's/.*: //')
|
|
UPS_BATT_VOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.10.0 | sed 's/.*: //')
|
|
UPS_BATT_CAP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.19.0 | sed 's/.*: //')
|
|
|
|
# ## APC
|
|
# UPS_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //')
|
|
# UPS_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.2.1 | sed 's/.*: //')
|
|
# UPS_LOAD=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.5.1 | sed 's/.*: //')
|
|
# UPS_AMPSIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.3.3.1.4.1 | sed 's/.*: //')\
|
|
# #UPS_AMPSIN=`echo "scale=2; ${UPS_AMPSIN}/10" | tr -d $'\r' | bc`
|
|
# UPS_AMPSOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.3.1 | sed 's/.*: //')\
|
|
# UPS_AMPSOUT=`echo "scale=2; ${UPS_AMPSOUT}/10" | tr -d $'\r' | bc`
|
|
# # UPS_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.4.1 | sed 's/.*: //')
|
|
# UPS_WATTS=`echo "scale=2; ${UPS_VOLTOUT}*${UPS_AMPSOUT}" | tr -d $'\r' | bc`
|
|
# UPS_BATT_RUNTIME=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.3.0 | sed 's/.*: //')
|
|
# UPS_BATT_VOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.5.0 | sed 's/.*: //')
|
|
# UPS_BATT_VOLT=`echo "scale=2; ${UPS_BATT_VOLT}/10" | tr -d $'\r' | bc`
|
|
# UPS_BATT_CAP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.4.0 | sed 's/.*: //')
|
|
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp) VALUES ('${PW_POWERSENSOR_ID['ups-input']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${UPS_VOLTIN}','${UPS_AMPSIN}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['ups-output']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${UPS_VOLTOUT}','${UPS_AMPSOUT}','${UPS_WATTS}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
QRY="INSERT INTO power_data (sensorid, date, volt) VALUES ('${PW_POWERSENSOR_ID['ups-battery']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${UPS_BATT_VOLT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
|
|
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
|
|
IFS=: read -r AMP WATT VOLT <<< $(GET_TUYA_POWER ${mSENSOR}); unset IFS
|
|
if [ "${VOLT}" != "" ] && [ "${PW_POWERSENSOR_ID[${mSENSOR}]}" != "" ]; then
|
|
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${mSENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${VOLT}','${AMP}','${WATT}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
done
|
|
|
|
for SENSOR in ${PW_SENSOR_ORD[@]}; do
|
|
[[ "${PW_HOST_IDRACS[${SENSOR}]}" = "10.6."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
|
|
if [ "${PW_HOST_IDRACS[${SENSOR}]}" != "" ] && [ ! -f ${PW_TMPFOLDER}/${SENSOR}.down ] && [ "$(ipmitool -I lanplus -H ${PW_HOST_IDRACS[${SENSOR}]} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep 'Power is on')" != "" ]; then
|
|
HOST_WATT_SENSORS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1 -O vq | sed -e 's/"//g')
|
|
if [[ "${HOST_WATTS}" != *"Timeout"* ]] && [ "${HOST_WATT_SENSORS}" != "" ]; then
|
|
IFS=$'\n'
|
|
read -rd '' -a HOST_WATT_SENSORS <<<"${HOST_WATT_SENSORS}"
|
|
unset IFS
|
|
if [ ! -f ${PW_TMPFOLDER}/${SENSOR}.disable ] || ([ -f ${PW_TMPFOLDER}/${SENSOR}.disable ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/${SENSOR}.disable)) -ge 120 ]); then
|
|
[ -f ${PW_TMPFOLDER}/${SENSOR}.shutdown ] && rm -f ${PW_TMPFOLDER}/${SENSOR}.shutdown
|
|
[ -f ${PW_TMPFOLDER}/shutdown.ALL ] && rm -f ${PW_TMPFOLDER}/shutdown.ALL
|
|
[[ "${PW_OFFSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.OFFSITE
|
|
[[ "${PW_MAINSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAINSITE
|
|
[[ "${PW_MAIN_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAIN
|
|
[[ "${PW_SYS_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.SYS
|
|
rm -f ${PW_TMPFOLDER}/${SENSOR}.disable
|
|
fi
|
|
|
|
|
|
PS1='0.0'; PS2='0.0'; HOST_WATTS=0
|
|
for s in {1..5}; do
|
|
DP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1.${s} | sed 's/.*: //')
|
|
if [[ "${DP}" = *"System Board"* ]]; then
|
|
found=1
|
|
HOST_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
|
|
elif [[ "${DP}" = *"PS1"* ]]; then
|
|
PS1=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
elif [[ "${DP}" = *"PS2"* ]]; then
|
|
PS2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
|
|
fi
|
|
done
|
|
if [ ${found} -eq 1 ] && [ "${HOST_WATTS}" != "0" ] && [ "${HOST_WATTS}" != "" ] && [[ "${HOST_WATTS}" != *"Timeout"* ]]; then
|
|
[ "${PS1}" != "0.0" ] && PS1=`echo "scale=1; ${PS1}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS1} < 1") )) && [[ "${PS1}" = *"."* ]] && PS1="0${PS1}"
|
|
[ "${PS2}" != "0.0" ] && PS2=`echo "scale=1; ${PS2}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS2} < 1") )) && [[ "${PS2}" = *"."* ]] && PS2="0${PS2}"
|
|
HOST_AMPS=`echo "scale=1; ${PS1}+${PS2}" | tr -d $'\r' | bc`
|
|
QRY="INSERT INTO power_data (sensorid, date, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${SENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${HOST_AMPS}','${HOST_WATTS}')"
|
|
${mysql_conn} -e "USE servermonitor; ${QRY}"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
fi
|
|
|
|
if ([ "$(compgen -G "${PW_TMPFOLDER}/temp.*")" != "" ] && [ "$(compgen -G "${PW_TMPFOLDER}/temp.*CPU*")" = "" ]) || [ "$(compgen -G "${PW_TMPFOLDER}/power.*.low")" != "" ]; then
|
|
runEvery=${PW_MYSQL_LOG_INTERVAL_ABNORMAL}
|
|
else
|
|
runEvery=${PW_MYSQL_LOG_INTERVAL_NORMAL}
|
|
fi
|
|
end=`date +%s`; runtime=$((end-start))
|
|
# echo -e "script runtime: ${runtime}s"; echo "Sleeping for $(( (runEvery*60) - runtime ))s"
|
|
echo "${log_start}~${runtime}~powerlogger" >> ${PW_LOGFOLDER}/service.scantimes
|
|
|
|
[ ${runtime} -lt $((runEvery*60)) ] && sleep $(( (runEvery*60) - runtime ))s
|
|
|
|
done
|
|
}
|
|
|
|
HOSTPOWER(){
|
|
if [ "${PW_iDRACHOST_SHORTNAMES[${1}]}" != "" ]; then
|
|
idracip=${1}
|
|
elif [ "${PW_ESXI_HOST_NAMES[${1}]}" != "" ]; then
|
|
tmp=${PW_ESXI_HOST_NAMES[${1}]}
|
|
idracip=${PW_HOST_IDRACS[${tmp}]}
|
|
elif [ "${PW_HOST_IDRACS[iDS-vMS-Host${1}]}" != "" ]; then
|
|
idracip=${PW_HOST_IDRACS[iDS-vMS-Host${1}]}
|
|
elif ([ "${1::1}" = "o" ] || [ "${1::1}" = "O" ]) && [ "${PW_HOST_ADDRESSES[OFF-vMS-Host${1: -1}]}" != "" ]; then
|
|
idracip=${PW_HOST_IDRACS[OFF-vMS-Host${1: -1}]}
|
|
elif [ "${PW_HOST_IDRACS[${1}]}" != "" ]; then
|
|
idracip=${PW_HOST_IDRACS[${1}]}
|
|
else
|
|
idracip=''
|
|
fi
|
|
[[ "${idracip}" = "10.6.1."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
|
|
|
|
echo -e "\n${idsCL[Yellow]}POWERING ${2^^} '${PW_iDRACHOST_SHORTNAMES[${idracip}]}'"
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
|
|
if [ "${idracip}" != "" ]; then
|
|
|
|
if [ "${2^^}" = "ON" ] || [ "${2^^}" = "OFF" ] || [ "${2^^}" = "STATUS" ]; then
|
|
if [ "${idracip}" = "${PW_HOST_IDRACS[${PW_ESXI_HOST_NAMES[${PW_ISCSI_PRI_HOST}]}]}" ] && [ "${2^^}" = "ON" ]; then
|
|
MSG="Powering ON the SAS Enclosure"
|
|
c=0; MSG_SPC=''; spc1=`expr ${HC_CW} - ${#MSG}`; until [ ${c} = ${spc1} ]; do MSG_SPC="${MSG_SPC} "; ((c++)); done
|
|
echo -en "\n${idsCL[LightCyan]}${MSG}${MSG_SPC}: "
|
|
if [ ${TESTMODE} -eq 0 ]; then
|
|
current_status=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.14 | sed 's/.*: //')
|
|
if [ "${current_status}" != "" ] && [ "${current_status}" != "1" ]; then
|
|
run=$(snmpset -v 1 -c private ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.14 i 1 >/dev/null 2>&1)
|
|
sleep 3s
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}\n"
|
|
elif [ "${current_status}" = "1" ]; then
|
|
echo -e "${idsCL[Green]}SAS Enclosure Already Powered ON${idsCL[Default]}\n"
|
|
fi
|
|
else
|
|
echo -e "${idsCL[Yellow]}(TEST MODE)${idsCL[Default]}"
|
|
fi
|
|
fi
|
|
|
|
if [ ${TESTMODE} -eq 0 ]; then
|
|
current_status=$(ipmitool -I lanplus -H ${idracip} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep "Power is ${2,,}")
|
|
if [ "${current_status}" = "" ]; then
|
|
echo -e "${idsCL[Green]}"
|
|
ipmitool -I lanplus -H ${idracip} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power ${2,,}
|
|
else
|
|
echo -e "\n${idsCL[LightCyan]}Host is already Powered ${2^^}${idsCL[Default]}"
|
|
|
|
fi
|
|
else
|
|
echo -e "\n${idsCL[Yellow]}(TEST MODE)"
|
|
fi
|
|
echo -e "${idsCL[Default]}"
|
|
|
|
if [ "${idracip}" = "${PW_HOST_IDRACS[${PW_ESXI_HOST_NAMES[${PW_ISCSI_PRI_HOST}]}]}" ] && [ "${2^^}" = "OFF" ]; then
|
|
MSG="Powering OFF the SAS Enclosure"
|
|
c=0; MSG_SPC=''; spc1=`expr ${HC_CW} - ${#MSG}`; until [ ${c} = ${spc1} ]; do MSG_SPC="${MSG_SPC} "; ((c++)); done
|
|
echo -en "${idsCL[LightCyan]}${MSG}${MSG_SPC}: "
|
|
if [ ${TESTMODE} -eq 0 ]; then
|
|
if [ "$(CHECK_HOST ${PW_ISCSI_PRI_HOST})" = "false" ]; then
|
|
run=$(snmpset -v 1 -c private ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.14 i 2 >/dev/null 2>&1)
|
|
sleep 3s
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}\n"
|
|
else
|
|
echo -e "${idsCL[LightRed]}'${PW_iDRACHOST_SHORTNAMES[${idracip}]}' is not offline, not powering down\n"
|
|
fi
|
|
else
|
|
echo -e "${idsCL[Yellow]}(TEST MODE)${idsCL[Default]}"
|
|
fi
|
|
fi
|
|
else
|
|
echo -e "${idsCL[LightRed]}'${2^^}' command is not recognized${idsCL[Default]}"
|
|
fi
|
|
else
|
|
echo -e "${idsCL[LightRed]}Host cannot be found for '${1}'${idsCL[Default]}"
|
|
fi
|
|
echo -e "${idsCL[Default]}\n"
|
|
}
|
|
|
|
PDUCONTROL(){
|
|
function exitspacing {
|
|
echo -e "\n\033[K\n\033[K"
|
|
exit 0
|
|
}
|
|
trap exitspacing EXIT
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-port) PORT_SEL=${2};;
|
|
esac
|
|
shift 1
|
|
done
|
|
echo
|
|
DIVIDER . yellow ${PRI_WIDTH}
|
|
echo -e "${idsCL[Yellow]}APC-PDU Power Control"
|
|
DIVIDER true yellow ${PRI_WIDTH}
|
|
until [ "${PORTSEL^^}" = "E" ]; do
|
|
[ "${PORT_SEL}" != "" ] && PORTSEL=${PORT_SEL}
|
|
if [ "${PORTSEL}" = "" ]; then
|
|
PORT_DESC=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.2 -O vq 2> /dev/null | sed -e 's/"//g')
|
|
PORT_POWER=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4 -O vq 2> /dev/null | sed -e 's/"//g')
|
|
IFS=$'\n'
|
|
read -rd '' -a PORT_DESC <<<"${PORT_DESC}"
|
|
read -rd '' -a PORT_POWER <<<"${PORT_POWER}"
|
|
unset IFS
|
|
for p in "${!PORT_DESC[@]}"; do
|
|
port=$(expr ${p} + 1)
|
|
[ ${PORT_POWER[${p}]} -eq 1 ] && portpower_disp="${idsCL[Green]}ON" || portpower_disp="${idsCL[LightRed]}OFF"
|
|
[ ${port} -lt 10 ] && pp=" ${port}" || pp=${port}
|
|
c=0; spc=''; spc1=`expr 28 - ${#PORT_DESC[${p}]}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
|
|
echo -e "${pp}) ${idsCL[LightCyan]}${PORT_DESC[${p}]}${spc}${idsCL[Default]}: ${portpower_disp}${idsCL[Default]}"
|
|
done
|
|
echo -e ""
|
|
echo -e ""
|
|
echo -e "(${idsCL[Yellow]}E${idsCL[Default]})xit"
|
|
echo -e ""
|
|
echo -e "\033[5A"
|
|
# until [ "${PORTSEL}" != "" ]; do
|
|
echo -en "\n${idsCL[LightCyan]}Enter the port number to control: ${idsCL[Default]}"
|
|
read PORTSEL
|
|
echo
|
|
# done
|
|
fi
|
|
|
|
[ "${PORTSEL^^}" = "E" ] && exit 0
|
|
|
|
[ "${PORTSEL}" != "" ] && tp=$(expr ${PORTSEL} - 1)
|
|
if [ "${PORTSEL}" != "" ] && [[ "${PORTSEL}" =~ ^[0-9]+$ ]] && [ "${PORT_DESC[${tp}]}" != "" ] && [ ${PORTSEL} -ne 0 ]; then
|
|
# portsel_power=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.${PORTSEL} -O vq 2> /dev/null | sed -e 's/"//g')
|
|
[ ${PORT_POWER[${tp}]} -eq 1 ] && portsel_power_disp="${idsCL[Green]}ON" || portsel_power_disp="${idsCL[LightRed]}OFF"
|
|
[ ${PORT_POWER[${tp}]} -eq 2 ] && portsel_change_power_disp="${idsCL[Green]}ON" || portsel_change_power_disp="${idsCL[LightRed]}OFF"
|
|
|
|
# portdesc=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.2.${PORTSEL} -O vq 2> /dev/null | sed -e 's/"//g')
|
|
DIVIDER . yellow 60
|
|
echo -e "${idsCL[Yellow]}Port ${idsCL[LightYellow]}${PORTSEL}${idsCL[Default]}) ${idsCL[LightCyan]}${PORT_DESC[${tp}]} ${idsCL[Default]}: ${portsel_power_disp}${idsCL[Default]}\n"
|
|
|
|
echo -en "${idsCL[LightCyan]}Are you sure you wish to turn ${portsel_change_power_disp}${idsCL[LightCyan]} (port ${PORTSEL}) ${idsCL[Yellow]}${PORT_DESC[${tp}]}${idsCL[Default]} (y/N): "
|
|
read -n 1 portchange_confirm
|
|
case "${portchange_confirm}" in
|
|
[Yy])
|
|
[ ${PORT_POWER[${tp}]} -eq 1 ] && portsel_change=2 || portsel_change=1
|
|
echo -en "\n\n${idsCL[LightCyan]}Turning ${portsel_change_power_disp}${idsCL[LightCyan]} port ${idsCL[Yellow]}${PORTSEL}${idsCL[Default]} ... "
|
|
run=$(snmpset -v 1 -c private ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.${PORTSEL} i ${portsel_change} >/dev/null 2>&1)
|
|
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
|
|
echo
|
|
;;
|
|
|
|
esac
|
|
[ "${PORT_SEL}" = "" ] && unset PORTSEL
|
|
else
|
|
echo -e "\n${idsCL[LightRed]}Not a valid port number${idsCL[Default]}"
|
|
unset PORTSEL
|
|
|
|
fi
|
|
[ "${PORT_SEL}" != "" ] && exit 0 || echo
|
|
done
|
|
|
|
}
|
|
|
|
SENDPOWER(){
|
|
st_power=`${PW_SCRIPT} check power -m -p -r`
|
|
SENDNOTICE "${1}" "${st_power}"
|
|
}
|
|
|
|
OFFSITE_SENDPOWER(){
|
|
st_power=$(${PW_SCRIPT} check temp -o -S -r -x usage; ${PW_SCRIPT} check power -o -p -r)
|
|
SENDNOTICE "${1}" "${st_power}" 0 cosmic
|
|
}
|
|
|
|
GET_TUYA_POWER(){
|
|
INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS[${1}]}:8888/status/${PW_SENSOR_DEVICEID[${1}]} | jq '.dps')
|
|
if [ "${INFO}" != "" ]; then
|
|
WATT=-1
|
|
if [ "$(echo "${INFO}" | grep '"18":')" != "" ]; then
|
|
AMP=$(echo "${INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
AMP=$(ROUND_NUMBER $(echo "scale=3; ${AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
WATT=$(echo "${INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
WATT=$(echo "scale=1; ${WATT}/10" | tr -d $'\r' | bc -l)
|
|
VOLT=$(echo "${INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
VOLT=$(echo "scale=1; ${VOLT}/10" | tr -d $'\r' | bc -l)
|
|
elif [ "$(echo "${INFO}" | grep '"6":')" != "" ]; then
|
|
AMP=$(echo "${INFO}" | grep '"4":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
AMP=$(ROUND_NUMBER $(echo "scale=3; ${AMP}/1000" | tr -d $'\r' | bc -l) 2)
|
|
WATT=$(echo "${INFO}" | grep '"5":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
WATT=$(echo "scale=1; ${WATT}/10" | tr -d $'\r' | bc -l)
|
|
VOLT=$(echo "${INFO}" | grep '"6":' | cut -d' ' -f 4 | sed 's/,//g')
|
|
VOLT=$(echo "scale=1; ${VOLT}/10" | tr -d $'\r' | bc -l)
|
|
fi
|
|
[ "${WATT}" != "-1" ] && echo "${AMP}:${WATT}:${VOLT}" || echo "0:0:0"
|
|
fi
|
|
}
|
|
|
|
GET_KASA_POWER(){
|
|
INFO=$(/usr/local/bin/kasa --type strip --json --verbose --host ${PW_REMOTE_SENSORS[${1}]} energy --child-index ${PW_SENSOR_DEVICEID[${1}]})
|
|
if [ "${INFO}" != "" ]; then
|
|
AMP=$(echo $(echo "scale=2; $(echo ${INFO} | jq '.current_ma')/1000" | tr -d $'\r' | bc -l))
|
|
WATT=$(echo $(echo "scale=2; $(echo ${INFO} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l))
|
|
VOLT=$(echo $(echo "scale=2; $(echo ${INFO} | jq '.voltage_mv')/1000" | tr -d $'\r' | bc -l))
|
|
echo "${AMP}:${WATT}:${VOLT}"
|
|
fi
|
|
}
|
|
|
|
|
|
|