#!/bin/sh -u

LOGS_DIR=/var/log/alterator-mass-management/
ACTIONS_DIR=/usr/lib/alterator-mass-management/scripts/worker-actions
RESULT=1
logger_server=

PATH="$PATH:/sbin"

usage()
{
	[ "$1" = 0 ] || exec >&2
	cat <<EOF
	Usage: ${0##*/} <task:try> <command> <args>
EOF
	[ -n "$1" ] && exit "$1" || exit
}

log_task()
{
	local task="$1"; shift
	local try="$1"; shift
	local cmd="$1"; shift
	local args="$1"; shift
	local res="$1"; shift

	mkdir -p "$LOGS_DIR/$task"

	out="$(printf "%s|%s|%d|%d" "$cmd" "$args" "$(date +%s)" "$res")"
	echo "$out" >>"$LOGS_DIR/$task/$try.log"

	[ -n "$logger_server" ] && logger -n "$logger_server" -p local3.info -t ansible "$task|$try|$out"
}

[ $# -ge 2 ] || usage 1

TASK="${1%:*}"
TRY="${1#*:}"
shift

# Use remote server for logging
if [ "$1" = "-s" ]; then
	shift
	logger_server="$1"
	shift
fi

CMD="$1"; shift

if [ ! -x  "$ACTIONS_DIR/$CMD" ]; then
	echo "ERROR: $CMD not found" 1>&2
	exit 1
fi

if [ -s "$LOGS_DIR/$TASK/$TRY.log" ] && grep -qs "^$CMD|" "$LOGS_DIR/$TASK/$TRY.log"; then
	echo "WARNING: $CMD for task #$TASK try $TRY is done already" 1>&2
	exit 0
fi

"$ACTIONS_DIR/$CMD" "$@"
RESULT=$?

log_task "$TASK" "$TRY" "$CMD" "$*" "$RESULT"

exit $RESULT
