#!/bin/sh

session_file="$HOME/.x2goclient/sessions"

x2go_servers="$(awk -F '=' '
	BEGIN { name=""; address="" }
	/^\[/ { if (name!="" && address!=""){ print address "\t" name }; name=""; address="" }
	END { if (name!="" && address!=""){ print address "\t" name }; name=""; address="" }
	($1=="name") { name = $2 }
	($1=="host") { address = $2 }
' < "$session_file")"

check_server_once() {
	address="$(printf '%s\n' "$1" | cut -f1 )"
	name="$(printf '%s\n' "$1" | cut -f2 )"
	if /usr/lib/nagios/plugins/check_icmp -H "$address" -n 10 ; then
		echo "OK $name ist erreichbar"
		return 0
	else
		echo "ERROR $name ist nicht erreichbar"
		return 1
	fi
}

IFS="
"

for server in $x2go_servers ; do
	address="$(printf '%s\n' "$server" | cut -f1 )"
	name="$(printf '%s\n' "$server" | cut -f2 )"
	echo "Waiting for $name ($address) ..."
done


wait_pids=""
for server in $x2go_servers ; do
	check_server_once "$server" &
	wait_pids="$wait_pids $!"
done
IFS=" "
any_ok=""
all_ok="y"
for pid in $wait_pids ; do
	wait $pid
	exit_code="$?"
	echo "$pid exited with $exit_code"
	if [ "$exit_code" = 0 ] ; then
		any_ok="y"
	else
		all_ok=""
	fi
done

if [ -n "$all_ok" ] ; then
	echo "All servers reachable."
elif [ -n "$any_ok" ] ; then
	echo "Some servers reachable."
else
	echo "No servers reachable."
fi

set -e
case "$1" in
	any)
		[ -n "$any_ok" ]
		;;
	all)
		[ -n "$all_ok" ]
		;;
	*)
		echo "Unknown subcommand: $1" >&2
		exit 1
		;;
	"")
		echo "Usage: $0 (any|all)"
		;;
esac
