|
@@ -1,209 +0,0 @@
|
|
|
-#!/bin/bash
|
|
|
|
|
-
|
|
|
|
|
-#############################################################
|
|
|
|
|
-#
|
|
|
|
|
-# check_omada
|
|
|
|
|
-#
|
|
|
|
|
-# Version 1.0
|
|
|
|
|
-#
|
|
|
|
|
-# Ein Plugin fuer Icinga / Nagios
|
|
|
|
|
-# zur ueberwachung und Auswertung eines
|
|
|
|
|
-# Omada-Controllers ab Version 5
|
|
|
|
|
-#
|
|
|
|
|
-# Urheber: Daniel Wenzel
|
|
|
|
|
-# Kontakt: daniel@klenzel.de
|
|
|
|
|
-#
|
|
|
|
|
-#
|
|
|
|
|
-# Abhaengigkeiten:
|
|
|
|
|
-# - 'jq'
|
|
|
|
|
-# - 'curl'
|
|
|
|
|
-#
|
|
|
|
|
-# Beispiel fuer Debian: apt-get install jq curl
|
|
|
|
|
-#
|
|
|
|
|
-# ---------------------------------------------
|
|
|
|
|
-#
|
|
|
|
|
-# 1.0 - Changelog:
|
|
|
|
|
-#
|
|
|
|
|
-# 20230312
|
|
|
|
|
-# - Initiale Version
|
|
|
|
|
-#
|
|
|
|
|
-#
|
|
|
|
|
-#############################################################
|
|
|
|
|
-
|
|
|
|
|
-#Funktionen
|
|
|
|
|
-function showUsage {
|
|
|
|
|
- echo "
|
|
|
|
|
- Benutzung: $0 [Parameter]
|
|
|
|
|
-
|
|
|
|
|
- -H Hostname / IP-Adresse des Omada Controllers
|
|
|
|
|
-
|
|
|
|
|
- -P Port (Standard = 443) des Omada-Controllers
|
|
|
|
|
-
|
|
|
|
|
- -u Benutzername
|
|
|
|
|
-
|
|
|
|
|
- -p Passwort
|
|
|
|
|
-
|
|
|
|
|
- -s Angabe der Seiten-ID (nicht Name!)
|
|
|
|
|
-
|
|
|
|
|
- -m Modul
|
|
|
|
|
- 'Count-EAPUsers' => Zeigt auf dem Accesspoint angemeldete Nutzer an
|
|
|
|
|
- 'Get-DeviceLoad' => Gibt CPU-Auslastung aus
|
|
|
|
|
- 'Get-DeviceMem' => Gibt Arbeitsspeicher-Auslastung aus
|
|
|
|
|
- 'Get-PortStat' => Zeigt Traffic-Statistiken eines Ports
|
|
|
|
|
- 'Show-Updates' => Zeigt, ob fuer den Unifi-Controller Aktualisierungen verfuegbar sind
|
|
|
|
|
- 'Show-Connection' => Prueft, ob ein Geraet am Omada-Controller angemeldet ist
|
|
|
|
|
- 'Show-PoEStatus' => Zeigt die verbleibende PoE-Kapazitaet an
|
|
|
|
|
-
|
|
|
|
|
- -i (nur bei Get-PortStat notwendig) Angabe des abzufragenden Ports
|
|
|
|
|
-
|
|
|
|
|
- -d Angabe des abzufragenden Geraets
|
|
|
|
|
-
|
|
|
|
|
- -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 verfuegbarer 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' fuer 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 Gaeste 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
|
|
|
|
|
- Erlaeuterungen 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";;
|
|
|
|
|
- -i) shift; strInterface="$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 $strDevice ] || [ -z $strSeite ]; then
|
|
|
|
|
- showUsage
|
|
|
|
|
- exit 1
|
|
|
|
|
-fi
|
|
|
|
|
-
|
|
|
|
|
-#if ( [ "$strModus" == "Get-PortStat" ] ) && ( [ -z $strInterface ] ) ; then
|
|
|
|
|
-# showUsage
|
|
|
|
|
-# exit 1
|
|
|
|
|
-#fi
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-#if ( [ "$strModus" == "Get-DeviceLoad" ] || [ "$strModus" == "Get-DeviceMem" ] || [ "$strModus" == "Count-EAPUsers" ] || [ "$strModus" == "Show-PoEStatus" ] ) && ( [ -z $intWarning ] || [ -z $intCritical ] ) ; then
|
|
|
|
|
-# showUsage
|
|
|
|
|
-# exit 1
|
|
|
|
|
-#fi
|
|
|
|
|
-
|
|
|
|
|
-strDevice=$(echo ${strDevice^^})
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-if [ -z $intPort ] ; then
|
|
|
|
|
- intPort=443
|
|
|
|
|
-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
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-#Meta
|
|
|
|
|
-intRandom=$(( $RANDOM % 100000 ))
|
|
|
|
|
-strBaseURL="https://${strHost}:${intPort}"
|
|
|
|
|
-strCookieFile="/tmp/omada_${intRandom}.cookie"
|
|
|
|
|
-strCurlCommand="${strCurlBinary} --silent --cookie ${strCookieFile} --cookie-jar ${strCookieFile} --insecure"
|
|
|
|
|
-#strLogOutAndCleanUp="${strCurlCommand} $strBaseURL/logout > /dev/null 2>&1 ; rm -f ${strCookieFile}"
|
|
|
|
|
-strLogOutAndCleanUp="rm -f ${strCookieFile}"
|
|
|
|
|
-
|
|
|
|
|
-#Anmelden am Controller
|
|
|
|
|
-intControllerID=$(${strCurlCommand} "${strBaseURL}/api/info" | jq -r .result.omadacId)
|
|
|
|
|
-intToken=$(${strCurlCommand} -X POST -H "Content-Type: application/json" "${strBaseURL}/${intControllerID}/api/v2/login" -d '{"username": "'"${strUsername}"'", "password": "'"${strPassword}"'"}' | ${strJQBinary} -r .result.token)
|
|
|
|
|
-strLoginStatus=$(${strCurlCommand} -X GET -H "Content-Type: application/json" -H "Csrf-Token: ${intToken}" "${strBaseURL}/${intControllerID}/api/v2/loginStatus" | ${strJQBinary} -r .msg)
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-if [ "$strLoginStatus" != "Success." ] ; then
|
|
|
|
|
- echo "Unknown: Anmeldung am Omada-Controller fehlgeschlagen"
|
|
|
|
|
- eval ${strLogOutAndCleanUp}
|
|
|
|
|
- exit 2
|
|
|
|
|
-fi
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-########## Modi Beginn ##########
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-# [Count-EAPUsers] Zeigt auf dem Accesspoint angemeldete Nutzer an
|
|
|
|
|
-# -------------------------------------------
|
|
|
|
|
-if [ "$strModus" == "Count-EAPUsers" ] ; then
|
|
|
|
|
-
|
|
|
|
|
- #intAngemeldeteNutzer=$(${strCurlCommand} -X GET -H "Content-Type: application/json" -H "Csrf-Token: ${intToken}" "${strBaseURL}/${intControllerID}/api/v2/sites/${strSeite}/devices" | jq '.result | map(. | select(.name=="'${strDevice}'")) | . [] .clientNum')
|
|
|
|
|
-strDeviceMAC=$(${strCurlCommand} -X GET -H "Content-Type: application/json" -H "Csrf-Token: ${intToken}" "${strBaseURL}/${intControllerID}/api/v2/devices?searchKey=${strDevice}" | ${strJQBinary} -r .result.devices[0].mac)
|
|
|
|
|
-
|
|
|
|
|
-curl --cookie ${strCookieFile} --cookie-jar ${strCookieFile} --insecure -X GET -H "Content-Type: application/json" -H "Csrf-Token: ${intToken}" "${strBaseURL}/${intControllerID}/api/v2/sites/${strSeite}/eaps/${strDeviceMAC}"
|
|
|
|
|
-
|
|
|
|
|
-exit 0
|
|
|
|
|
-
|
|
|
|
|
-fi
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-# [Get-PortStat] Zeigt Statistiken eines Switchports an
|
|
|
|
|
-# -------------------------------------------
|
|
|
|
|
-if [ "$strModus" == "Get-PortStat" ] ; then
|
|
|
|
|
-
|
|
|
|
|
- curl --cookie ${strCookieFile} --cookie-jar ${strCookieFile} --insecure -X GET -H "Content-Type: application/json" -H "Csrf-Token: ${intToken}" "${strBaseURL}/${intControllerID}/api/v2/sites/${strSeite}/insight/switch/port/overview?currentPage=1¤tPageSize=100&searchKey=${strDevice}"
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- exit 0
|
|
|
|
|
-
|
|
|
|
|
-fi
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-#es wurde kein passender Modus gefunden
|
|
|
|
|
-echo "Unkown: Ungueltige Angabe des Moduls"
|
|
|
|
|
-eval ${strLogOutAndCleanUp}
|
|
|
|
|
-exit 3
|
|
|
|
|
-########## Modi Ende ##########
|
|
|