#!/usr/bin/env bash
LOGCHECK_BIN="/usr/sbin/logcheck"
STATEDIR="/var/lib/logcheck"
LOGFILE="$STATEDIR/my-logcheck.log"
OFFSETFILE="$STATEDIR/my-offset.journal"
IS_TESTMODE=0

# テストモード指定の確認
for arg in "$@"; do
	if [ "$arg" = "-t" ]; then
		IS_TESTMODE=1
		break
	fi
done

# 前回実行時刻を取得
if [ -f "$OFFSETFILE" ]; then
	OFFSETTIME="--since=@$(stat -c %Y "$OFFSETFILE")"
else
	OFFSETTIME="--since=-5h"
fi

# ログファイルを待避
if [ -f "$LOGFILE" ]; then
	mv -f "$LOGFILE" "$LOGFILE.1"
fi

# ジャーナルログから警告以上のログを抽出
LASTTIME=$(date +"%Y-%m-%d %H:%M:%S")
journalctl -p warning..emerg --quiet "$OFFSETTIME" >> "$LOGFILE" 2>&1

# Logcheckを実行
"$LOGCHECK_BIN" "$@"
LOGCHECK_EXITCODE=$?

# Logcheckが正常終了したら実行時刻を更新
if [ $LOGCHECK_EXITCODE -eq 0 ]; then
	if [ $IS_TESTMODE -eq 0 ]; then
		touch -d "$LASTTIME" "$OFFSETFILE"
	fi
else
	echo "E: my-logcheck: logcheck exited with error status $LOGCHECK_EXITCODE. Offset not updated." >&2
	exit $LOGCHECK_EXITCODE
fi
