#!/bin/bash
# ********************************************************************
# * Netwatch                                 Ben Makkink  30-09-2022 *
# * Detecteert langdurig verlies internet verbinding en probeert     *
# * het glasvezelmodem en router te re-initieren                     *
# * Als er gedurende 2 uur aaneengesloten geen internetverbinding is *
# * worden het glasvezelmodem en de router gereboot (2 pogingen)     *
# * Als dan nog geen verbinding gemaakt wordt, wordt er 24 uur       *
# * gepauzeerd voordat opnieuw een poging gedaan wordt.              *
# ********************************************************************

downTime=0;
lastAccessTime=$(date +"%s");
netlost=0;

# start oneindige loop
while [ true ]; do
    # Check of er internet is
    if ! ping -c1 google.com >& /dev/null; then
      # Zo niet bereken downTime sinds laatste verbinding
      downTime=$(( $(date +"%s") - $lastAccessTime ));
      # echo "Geen verbinding";
      # Schrijf datum + tijd naar log /var/www/html/isp_log.txt
      NOW=$(date +"%d/%m/%Y %T")
      echo $NOW: "Geen internettoegang" >> /var/www/html/isp_log.txt;
    else
      # Als er wel (weer) verbinding en vlag is true (=1) dan wordt
      #  e-mail notificatie naar admin vestuurd en vlag verwijderd (=0)
      # echo "Verbinding OK";
      if [ $netlost -gt 0 ]; then
        txt1="Verbinding met internet was down voor meer dan 2 uur.";
        txt2="De Service Netwatch heeft een reboot van modem";
        txt3="en router uitgevoerd. Zie ook";
        txt4="https://www.makkink.eu/exploringlinux/html/projectmap.html#netwatch";
        printf "$txt1 \n$txt2 $txt3 \n$txt4 \n" | mail -s "Bericht van Netwatch" ben@makkink.eu
        netlost=0;
      fi
      # En $downTime gereset en $lastAccessTime naar nu gezet
      downTime=0;
      lastAccessTime=$(date +"%s");
    fi
    # Pauzeer voordat volgende check start
    sleep 1m;  # Zet op 1m voor check elke minuut

    # Als gedurende langere tijd geen verbinding => reboot
    if [ $downTime -ge 7200 ]; then  # Maak 7200 i.e. 2 uur
      echo "Geen Internet gedurende "$downTime "seconden";
      # Zet 'netlost' vlag
      netlost=1;
      echo "Herstart modem en router";
      net-reboot;
      # Wacht voor netwerk herstel
      sleep 5m; # Maak 5m i.e. 5 minuten
     
      # Check of nu wel verbinding is, zo niet herhaal reboot
      if ! ping -c1 google.com >& /dev/null; then
         echo "Nog steeds geen internet";
         echo "2e Herstart modem en router";
         net-reboot;
         # Wacht voor netwerk herstel
         sleep 5m; # Zet  5m i.e. 5 minuten

         # Na 2 reboots nog geen verbinding =>wacht 24 uur
         if ! ping -c1 google.com >& /dev/null; then
           # Wacht 24 uur
           echo "Na 2 reboots nog steeds geen internet";
           echo "24 uur pauze";
           sleep 24h; # Zet 24h i.e. 24 uur
         fi
       fi
       # Reset variabelen voor een verse start
       downTime=0;
       lastAccessTime=$(date +"%s");
    fi

done
