#!/bin/sh
# Das Skript überprüft ob noch ein Rechner im Netz erreichbar ist.
# Ist kein Rechener erreichbar, wir nach einer parametrierten Zeit noch einmal nachgeschaut.
# Ferner wird überprüft, ob die Downloadstation aktuell eine Downloadgeschwindigkeit über einem parametrierten Minimum Wert hat.
# Hier für werden eine parametrierbare Anzahl von Abfragen in einem ebenfalls parametrierbaren Intervall ausgeführt.
# Erkennt keine der Abfragen eine minimale Downloadgeschwindigkeit und wird kein Host im Netzwerk gefunden, dann fährt das System herunter
# KONFIGURATION
_IP_STATIC_START=2 # Start IP der Statischen Adressen
_IP_STATIC_ENDE=15 # Ende IP der Statischen Adressen
_IP_DHCP_START=100 # Start IP des DHCP Bereichs
_IP_DHCP_ENDE=120 # Ende IP des DHCP Bereichs
_WAITTIME_HOST_CHECK=300 # Wartezeit in Sekunden zwischen zwei Hostprüfungen
_EXCLUDE_IP_NAS=10 #IP der NAS-Platte - IP wird beim Hostcheck ignoriert
_EXCLUDE_IP_PRINTER=9 #IP des Druckers - IP wird beim Hostcheck ignoriert
_DLC_MIN_DOWNSPEED=50000 #Minimale Downloadgeschwindigkeit in Bytes
_DLC_NUMBER_OF_CHECKS=3 #Anzahl der Checks die Druchgeführt werden sollen. Mindestens einer muss als Ergebnis > _DLC_MIN_DOWNSPEED liefern
_WAITTIME_DOWNSPEED_CHECK=20 #Wartezeit in Sekunden zwischen zwei Prüfungen der Downloadgeschwindigkeit
_LOGFILE=/var/log/shutdown.log #Pfad zur Logdatei
# Das aktuelle Subnetz herausfinden
_IP=`ip address|grep eth0|grep inet|cut -d"/" -f1|cut -c10-|cut -d"." -f1,2,3`
#echo Subnet: $_IP.xxx
#Initialisierung
no_host_connected=true
no_fast_download=true
#FUNKTION: In Log Datei schreiben
log() {
echo `date +%c`: $1 >> $_LOGFILE
}
#FUNKTION: Abfrage einer IP-Range ob ein Teilnehmer online ist
check_host()
{
_IP_START_TMP=$1
_IP_ENDE_TMP=$2
while [ $_IP_START_TMP -le $_IP_ENDE_TMP ]
do
if ! [ $_IP_START_TMP -eq $_EXCLUDE_IP_NAS ] && ! [ $_IP_START_TMP -eq $_EXCLUDE_IP_PRINTER ]; then
if ping -w 2 -c 1 $_IP.$_IP_START_TMP > /dev/null; then
no_host_connected=false
#echo $_IP.$_IP_START_TMP ist online
log "$_IP.$_IP_START_TMP ist online"
fi
fi
_IP_START_TMP=`expr $_IP_START_TMP + 1`
done
}
#FUNKTION: Abfrage, ob Downloadstation mit Mindestgeschwindigkeit läuft
check_DownloadStation()
{
log "Downloadstation Abfrage aktiv "
#echo "Downloadstation Abfrage aktiv "
_check_nr=0
while [ $_check_nr -lt $_DLC_NUMBER_OF_CHECKS ] && [ $no_fast_download = true ]
do
#Zähler inkrementieren
_check_nr=`expr $_check_nr + 1`
#Aktuelle DownSpeed abfragen
_actDownSpeed=`/usr/syno/pgsql/bin/psql -U admin -d download -c "select SUM(current_rate) from download_queue" | tail --lines=+3 | head --lines=1`
if [ $_actDownSpeed -ge $_DLC_MIN_DOWNSPEED ]; then
no_fast_download=false
log "Schneller Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
#echo "Schneller Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
else
no_fast_download=true
log "Kein oder langsamer Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
#echo "Kein oder langsamer Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
fi
#Wenn noch ein Check folgt, dann Wartezeit starten
if [ $_check_nr -lt $_DLC_NUMBER_OF_CHECKS ] && ! [ $no_fast_download = false ]; then
#echo "Starte _WAITTIME_DOWNSPEED_CHECK"
sleep $_WAITTIME_DOWNSPEED_CHECK
fi
done
log "Downloadstation Abfrage beendet"
#echo "Downloadstation Abfrage beendet"
}
#---HAUPTROUTINE---
#Abfrage starten
log "Start Host Abfrage"
check_host $_IP_STATIC_START $_IP_STATIC_ENDE
check_host $_IP_DHCP_START $_IP_DHCP_ENDE
#Wenn keiner Online ist, dann Abfrage nach x Sekunden wiederholen
if [ $no_host_connected = true ]; then
sleep $_WAITTIME_HOST_CHECK
#Wiederholen der Abfrage
check_host $_IP_STATIC_START $_IP_STATIC_ENDE
check_host $_IP_DHCP_START $_IP_DHCP_ENDE
#Downloadstation checken
check_DownloadStation
#Immernoch keiner Online und kein schneller Download -->Shutdown
if [ $no_host_connected = true ] && [ $no_fast_download = true ]; then
log "System wird heruntergefahren"
echo "System wird heruntergefahren"
/sbin/poweroff
fi
fi