File: //lib/check_mk_agent/local/Status_Jetbackup_LastRun
#!/bin/bash
# CheckMK Local Check – Monitor JetBackup Last Backup Status (fixed for active jobs)
API_OUTPUT=$(jetbackup5api -F listBackupJobs -O json 2>/dev/null)
if [[ -z "$API_OUTPUT" ]]; then
echo "2 Status_Jetbackup_LastRun age=0;24;48;; - CRITICAL - Unable to retrieve data from JetBackup API"
exit 0
fi
# Extract jobs array and filter active jobs with last_run not empty, sort by last_run descending
LAST_COMPLETED=$(echo "$API_OUTPUT" | \
jq -r '.data.jobs[] | select(.disabled == 0 and .last_run != "") | .last_run' | \
sort -r | head -n1)
RUNNING=$(echo "$API_OUTPUT" | jq -r '.data.jobs[] | select(.disabled == 0) | .running' | grep true | head -n1)
if [[ -z "$LAST_COMPLETED" ]]; then
echo "2 Status_Jetbackup_LastRun age=0;24;48;; - CRITICAL - No completed backup found"
exit 0
fi
LAST_EPOCH=$(date -d "$LAST_COMPLETED" +%s)
NOW_EPOCH=$(date +%s)
AGE_HOURS=$(( (NOW_EPOCH - LAST_EPOCH) / 3600 ))
WARN_THRESHOLD=24
CRIT_THRESHOLD=48
if [[ "$RUNNING" == "true" && $AGE_HOURS -gt $WARN_THRESHOLD ]]; then
echo "2 Status_Jetbackup_LastRun age=${AGE_HOURS}h;${WARN_THRESHOLD};${CRIT_THRESHOLD};; - CRITICAL - Backup job running too long (${AGE_HOURS}h)"
exit 0
fi
if [[ $AGE_HOURS -gt $CRIT_THRESHOLD ]]; then
STATE=2
STATUS_TEXT="CRITICAL - Last backup ${AGE_HOURS}h ago"
elif [[ $AGE_HOURS -gt $WARN_THRESHOLD ]]; then
STATE=1
STATUS_TEXT="WARNING - Last backup ${AGE_HOURS}h ago"
else
STATE=0
STATUS_TEXT="OK - Last backup ${AGE_HOURS}h ago"
fi
echo "$STATE Status_Jetbackup_LastRun age=${AGE_HOURS}h;${WARN_THRESHOLD};${CRIT_THRESHOLD};; - $STATUS_TEXT"