#!/bin/bash

# Copyright (c) 2025 Karl Deutsch
# Alle Rechte vorbehalten (All Rights Reserved)
#
# Dieses Skript ist unter der GPL lizenziert.

# Dateivariablen

TMPFILE=$(mktemp /tmp/zfscheckr.XXXXXX)
GREPFILE=$(mktemp /tmp/zfscheckg.XXXXXX)
SPOOLFILE="/var/lib/check_mk_agent/spool/zfscheck"

# aktuelle Zeit
JETZT=$(date +%s)

# CRIT wenn älter als 2 Stunden
CRITWERT=7200

# Wenn SPOOLFILE schon existiert, dann löschen
if [ -e $SPOOLFILE ] 
    then
        rm $SPOOLFILE
fi

# Snapshots mit Proxmox-Bordmitteln auslesen und in Datei schreiben
for snapshot in $(zfs list -H -t all -o name);
 do
    echo -ne "$snapshot"
    zfs get -H -p type,creation,guid,used,available,userrefs,com.sun:auto-snapshot,tv.sysops:checkzfs $snapshot |  awk '{print $3}'|
        while IFS= read -r line; do
            echo -ne "\t${line}"
        done
    echo  "" 
done >> $TMPFILE

# SPOOLFILE erzeugen mit Header für Local Check
echo '<<<local>>>' >> $SPOOLFILE

# Uns interessieren nur die snapshots
grep snapshot $TMPFILE >> $GREPFILE

# Sammeldatei auslesen, bearbeiten und wegspeichern
while read SERVICE TYPE TIME MESSAGE
do

# Differenz von jetzt zum erstellten Snapshot erzeugen
    DIFFERENZ=$((JETZT-TIME))

# Wenn größer als 2 Stunden, dann CRIT sonst OK
    if [ $DIFFERENZ -ge $CRITWERT ]
    then
        STATUS="2"
    else
        STATUS="0"
    fi

# Zeitstempel aus Servicenamen entfernen
    TEIL=${SERVICE%%?????????????}

# Ausgabezeile erzeugen
 echo "$STATUS Snapshot$TEIL - erstellt $(date --date @$TIME)"
done < $GREPFILE >> $SPOOLFILE

echo '<<<>>>' >> $SPOOLFILE

# Temporäre Dateien entfernen
rm $TMPFILE
rm $GREPFILE
