#!/bin/bash -eu

. /.initrd/initenv

[ "${RDLOG-}" != 'console' ] &&
	logfile=/var/log/ueventd.log ||
	logfile=/dev/console

exec >>"$logfile" 2>&1

. shell-error
. uevent-sh-functions

message_time=1

export queuedir="$1"
export QUEUE="${queuedir##*/}"
export SESSION="${SESSION:-0}"

glob()
{
	[ -e "$1" ]
}

get_name()
{
	[ ! -d "$fn" ] && [ -x "$fn" ] || return 1
	name="${fn##*/}"
	name="${name#[0-9][0-9][0-9]-}"
}

run_scripts()
{
	local exe

	for exe in "/lib/uevent/each/$1"/*; do
		[ ! -x "$exe" ] || "$exe" "$2" ||:
	done
}

for ev in "$queuedir"/*; do
	message "$QUEUE: session=$SESSION: event $ev"
done

for fn in "$handlerdir/$QUEUE"/*; do
	get_name || continue

	run_scripts pre "$QUEUE"

	message "$QUEUE: session=$SESSION: running queue-specific handler: $fn"
	"$fn" "$queuedir" || message "$QUEUE: session=$SESSION: event handler failed: $fn"

	run_scripts post "$QUEUE"
done

for fn in "$handlerdir"/*; do
	get_name && glob "$queuedir/$name".* || continue

	run_scripts pre "$QUEUE"

	message "$QUEUE: session=$SESSION: running handler: $fn"
	"$fn" || message "$QUEUE: session=$SESSION: event handler failed: $fn"

	run_scripts post "$QUEUE"
done
