#!/bin/sh -fu

SYSTEMD_COLORS=0
PIDFILE=/run/nagwad.pid
LOG_USER=nagios
CONFDIR=/etc/nagwad
LOGDIR=/var/log/nagwad
ARCHSUF=".archived"
LANG=C
export SYSTEMD_COLORS LANG

echo $$ >$PIDFILE

find_filters()
{
    find "$CONFDIR" -maxdepth 1 ! -type d -name '*.regexp' | \
        (
            sep=
            while read f; do
                f="${f##*/}"
                echo -n "$sep"
                echo -n "${f%.regexp}"
                sep=" "
            done
        )
    echo
}

process_event()
{
	local base="$1"; shift
    local event="$*"
	local NAME=

    mkdir -p "$LOGDIR/$base"
    mkdir -p "$LOGDIR/$base$ARCHSUF"

	if ! grep -qxs "$event" "$LOGDIR/$base$ARCHSUF"; then
        # do not repeat archived events
        NAME="$(mktemp -p "$LOGDIR/$base/" "${base}XXX")"
		chown "$LOG_USER" "$NAME"
        chmod 0400 "$NAME"
		printf '%s' "$event" >"$NAME"
    fi
}

filters="$(find_filters)"

if [ -z "$filters" ]; then
    echo "No filters found. Try to put some *.regexp files in the $CONFDIR." >&2
    exit 0
else
    echo "Run with the following filters: $filters" >&2
fi

# Run the main filter for all patterns
/bin/journalctl -f | \
	grep --line-buffered $(for f in $filters; do echo " -f $CONFDIR/$f.regexp"; done) | (
    while read -r event; do
        # Handle a pre-filtered event
        for f in $filters; do
            if printf '%s' "$event" | grep -q -f $CONFDIR/$f.regexp; then
                process_event "$f" "$event"
            fi
        done
    done
)
