#!/bin/bash
#
# snuk-systemd
#

VERSION="1.1"

FAIL=0
SYSTEMD_LIBDIR="/usr/lib64/systemd"

check() {
    local FILE="$1"

    if [[ -e "$FILE" ]]; then
        printf "[OK]   %s\n" "$FILE"
    else
        printf "[FAIL] %s\n" "$FILE"
        ((FAIL++))
    fi
}

echo
echo "Snuk Systemd Runtime Validator v$VERSION"
echo

# Detect installed systemd library version
CORE_FILES=( "$SYSTEMD_LIBDIR"/libsystemd-core-*.so )

if [[ -e "${CORE_FILES[0]}" ]]; then
    CORE_FILE="${CORE_FILES[0]}"
    SYSTEMD_VERSION="${CORE_FILE##*-core-}"
    SYSTEMD_VERSION="${SYSTEMD_VERSION%.so}"

    echo "Detected systemd library version: $SYSTEMD_VERSION"

    check "$SYSTEMD_LIBDIR/libsystemd-core-$SYSTEMD_VERSION.so"
    check "$SYSTEMD_LIBDIR/libsystemd-shared-$SYSTEMD_VERSION.so"
else
    echo "[FAIL] No libsystemd-core library found in $SYSTEMD_LIBDIR"
    ((FAIL++))
fi

echo

if systemctl --quiet is-system-running; then
    echo "[OK]   system is running"
else
    echo "[WARN] system not fully running"
fi

FAILED=$(systemctl --failed --no-legend 2>/dev/null | wc -l)

if [[ "$FAILED" -eq 0 ]]; then
    echo "[OK]   no failed units"
else
    echo "[WARN] $FAILED failed units"
fi

echo

if [[ "$FAIL" -eq 0 ]]; then
    echo "systemd runtime verified."
    exit 0
else
    echo "systemd runtime problems found."
    exit 1
fi
