#!/bin/bash
#
CMD=$(basename $0)
CMDVER="1.4"
CMDSTR="$CMD v$CMDVER (2021-05-27)"

set -e -u

usage()
{
	echo -e "
== $CMDSTR == compare current date against different sources ==

usage: $CMD
"
	exit 127
}


pdate()
{
	local desc=$1
	local tm=$2
	local secs=
	local ref=
	local diff=

	printf "%-28s: " "$desc"

	case "$tm" in
	  N/A*)	printf "%-34s\n" "$tm"; return 0 ;;
	esac

	secs=$(date '+%s' --date="$tm")

	case "$date_ref" in
	  N/A*)	printf "%-34s s=%8d diff=N/A\n" "$tm" "$secs"
		;;
	  *)	ref=$(date '+%s' --date "$date_ref")
		diff=$(($secs - $ref))
		printf "%-34s s=%8d diff=%d\n" "$tm" $secs $diff
		;;
	esac
	return 0
}



get_rdate()
{
	local out=
	out=$(rdate "$@" 2>&1) || {
		echo "N/A"
		return 0
	}
	echo "$out"
	return 0
}

# (MAIN)

trap 'echo -e "\n*INTR*\n"; exit 255' 1 2 3
trap 'echo -e "\nunexpected error $? at $LINENO\n"' ERR

kusa_services="/etc/default/kusa-services"
kusa_server=
refer_timeserver="kubit.ch"
date_hw=

[ -f $kusa_services ] && {
	. $kusa_services
	[ "$KUSA_SERVICE_RDATE" != "$refer_timeserver" ] && {
		kusa_server=$KUSA_SERVICE_RDATE
	}
}

# get dates from different sources
#
[ "$kusa_server" ] && date_kusa=$(get_rdate -p $kusa_server)
date_ref=$(get_rdate -p $refer_timeserver)
date_os=$(date)
[ -r /dev/rtc ] && {
	# Thu Jan  3 13:31:51 2019  -0.297286 seconds
	date_hw=$(hwclock --show | awk '{ printf( "%s %s %2d %s %s\n", $1, $2, $3, $4, $5 ) }')
}

# print results
#
echo
echo "TIME DRIFT ON $(uname -n)"
echo "========================================================================================"

			pdate " rdate $refer_timeserver" "$date_ref"
[ "$kusa_server" ] &&	pdate " rdate $kusa_server" "$date_kusa"
			pdate " date command" "$date_os"
[ "$date_hw" ] &&	pdate " hwclock command" "$date_hw"

echo

exit 0

