#!/bin/bash
# Copyright (C) 2017 Thomas Wagner <wagner-thomas@gmx.at>
# SPDX-License-Identifier: GPL-2.0-or-later
# checks if a certain url can be reached via a dd-wrt router
#
# The input arguments are:
# ${1} router running dd-wrt, logged in to as root, e.g. 192.168.1.1
# ${2} check url, e.g. http://google.com
# ${3} ssh connect timeout in seconds, e.g. 8

# nagios expects one of the following return values
NAG_OK=0
NAG_WARN=1
NAG_CRIT=2
NAG_UNKNOWN=3

usage()
{
	echo "usage: $(basename "$0") [ROUTER [URL [SSH_TIMEOUT]]]"
	echo "checks if URL (default: http://www.google.com) can be fetched via ROUTER (default: 192.168.1.1),"
	echo "connecting with ssh as root and waiting SSH_TIMEOUT seconds (default: 8) for it"
}

# a wrong command line is UNKNOWN, not a failed check
if [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ]; then
	usage
	exit $NAG_UNKNOWN
fi
if [ $# -gt 3 ] || [[ "${1:-}" == -* || "${2:-}" == -* || "${3:-}" == -* ]]; then
	echo "UNKNOWN - invalid arguments: $*"
	usage
	exit $NAG_UNKNOWN
fi

# set default values
REMOTE=${1:-192.168.1.1}
URL=${2:-http://www.google.com}
SSH_TIMEOUT=${3:-8}

if ! [[ "${SSH_TIMEOUT}" =~ ^[0-9]+$ ]]; then
	echo "UNKNOWN - SSH_TIMEOUT must be a number of seconds, not '${SSH_TIMEOUT}'"
	exit $NAG_UNKNOWN
fi

ssh -q -o ConnectTimeout=${SSH_TIMEOUT} -t root@${REMOTE} wget -q ${URL} -O- > /dev/null
if [ $? -eq 0 ]; then
  echo -n "OK"
  EX=$NAG_OK
else
  echo -n "CRITICAL"
  EX=$NAG_CRIT
fi
echo " - ${URL} via ${REMOTE}"

exit $EX
