'check_unifi65.sh' hinzufügen
This commit is contained in:
598
check_unifi65.sh
Normal file
598
check_unifi65.sh
Normal file
@@ -0,0 +1,598 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#############################################################
|
||||||
|
#
|
||||||
|
# check_unifi65
|
||||||
|
#
|
||||||
|
# Version 2.0.01
|
||||||
|
#
|
||||||
|
# Ein Plugin für Icinga / Nagios
|
||||||
|
# zur Überwachung und Auswertung eines
|
||||||
|
# Unifi-Controllers ab Version 6
|
||||||
|
#
|
||||||
|
# Urheber: Daniel Wenzel
|
||||||
|
# Kontakt: daniel@klenzel.de
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Abhängigkeiten:
|
||||||
|
# - 'jq'
|
||||||
|
# - 'awk'
|
||||||
|
# - 'curl'
|
||||||
|
#
|
||||||
|
# Beispiel für Debian: apt-get install jq curl
|
||||||
|
#
|
||||||
|
# ---------------------------------------------
|
||||||
|
#
|
||||||
|
# 2.0.01 - Changelog:
|
||||||
|
#
|
||||||
|
# 20220125
|
||||||
|
# - Update für Unifi-Controller Version 6(.5)
|
||||||
|
#
|
||||||
|
# 20170605
|
||||||
|
# - Errorhandling beim Login an Unifi-Controller hinzugefügt
|
||||||
|
# - Bugfixes
|
||||||
|
#
|
||||||
|
#############################################################
|
||||||
|
|
||||||
|
#Funktionen
|
||||||
|
function showUsage {
|
||||||
|
echo "
|
||||||
|
Benutzung: $0 [Parameter]
|
||||||
|
|
||||||
|
-H Hostname / IP-Adresse
|
||||||
|
|
||||||
|
-P Port (Standard = 8443)
|
||||||
|
|
||||||
|
-u Benutzername
|
||||||
|
|
||||||
|
-p Passwort
|
||||||
|
|
||||||
|
-m Modul
|
||||||
|
'Count-Users' => Zeigt im WLAN angemeldete Nutzer an
|
||||||
|
'Active-Alarms' => Anzahl der unbestätigten Alarm-Meldungen
|
||||||
|
'Offline-APs' => Anzahl der nicht verfügbaren Accesspoints
|
||||||
|
'Has-Updates' => Anzahl der Accesspoints, für die ein Update zur Verfügung steht
|
||||||
|
'Not-Adopted' => Anzahl der Accesspoints, die keiner Seite zugewiesen wurden
|
||||||
|
'Get-DeviceLoad' => Benötigt Parameter -d => Zeigt die CPU-Auslastung eines Accesspoints an
|
||||||
|
'Get-DeviceMem' => Benötigt Parameter -d => Zeigt die RAM-Belegung eines Accesspoints an
|
||||||
|
'Get-DeviceUsers' => Benötigt Parameter -d => Zeigt die mit einem AP verbundenen Nutzer an
|
||||||
|
'Get-DeviceGuests' => Benötigt Parameter -d => Zeigt die mit einem AP verbundenen Gäste an
|
||||||
|
'Show-DevLastSeen' => Benötigt Parameter -d => Zeigt die Sekunden an, wann der AP zuletzt gesehen wurde
|
||||||
|
'Show-Updates' => Zeigt, ob für den Unifi-Controller Aktualisierungen verfügbar sind
|
||||||
|
|
||||||
|
-d (nur bei bestimmten Modulen notwendig) Angabe der MAC-Adresse eines abzufragenden Accesspoints
|
||||||
|
|
||||||
|
-s Angabe der Seiten-ID (nicht Name!) (Standard = alle Seiten summiert)
|
||||||
|
|
||||||
|
-w Angabe, unter welchem Wert der Status 'Warning' ausgegeben werden soll
|
||||||
|
'Count-Users' => Warnung, wenn Anzahl Nutzer kleiner als der definierte Warning-Wert
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Active-Alarms' => Ab dieser Anzahl von Alarmmeldungen wird der Status 'Warning' ausgeben
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Offline-APs' => Ab dieser Anzahl nicht verfügbarer APs wird der Status 'Warning' ausgeben
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Has-Updates' => Ab dieser Anzahl von gefundenen Upgrades wird der Status 'Warning' ausgeben
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Not-Adopted' => Ab dieser Anzahl nicht zugewiesener Accesspoints wird der Status 'Warning' ausgeben
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Get-DeviceLoad' => Ist die Load der letzten Minute größer als der angegebene Wert, wird der Status 'Warning' ausgeben
|
||||||
|
Eingabe im Format: 'n.nn'
|
||||||
|
'Get-DeviceMem' => Ist die Auslastung des Arbeitsspeichers höher als der angegebene Wert, wird der Status 'Warning' ausgeben
|
||||||
|
Eingabe im Format: 'nn' (z.B. '80' für 80% Auslastung)
|
||||||
|
'Get-DeviceUsers' => Gibt die maximale Anzahl der mit einem AP verbundenen Nutzer an, ab der der Status 'Warning' ausgegeben wird
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Get-DeviceGuests' => Gibt die maximale Anzahl der mit einem AP verbundenen Gäste an, ab der der Status 'Warning' ausgegeben wird
|
||||||
|
Eingabe im Format: 'n'
|
||||||
|
'Show-DevLastSeen' => Gibt die vergangenen Sekunden der letzten Sichtung an, ab die der Status 'Warning' ausgegeben wird
|
||||||
|
|
||||||
|
-c Angabe, unter welchem Wert der Status 'Critical' ausgegeben werden soll
|
||||||
|
Erläuterungen analog zu 'Warning'
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#Paramter verarbeiten
|
||||||
|
while [ "$1" != "" ]; do
|
||||||
|
case "$1" in
|
||||||
|
-H) shift; strHost="$1";;
|
||||||
|
-P) shift; intPort="$1";;
|
||||||
|
-u) shift; strUsername="$1";;
|
||||||
|
-p) shift; strPassword="$1";;
|
||||||
|
-m) shift; strModus="$1";;
|
||||||
|
-d) shift; strDevice="$1";;
|
||||||
|
-s) shift; strSeite="$1";;
|
||||||
|
-w) shift; intWarning="$1";;
|
||||||
|
-c) shift; intCritical="$1";;
|
||||||
|
*) showUsage; exit 3;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z $strHost ] || [ -z $strUsername ] || [ -z $strPassword ] || [ -z $strModus ] || [ -z $intWarning ] || [ -z $intCritical ]; then
|
||||||
|
showUsage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ( [ "$strModus" == "Get-DeviceLoad" ] || [ "$strModus" == "Get-DeviceMem" ] || [ "$strModus" == "Get-DeviceUsers" ] || [ $strModus == "Get-DeviceGuests" ] ) && ( [ -z $strDevice ] ) ; then
|
||||||
|
showUsage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n $strDevice ] ; then
|
||||||
|
strDevice=${strDevice,,}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $intPort ] ; then
|
||||||
|
intPort=8443
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $strSeite ] ; then
|
||||||
|
strSeite="all_sites"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#################
|
||||||
|
|
||||||
|
strJQBinary=$(which jq)
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
echo "Bitte den JSON-Prozessor ${strJQBinary} installieren"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
strCurlBinary=$(which curl)
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
echo "Bitte das Paket curl installieren"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
strAWKBinary=$(which awk)
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
echo "Bitte das Paket awk installieren"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#Meta
|
||||||
|
intRandom=$(( $RANDOM % 100000 ))
|
||||||
|
strBaseURL="https://${strHost}:${intPort}"
|
||||||
|
strCookieFile="/tmp/unifi_${intRandom}.cookie"
|
||||||
|
strCurlCommand="${strCurlBinary} --tlsv1 --silent --cookie ${strCookieFile} --cookie-jar ${strCookieFile} --insecure"
|
||||||
|
strLogOutAndCleanUp="${strCurlCommand} $strBaseURL/logout > /dev/null 2>&1 ; rm -f ${strCookieFile}"
|
||||||
|
|
||||||
|
#Anmelden am Controller
|
||||||
|
strLoginStatus=$(${strCurlCommand} -X POST -H "Content-Type: application/json" --referer ${strBaseURL}/login --cookie ${strCookieFile} --cookie-jar ${strCookieFile} --insecure -d '{"username": "monitoring", "password": "Ye1tWJXLk5Av4Clx"}' ${strBaseURL}/api/login | ${strJQBinary} '.meta.rc')
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$strLoginStatus" != "\"ok\"" ] ; then
|
||||||
|
echo "Unknown: Anmeldung am Unifi-Controller fehlgeschlagen"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#Sites ermitteln
|
||||||
|
arrSites=$(${strCurlCommand} $strBaseURL/api/self/sites | ${strJQBinary} -r '.data[].name')
|
||||||
|
|
||||||
|
|
||||||
|
########## Modi Beginn ##########
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Count-Users] Zeige angemeldete Nutzer im WLAN
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Count-Users" ] ; then
|
||||||
|
|
||||||
|
intAngemeldeteNutzer=0
|
||||||
|
|
||||||
|
if [ "$strSeite" == "all_sites" ] ; then
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
intAngemeldeteNutzer=$((intAngemeldeteNutzer + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/sta | ${strJQBinary} '.data[].mac' | wc -l)))
|
||||||
|
done
|
||||||
|
|
||||||
|
else
|
||||||
|
intAngemeldeteNutzer=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/sta | ${strJQBinary} '.data[].mac' | wc -l)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $intAngemeldeteNutzer -lt $intCritical ] ; then
|
||||||
|
echo "Critical: Angemeldete Nutzer (${intAngemeldeteNutzer}) kleiner als die minimale Menge (${intCritical}) | ActiveUsers=${intAngemeldeteNutzer}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intAngemeldeteNutzer -lt $intWarning ] ; then
|
||||||
|
echo "Warning: Angemeldete Nutzer (${intAngemeldeteNutzer}) kleiner als die minimale Menge (${intWarning}) | ActiveUsers=${intAngemeldeteNutzer}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Es sind ${intAngemeldeteNutzer} Nutzer/Geräte im WLAN aktiv | ActiveUsers=${intAngemeldeteNutzer}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Active-Alarms] Anzahl der unbestätigten Alarm-Meldungen
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Active-Alarms" ] ; then
|
||||||
|
|
||||||
|
intAlarmMeldungen=0
|
||||||
|
|
||||||
|
if [ "$strSeite" == "all_sites" ] ; then
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
intAlarmMeldungen=$((intAlarmMeldungen + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/cnt/alarm?archived=false | ${strJQBinary} '.data[].count')))
|
||||||
|
done
|
||||||
|
|
||||||
|
else
|
||||||
|
intAlarmMeldungen=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/cnt/alarm?archived=false | ${strJQBinary} '.data[].count')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $intAlarmMeldungen -ge $intCritical ] ; then
|
||||||
|
echo "Critical: ${intAlarmMeldungen} aktive Alarmmeldungen (> ${intCritical}) | ActiveAlarms=${intAlarmMeldungen}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intAlarmMeldungen -ge $intWarning ] ; then
|
||||||
|
echo "Warning: ${intAlarmMeldungen} aktive Alarmmeldungen (> ${intWarning}) | ActiveAlarms=${intAlarmMeldungen}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Es liegen keine oder nur wenige unbestätigte Alarmmeldungen vor (Anzahl ${intAlarmMeldungen})| ActiveAlarms=${intAlarmMeldungen}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Offline-APs] Anzahl der nicht verfügbaren Accesspoints
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Offline-APs" ] ; then
|
||||||
|
|
||||||
|
strOfflineAPs=""
|
||||||
|
intOfflineAPs=0
|
||||||
|
intAvailAPs=0
|
||||||
|
|
||||||
|
if [ "$strSeite" == "all_sites" ] ; then
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
intAvailAPs=$(( intAvailAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | .name' | wc -l)))
|
||||||
|
strOfflineAPs+=$(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select(.state!=1) | .name')
|
||||||
|
intOfflineAPs=$(( intOfflineAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select(.state!=1) | .name' | wc -l)))
|
||||||
|
done
|
||||||
|
|
||||||
|
strOfflineAPs=$(echo ${strOfflineAPs} | tr "\n" ", ")
|
||||||
|
|
||||||
|
else
|
||||||
|
intAvailAPs=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | .name' | wc -l)
|
||||||
|
intOfflineAPs=$(( intOfflineAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | select(.state!=1) | .name' | wc -l)))
|
||||||
|
strOfflineAPs=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | select(.state!=1) | .name')
|
||||||
|
strOfflineAPs=$(echo ${strOfflineAPs} | tr "\n" ", ")
|
||||||
|
fi
|
||||||
|
|
||||||
|
intOnlineAPs=$(( intAvailAPs - intOfflineAPs ))
|
||||||
|
|
||||||
|
if [ $intOfflineAPs -ge $intCritical ] ; then
|
||||||
|
echo "Critical: ${intOfflineAPs} von ${intAvailAPs} Accesspoints nicht verfügbar (${strOfflineAPs}) | OnlineAPs=${intOnlineAPs} OfflineAPs=${intOfflineAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intOfflineAPs -ge $intWarning ] ; then
|
||||||
|
echo "Warning: ${intOfflineAPs} von ${intAvailAPs} Accesspoints nicht verfügbar (${strOfflineAPs}) | OnlineAPs=${intOnlineAPs} OfflineAPs=${intOfflineAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: ${intAvailAPs} von ${intAvailAPs} Accesspoints sind verfügbar | OnlineAPs=${intOnlineAPs} OfflineAPs=${intOfflineAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Has-Updates] Anzahl der Accesspoints, für die ein Update zur Verfügung steht
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Has-Updates" ] ; then
|
||||||
|
|
||||||
|
strUpgradableAPs=""
|
||||||
|
intUpgradableAPs=0
|
||||||
|
intAvailAPs=0
|
||||||
|
|
||||||
|
if [ "$strSeite" == "all_sites" ] ; then
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
intAvailAPs=$(( intAvailAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | .name' | wc -l)))
|
||||||
|
strUpgradableAPs+=$(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.upgradable==true) | .name')
|
||||||
|
intUpgradableAPs=$(( intUpgradableAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.upgradable==true) | .name' | wc -l)))
|
||||||
|
done
|
||||||
|
strUpgradableAPs=$(echo ${strUpgradableAPs} | tr "\"" " ")
|
||||||
|
|
||||||
|
else
|
||||||
|
intAvailAPs=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | .name' | wc -l)
|
||||||
|
intUpgradableAPs=$(( intUpgradableAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | select (.upgradable==true) | .name' | wc -l)))
|
||||||
|
strUpgradableAPs=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | select (.upgradable==true) | .name')
|
||||||
|
strUpgradableAPs=$(echo ${strUpgradableAPs} | tr "\n" ", ")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $intUpgradableAPs -ge $intCritical ] ; then
|
||||||
|
echo "Critical: Für ${intUpgradableAPs} von ${intAvailAPs} Accesspoints ist ein Upgrade verfügbar (${strUpgradableAPs}) | UpgradableAPs=${intUpgradableAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intUpgradableAPs -ge $intWarning ] ; then
|
||||||
|
echo "Warning: Für ${intUpgradableAPs} von ${intAvailAPs} Accesspoints ist ein Upgrade verfügbar (${strUpgradableAPs}) | UpgradableAPs=${intUpgradableAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Es sind keine oder nur wenige Upgrades für Accesspoints verfügbar | UpgradableAPs=${intUpgradableAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Not-Adopted] Anzahl der Accesspoints, die keiner Seite zugewiesen wurden
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Not-Adopted" ] ; then
|
||||||
|
|
||||||
|
strNotAdoptedAPs=""
|
||||||
|
intNotAdoptedAPs=0
|
||||||
|
|
||||||
|
if [ "$strSeite" == "all_sites" ] ; then
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
strNotAdoptedAPs+=$(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.adopted!=true) | .name')
|
||||||
|
intNotAdoptedAPs=$(( intNotAdoptedAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.adopted!=true) | .name' | wc -l)))
|
||||||
|
done
|
||||||
|
|
||||||
|
strNotAdoptedAPs=$(echo ${strNotAdoptedAPs} | tr "\"" " ")
|
||||||
|
|
||||||
|
else
|
||||||
|
intNotAdoptedAPs=$(( intNotAdoptedAPs + $(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | select (.adopted!=true) | .name' | wc -l)))
|
||||||
|
strNotAdoptedAPs=$(${strCurlCommand} $strBaseURL/api/s/${strSeite}/stat/device | ${strJQBinary} '.data[] | select (.adopted!=true) | .name')
|
||||||
|
strNotAdoptedAPs=$(echo ${strNotAdoptedAPs} | tr "\n" ", ")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $intNotAdoptedAPs -ge $intCritical ] ; then
|
||||||
|
echo "Critical: Es wurden ${intNotAdoptedAPs} nicht zugewiesene Accesspoints gefunden | NotAdoptedAPs=${intNotAdoptedAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intNotAdoptedAPs -ge $intWarning ] ; then
|
||||||
|
echo "Warning: Es wurden ${intNotAdoptedAPs} nicht zugewiesene Accesspoints gefunden | NotAdoptedAPs=${intNotAdoptedAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Es wurden keine nicht zugewiesene Accesspoints gefunden | NotAdoptedAPs=${intNotAdoptedAPs}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Get-DeviceUsers] Zeigt die mit einem AP verbundenen Nutzer an
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Get-DeviceUsers" ] ; then
|
||||||
|
|
||||||
|
intAPBenutzer=0
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
intAPBenutzerTMP=0
|
||||||
|
strAPBenutzerCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .[\"user-num_sta\"]'"
|
||||||
|
intAPBenutzerTMP=$(eval ${strAPBenutzerCMD})
|
||||||
|
intAPBenutzer=$((intAPBenutzer + intAPBenutzerTMP ))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $intAPBenutzer -gt $intCritical ] ; then
|
||||||
|
echo "Critical: Angemeldete Nutzer am Accesspoint '${strDevice}' größer als die maximale Menge (${intAPBenutzer} > ${intCritical}) | ActiveAPUsers=${intAPBenutzer}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intAPBenutzer -gt $intWarning ] ; then
|
||||||
|
echo "Warning: Angemeldete Nutzer am Accesspoint '${strDevice}' größer als die maximale Menge (${intAPBenutzer} > ${intWarning}) | ActiveAPUsers=${intAPBenutzer}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Es sind ${intAPBenutzer} Nutzer/Geräte am Accesspoint '${strDevice}' angemeldet | ActiveAPUsers=${intAPBenutzer}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Get-DeviceGuests] Zeigt die mit einem AP verbundenen Nutzer an
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Get-DeviceGuests" ] ; then
|
||||||
|
|
||||||
|
intAPGaeste=0
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
intAPGaesteTMP=0
|
||||||
|
strAPGaesteCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .[\"guest-num_sta\"]'"
|
||||||
|
intAPGaesteTMP=$(eval ${strAPGaesteCMD})
|
||||||
|
intAPGaeste=$((intAPGaeste + intAPGaesteTMP ))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ $intAPGaeste -gt $intCritical ] ; then
|
||||||
|
echo "Critical: Angemeldete Gäste am Accesspoint '${strDevice}' größer als die maximale Menge (${intAPGaeste} > ${intCritical}) | ActiveAPGuests=${intAPGaeste}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif [ $intAPGaeste -gt $intWarning ] ; then
|
||||||
|
echo "Warning: Angemeldete Gäste am Accesspoint '${strDevice}' kleiner als die maximale Menge (${intAPGaeste} > ${intWarning}) | ActiveAPGuests=${intAPGaeste}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Es sind ${intAPGaeste} Gäste am Accesspoint '${strDevice}' angemeldet | ActiveAPGuests=${intAPGaeste}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Get-DeviceLoad] Zeigt die CPU-Auslastung eines Accesspoints an
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Get-DeviceLoad" ] ; then
|
||||||
|
|
||||||
|
intLoad1Min=0
|
||||||
|
intLoad5Min=0
|
||||||
|
intLoad15Min=0
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
strAPLoad1MinCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .sys_stats | .loadavg_1' | tr -d '\"'"
|
||||||
|
strAPLoad5MinCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .sys_stats | .loadavg_5' | tr -d '\"'"
|
||||||
|
strAPLoad15MinCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .sys_stats | .loadavg_15' | tr -d '\"'"
|
||||||
|
intCheckAPLoad=$(eval ${strAPLoad1MinCMD})
|
||||||
|
|
||||||
|
if [ "x${intCheckAPLoad}" != "x" ] ; then
|
||||||
|
intLoad1Min=$(eval ${strAPLoad1MinCMD})
|
||||||
|
intLoad5Min=$(eval ${strAPLoad5MinCMD})
|
||||||
|
intLoad15Min=$(eval ${strAPLoad15MinCMD})
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if ( expr $intLoad1Min \> $intCritical >/dev/null ) ; then
|
||||||
|
echo "Critical: CPU-Auslastung des Accesspoints '${strDevice}' zu hoch (${intLoad1Min} > ${intCritical}) | APLoad1Min=${intLoad1Min} APLoad5Min=${intLoad5Min} APLoad15Min=${intLoad15Min}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif ( expr $intLoad1Min \> $intWarning >/dev/null ) ; then
|
||||||
|
echo "Warning: CPU-Auslastung des Accesspoints '${strDevice}' zu hoch (${intLoad1Min} > ${intWarning}) | APLoad1Min=${intLoad1Min} APLoad5Min=${intLoad5Min} APLoad15Min=${intLoad15Min}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: CPU-Auslastung des Accesspoints '${strDevice}' in Ordnung (${intLoad1Min}) | APLoad1Min=${intLoad1Min} APLoad5Min=${intLoad5Min} APLoad15Min=${intLoad15Min}"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [GGet-DeviceMem] Zeigt die RAM-Belegung eines Accesspoints an
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Get-DeviceMem" ] ; then
|
||||||
|
|
||||||
|
intAPMemTotal=0
|
||||||
|
intAPMemUsed=0
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
strAPMemTotalCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .sys_stats | .mem_total'"
|
||||||
|
strAPMemUsedCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .sys_stats | .mem_used'"
|
||||||
|
intCheckAPMem=$(eval ${strAPMemTotalCMD})
|
||||||
|
|
||||||
|
if [ "x${intCheckAPMem}" != "x" ] ; then
|
||||||
|
intAPMemTotal=$(eval ${strAPMemTotalCMD})
|
||||||
|
intAPMemUsed=$(eval ${strAPMemUsedCMD})
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
intAPMemFree=$(( intAPMemTotal - intAPMemUsed ))
|
||||||
|
intAPMemUsedPercent=$(${strAWKBinary} "BEGIN {OFMT=\"%.2f\"; print $intAPMemUsed / $intAPMemTotal * 100;}")
|
||||||
|
|
||||||
|
if ( expr $intAPMemUsedPercent \> $intCritical >/dev/null ) ; then
|
||||||
|
echo "Critical: Speicherauslastung des Accesspoints '${strDevice}' zu hoch (${intAPMemUsedPercent}% > ${intCritical}%) | APMemUsedPercent=${intAPMemUsedPercent}% APMemTotal=${intAPMemTotal}B APMemUsed=${intAPMemUsed}B APMemFree=${intAPMemFree}B"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif ( expr $intAPMemUsedPercent \> $intWarning >/dev/null ) ; then
|
||||||
|
echo "Warning: Speicherauslastung des Accesspoints '${strDevice}' zu hoch (${intAPMemUsedPercent}% > ${intWarning}%) | APMemUsedPercent=${intAPMemUsedPercent}% APMemTotal=${intAPMemTotal}B APMemUsed=${intAPMemUsed}B APMemFree=${intAPMemFree}B"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Speicherauslastung des Accesspoints '${strDevice}' in Ordnung (${intAPMemUsedPercent}% belegt) | APMemUsedPercent=${intAPMemUsedPercent}% APMemTotal=${intAPMemTotal}B APMemUsed=${intAPMemUsed}B APMemFree=${intAPMemFree}B"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Show-DevLastSeen] Zeigt die Sekunden an, wann der AP zuletzt gesehen wurde
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Show-DevLastSeen" ] ; then
|
||||||
|
|
||||||
|
intTimeStampNow=$(date +%s)
|
||||||
|
intDevLastSeen=0
|
||||||
|
|
||||||
|
for strSite in $arrSites; do
|
||||||
|
strDevLastSeenCMD="${strCurlCommand} $strBaseURL/api/s/${strSite}/stat/device | ${strJQBinary} '.data[] | select (.mac==\"${strDevice}\") | .last_seen'"
|
||||||
|
intCheckDevLastSeen=$(eval ${strDevLastSeenCMD})
|
||||||
|
if [ $(echo "$intCheckDevLastSeen" | grep [[:digit:]]) ] ; then
|
||||||
|
intDevLastSeen=$intCheckDevLastSeen
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
intDevLastSeenSeconds=$(( intTimeStampNow - intDevLastSeen ))
|
||||||
|
|
||||||
|
if ( expr $intDevLastSeenSeconds \> $intCritical >/dev/null ); then
|
||||||
|
echo "Critical: Letzter Kontakt zum Accesspoint '${strDevice}' zu lange her (vor ${intDevLastSeenSeconds} Sekunden) | APLastSeenSecondsBefore=${intDevLastSeenSeconds}s"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 2
|
||||||
|
elif ( expr $intDevLastSeenSeconds \> $intWarning >/dev/null ) ; then
|
||||||
|
echo "Warning: Letzter Kontakt zum Accesspoint '${strDevice}' zu lange her (vor ${intDevLastSeenSeconds} Sekunden) | APLastSeenSecondsBefore=${intDevLastSeenSeconds}s"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Letzter Kontakt zum Accesspoint '${strDevice}' vor ${intDevLastSeenSeconds} Sekunden | APLastSeenSecondsBefore=${intDevLastSeenSeconds}s"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [Show-Updates] Zeigt, ob für den Unifi-Controller Aktualisierungen verfügbar sind
|
||||||
|
# -------------------------------------------
|
||||||
|
if [ "$strModus" == "Show-Updates" ] ; then
|
||||||
|
|
||||||
|
boolControllerHasUpdates="false"
|
||||||
|
boolControllerHasUpdates="${strCurlCommand} $strBaseURL/api/s/default/stat/sysinfo | ${strJQBinary} '.data[].update_available'"
|
||||||
|
|
||||||
|
if [ "z$boolControllerHasUpdates" == "xtrue" ] ; then
|
||||||
|
echo "Warning: Für den Unifi-Controller sind Updates verfügbar"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "OK: Für den Unifi-Controller sind keine Updates verfügbar"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#es wurde kein passender Modus gefunden
|
||||||
|
echo "Unkown: Ungültige Angabe des Moduls"
|
||||||
|
eval ${strLogOutAndCleanUp}
|
||||||
|
exit 3
|
||||||
|
########## Modi Ende ##########
|
||||||
Reference in New Issue
Block a user