#!/bin/bash

IFACECFG=/tmp/iface.wdchk
PING_TARGET=8.8.8.8
LOG_FILE=/app/logs/shortTerm-$(date '+%Y-%m-%d').log

log_watchdog()
{
	/usr/bin/echo "$1" >> "${LOG_FILE}"
}

is_managed_iface()
{
	[ "$1" = 'eth1' ] || [ "$1" = 'wlan0' ]
}

ping_iface()
{
	local iface="$1"
	/usr/bin/ping -I "$iface" -c2 -W2 "$PING_TARGET" >/dev/null 2>&1
	return $?
}

retry_configured_iface()
{
	local iface

	[ -f "$IFACECFG" ] || return 0
	iface=$(/usr/bin/cat "$IFACECFG")
	is_managed_iface "$iface" || {
		/usr/bin/rm -f "$IFACECFG"
		return 0
	}

	/usr/sbin/ifup "$iface" >/dev/null 2>&1 || true
	/usr/bin/sleep 2
	if ping_iface "$iface"; then
		log_watchdog "^[[33mWARN^[[0m[$(date '+%Y-%m-%d %H:%M:%S')] Network Watchdog: ${iface} recovered via ${PING_TARGET}"
		/usr/bin/rm -f "$IFACECFG"
	else
		/usr/bin/echo "<$(date)> Watchdog: ${iface} still offline"
		/usr/sbin/ifdown "$iface" >/dev/null 2>&1 || true
		/usr/bin/touch "/tmp/${iface}.started"
	fi
}

export DEBIAN_FRONTEND=noninteractive

retry_configured_iface

for ifName in eth1 wlan0; do
	[ -f "/tmp/${ifName}.started" ] || continue

	if ping_iface "$ifName"; then
		/usr/bin/echo "<$(date)> ${ifName} iface OK"
	else
		/usr/bin/echo "<$(date)> ${ifName} NO OK"
		log_watchdog "^[[31mERRO^[[0m[$(date '+%Y-%m-%d %H:%M:%S')] Network Watchdog: ${ifName} ERROR, falling back to always-on QMI"
		/usr/bin/echo "$ifName" > "$IFACECFG"
		/usr/sbin/ifdown "$ifName" >/dev/null 2>&1 || true
		/usr/bin/touch "/tmp/${ifName}.started"
	fi
done

exit 0

