368d6fafea
Code backup
419 lines
11 KiB
Bash
419 lines
11 KiB
Bash
#!/bin/bash
|
|
|
|
# - VAR
|
|
|
|
# - Bash info
|
|
APPNAME=$(basename $0)
|
|
NAME="Check Switch Huawei"
|
|
AUTHOR="Kalarumeth"
|
|
VERSION="v0.1"
|
|
URL="https://github.com/Kalarumeth"
|
|
|
|
# - Default settings for connection
|
|
COMMUNITY="public"
|
|
HOST_NAME="localhost"
|
|
AP="authPriv"
|
|
AUTH="SHA-256"
|
|
PRIV="AES"
|
|
SNMPVERSION="3"
|
|
|
|
# - State Variables
|
|
STATE_OK=0
|
|
STATE_WARN=1
|
|
STATE_CRIT=2
|
|
STATE_UNK=3
|
|
STATE=$STATE_OK
|
|
|
|
# - OID
|
|
|
|
Huawei.OIDS() {
|
|
#Info
|
|
OID_sysDescr="1.3.6.1.2.1.1.1.0"
|
|
OID_sysUptimeIstance="1.3.6.1.2.1.1.3"
|
|
|
|
#Fan
|
|
OID_fanSlot="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.1"
|
|
OID_fanSn="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.2"
|
|
OID_fanReg="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.3"
|
|
OID_fanMode="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.4"
|
|
OID_fanSpeed="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.5"
|
|
OID_fanPresent="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.6"
|
|
OID_fanState="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.7"
|
|
OID_fanDesc="1.3.6.1.4.1.2011.5.25.31.1.1.10.1.8"
|
|
|
|
#Power
|
|
OID_pwrSlot="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.1"
|
|
OID_pwrSn="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.2"
|
|
OID_pwrReg="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.3"
|
|
OID_pwrMode="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.4"
|
|
OID_pwrPresent="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.5"
|
|
OID_pwrState="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.6"
|
|
OID_pwrCurrent="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.7"
|
|
OID_pwrVoltage="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.8"
|
|
OID_pwrDesc="1.3.6.1.4.1.2011.5.25.31.1.1.18.1.9"
|
|
|
|
|
|
#Stack
|
|
OID_stkRun="1.3.6.1.4.1.2011.5.25.183.1.1"
|
|
OID_stkType="1.3.6.1.4.1.2011.5.25.183.1.2"
|
|
OID_stkPriority="1.3.6.1.4.1.2011.5.25.183.1.20.1.2"
|
|
OID_stkRole="1.3.6.1.4.1.2011.5.25.183.1.20.1.3"
|
|
OID_stkMac="1.3.6.1.4.1.2011.5.25.183.1.20.1.4"
|
|
OID_stkDevice="1.3.6.1.4.1.2011.5.25.183.1.20.1.5"
|
|
OID_stkId="1.3.6.1.4.1.2011.5.25.183.1.20.1.6"
|
|
}
|
|
|
|
# - MAIN CODE
|
|
|
|
Script.HostAlive() {
|
|
for server in $HOST_NAME; do
|
|
ping -c1 -W1 -q $server &>/dev/null
|
|
if [[ $? != 0 ]] ; then
|
|
printf "%s\n" "$server is unreachable"
|
|
exit $STATE_UNK
|
|
fi
|
|
done
|
|
}
|
|
|
|
Script.SNMP() {
|
|
snmpwalk -v $SNMPVERSION -r 1 -t 10 -Oen -l $AP -u $USER -e $ENGINEID -a $AUTH -A $PHAUTH -x $PRIV -X $PHPRIV $HOST_NAME $1
|
|
}
|
|
|
|
Huawei.Main() {
|
|
Script.HostAlive
|
|
|
|
case $1 in
|
|
info)
|
|
Huawei.Info
|
|
exit $STATE ;;
|
|
uptime)
|
|
Huawei.UpTime
|
|
exit $STATE ;;
|
|
fan)
|
|
Huawei.Fan
|
|
exit $STATE ;;
|
|
power)
|
|
Huawei.Power
|
|
exit $STATE ;;
|
|
stack)
|
|
Huawei.Stack
|
|
exit $STATE ;;
|
|
*)
|
|
echo "Unknown check!"
|
|
Help.Huawei
|
|
exit $STATE_UNK ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.GetData() {
|
|
Huawei.OIDS
|
|
|
|
case $1 in
|
|
description)
|
|
sysDescr=$(Script.SNMP $OID_sysDescr | cut -d ':' -f 2);;
|
|
uptime)
|
|
sysUptimeIstance=$(Script.SNMP $OID_sysUptimeIstance | cut -d ')' -f 2 );;
|
|
fan)
|
|
fanSlot=($(Script.SNMP $OID_fanSlot | cut -d ' ' -f 4 ))
|
|
fanSn=($(Script.SNMP $OID_fanSn | cut -d ' ' -f 4 ))
|
|
fanReg=($(Script.SNMP $OID_fanReg | cut -d ' ' -f 4 ))
|
|
fanMode=($(Script.SNMP $OID_fanMode | cut -d ' ' -f 4 ))
|
|
fanSpeed=($(Script.SNMP $OID_fanSpeed | cut -d ' ' -f 4 ))
|
|
fanPresent=($(Script.SNMP $OID_fanPresent | cut -d ' ' -f 4 ))
|
|
fanState=($(Script.SNMP $OID_fanState | cut -d ' ' -f 4 ))
|
|
fanDesc=($(Script.SNMP $OID_fanDesc | cut -d '"' -f 2))
|
|
;;
|
|
power)
|
|
pwrSlot=($(Script.SNMP $OID_pwrSlot | cut -d ' ' -f 4 ))
|
|
pwrSn=($(Script.SNMP $OID_pwrSn | cut -d ' ' -f 4 ))
|
|
pwrReg=($(Script.SNMP $OID_pwrReg | cut -d ' ' -f 4 ))
|
|
pwrMode=($(Script.SNMP $OID_pwrMode | cut -d ' ' -f 4 ))
|
|
pwrPresent=($(Script.SNMP $OID_pwrPresent | cut -d ' ' -f 4 ))
|
|
pwrState=($(Script.SNMP $OID_pwrState | cut -d ' ' -f 4 ))
|
|
pwrCurrent=($(Script.SNMP $OID_pwrCurrent | cut -d ' ' -f 4 ))
|
|
pwrVoltage=($(Script.SNMP $OID_pwrVoltage | cut -d ' ' -f 4))
|
|
pwrDesc=($(Script.SNMP $OID_pwrDesc | cut -d '"' -f 2))
|
|
;;
|
|
stack)
|
|
stkRun=$(Script.SNMP $OID_stkRun | cut -d ' ' -f 4 )
|
|
stkType=$(Script.SNMP $OID_stkType | cut -d ' ' -f 4 )
|
|
stkPriority=($(Script.SNMP $OID_stkPriority | cut -d ' ' -f 4 ))
|
|
stkRole=($(Script.SNMP $OID_stkRole | cut -d ' ' -f 4 ))
|
|
stkMac=($(Script.SNMP $OID_stkMac | cut -d '"' -f 2 ))
|
|
stkDevice=($(Script.SNMP $OID_stkDevice | cut -d '"' -f 2 ))
|
|
stkId=($(Script.SNMP $OID_stkId | cut -d ' ' -f 4 ))
|
|
;;
|
|
|
|
esac
|
|
}
|
|
|
|
Huawei.ErrorCounter() {
|
|
for Error in "$(( WarningCounter + CriticalCounter ))"; do
|
|
if [[ $WarningCounter == 0 ]] && [[ $CriticalCounter == 0 ]] ; then
|
|
printf "%s\t%s\n\n" "OK!" "All $1 is Up"
|
|
elif [[ $WarningCounter != 0 ]] && [[ $CriticalCounter == 0 ]] ; then
|
|
printf "%s\t%s\n\n" "WARNING!" "$Error $1 with problem"
|
|
STATE=$STATE_WARN
|
|
elif [[ $CriticalCounter != 0 ]] ; then
|
|
printf "%s\t%s\n\n" "CRITICAL!" "$Error $1 with problem"
|
|
STATE=$STATE_CRIT
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Device Information
|
|
Huawei.Info() {
|
|
Huawei.GetData description
|
|
|
|
printf "%s\n" "$sysDescr"
|
|
}
|
|
|
|
# UpTime
|
|
Huawei.UpTime() {
|
|
Huawei.GetData uptime
|
|
|
|
printf "%s\n" "$sysUptimeIstance"
|
|
}
|
|
|
|
# Fan
|
|
Huawei.Fan() {
|
|
Huawei.GetData fan
|
|
|
|
Huawei.Fan.Header
|
|
|
|
for((i=0; i<${#fanSlot[@]}; i++))
|
|
do
|
|
Huawei.Fan.Desc
|
|
printf "%s\t" "${fanSlot[$i]}"
|
|
printf "%s\t" "${fanSn[$i]}"
|
|
Huawei.Fan.Reg
|
|
Huawei.Fan.Mode
|
|
printf "%s\t" "${fanSpeed[$i]}"
|
|
Huawei.Fan.Present
|
|
Huawei.Fan.State
|
|
printf "\n"
|
|
done
|
|
}
|
|
|
|
Huawei.Fan.Header() {
|
|
WarningCounter=0
|
|
CriticalCounter=0
|
|
|
|
for((i=0; i<${#fanSlot[@]}; i++)); do
|
|
for value in "${fanState[$i]}"; do
|
|
if [[ $value == 2 ]]; then
|
|
CriticalCounter=$(( CriticalCounter + 1 ))
|
|
fi
|
|
done
|
|
done
|
|
|
|
Huawei.ErrorCounter "Fan"
|
|
|
|
if [[ $HOST_NAME == *"core"* ]] ; then
|
|
printf "%s\t\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "Desc" "Unit" "Slot" "Reg" "Mode" "Speed" "Present" "State" "========================================================================"
|
|
elif [[ $HOST_NAME == *"acc"* ]] ; then
|
|
printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "Unit" "Slot" "Reg" "Mode" "Speed" "Present" "State" "========================================================"
|
|
fi
|
|
}
|
|
|
|
Huawei.Fan.Desc() {
|
|
if [[ $HOST_NAME == *"core"* ]] ; then
|
|
printf "%s\t" "${fanDesc[$i]}"
|
|
fi
|
|
}
|
|
|
|
Huawei.Fan.Reg() {
|
|
case ${fanReg[$i]} in
|
|
1) printf "%s\t" "Yes" ;;
|
|
2) printf "%s\t" "No" ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.Fan.Mode() {
|
|
case ${fanMode[$i]} in
|
|
1) printf "%s\t" "Auto" ;;
|
|
2) printf "%s\t" "Manual" ;;
|
|
3) printf "%s\t" "Unknown" ;;
|
|
4) printf "%s\t" "Silent" ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.Fan.Present() {
|
|
case ${fanPresent[$i]} in
|
|
1) printf "%s\t" "Present" ;;
|
|
2) printf "%s\t" "absent" ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.Fan.State() {
|
|
case ${fanState[$i]} in
|
|
1) printf "%s\t" "Normal" ;;
|
|
2) printf "%s\t" "Abnormal" ;;
|
|
esac
|
|
}
|
|
|
|
# Power
|
|
Huawei.Power() {
|
|
Huawei.GetData power
|
|
|
|
Huawei.Power.Header
|
|
|
|
for((i=0; i<${#pwrSlot[@]}; i++))
|
|
do
|
|
printf "%s\t" "${pwrDesc[$i]}"
|
|
printf "%s\t" "${pwrSlot[$i]}"
|
|
printf "%s\t" "${pwrSn[$i]}"
|
|
Huawei.Power.Reg
|
|
Huawei.Power.Mode
|
|
Huawei.Power.Present
|
|
Huawei.Power.State
|
|
printf "%s\t" "${pwrCurrent[$i]} mA"
|
|
printf "%s\t" "${pwrVoltage[$i]} mV"
|
|
printf "\n"
|
|
done
|
|
}
|
|
|
|
Huawei.Power.Header() {
|
|
WarningCounter=0
|
|
CriticalCounter=0
|
|
|
|
for((i=0; i<${#pwrSlot[@]}; i++)); do
|
|
for value in "${pwrState[$i]}"; do
|
|
if [[ $value == 2 ]]; then
|
|
CriticalCounter=$(( CriticalCounter + 1 ))
|
|
fi
|
|
done
|
|
done
|
|
|
|
Huawei.ErrorCounter "Power Supply"
|
|
|
|
printf "%s\t\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n" "Desc" "Unit" "Slot" "Reg" "Mode" "Present" "State" "Current" "Voltage" "=================================================================================="
|
|
}
|
|
|
|
Huawei.Power.Reg() {
|
|
case ${pwrReg[$i]} in
|
|
1) printf "%s\t" "Yes" ;;
|
|
2) printf "%s\t" "No" ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.Power.Mode() {
|
|
case ${pwrMode[$i]} in
|
|
1) printf "%s\t" "Unknown" ;;
|
|
2) printf "%s\t" "DC" ;;
|
|
3) printf "%s\t" "AC" ;;
|
|
4) printf "%s\t" "hvdc" ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.Power.Present() {
|
|
case ${pwrPresent[$i]} in
|
|
1) printf "%s\t" "Present" ;;
|
|
2) printf "%s\t" "Absent" ;;
|
|
esac
|
|
}
|
|
|
|
Huawei.Power.State() {
|
|
case ${pwrState[$i]} in
|
|
1) printf "%s\t" "Supply" ;;
|
|
2) printf "%s\t" "NotSupply" ;;
|
|
3) printf "%s\t" "Sleep" ;;
|
|
4) printf "%s\t" "Unknown" ;;
|
|
esac
|
|
}
|
|
|
|
# Stack
|
|
Huawei.Stack() {
|
|
Huawei.GetData stack
|
|
|
|
Huawei.Stack.Header
|
|
|
|
for((i=0; i<${#stkDevice[@]}; i++))
|
|
do
|
|
printf "%s\t" "${stkId[$i]}"
|
|
printf "%s\t" "${stkDevice[$i]}"
|
|
printf "%s\t" "${stkMac[$i]}"
|
|
Huawei.Stack.Role
|
|
printf "%s\t" "${stkPriority[$i]}"
|
|
printf "\n"
|
|
done
|
|
}
|
|
|
|
Huawei.Stack.Header() {
|
|
if [[ $stkRun == 1 ]] ; then
|
|
Huawei.Stack.Status
|
|
printf "%s\t%s\t\t%s\t\t%s\t\t%s\n" "Id" "Device" "Mac Address" "Role" "Priority" "=========================================================================="
|
|
elif [[ $stkRun == 2 ]] ; then
|
|
printf "%s\t%s\n\n" "CRITICAL!" "Stack is disable"
|
|
exit $STATE_CRIT
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
Huawei.Stack.Status() {
|
|
printf "%s" "OK! Stack is "
|
|
case $stkRun in
|
|
1) printf "%s" "Enable" ;;
|
|
2) printf "%s" "Disable" ;;
|
|
esac
|
|
if [[ $HOST_NAME == *"acc"* ]] ; then
|
|
printf "%s" " and topology type is "
|
|
case $stkType in
|
|
1) printf "%s" "Ring" ;;
|
|
2) printf "%s" "Link" ;;
|
|
esac
|
|
fi
|
|
printf "\n\n"
|
|
|
|
}
|
|
|
|
Huawei.Stack.Role() {
|
|
if [[ $HOST_NAME == *"acc"* ]] ; then
|
|
printf "\t"
|
|
fi
|
|
|
|
case ${stkRole[$i]} in
|
|
1) printf "%s\t" "Master Switch" ;;
|
|
2) printf "%s\t" "Backup Switch" ;;
|
|
3) printf "%s\t" "Slave Switch" ;;
|
|
esac
|
|
}
|
|
|
|
# - COMMAND LINE ENCODER
|
|
|
|
while test -n "$1"; do
|
|
case "$1" in
|
|
--host | -h)
|
|
HOST_NAME=$2
|
|
shift ;;
|
|
--user | -u)
|
|
USER=$2
|
|
shift ;;
|
|
--engineId | -e)
|
|
ENGINEID=$2
|
|
shift ;;
|
|
--phAuth | -pa)
|
|
PHAUTH=$2
|
|
shift ;;
|
|
--phPriv | -pp)
|
|
PHPRIV=$2
|
|
shift ;;
|
|
--type | -t)
|
|
Huawei.Main $2
|
|
shift ;;
|
|
--help | -H)
|
|
Help.Main ;;
|
|
--version | -V)
|
|
Help.Info
|
|
exit $STATE ;;
|
|
*)
|
|
echo "Unknown argument: $1"
|
|
print_help
|
|
exit $STATE_UNK ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
Huawei.Main
|