????
| Current Path : /proc/self/root/proc/1683224/root/lib/check_mk_agent/local/ |
| Current File : //proc/self/root/proc/1683224/root/lib/check_mk_agent/local/Status_Jetbackup_LastRun |
#!/bin/bash
# CheckMK Local Check – Monitor JetBackup Last Backup Status & Stuck Jobs
# Lokasi: /usr/lib/check_mk_agent/local/Status_Jetbackup_LastRun
# Ambil data API
API_OUTPUT=$(jetbackup5api -F listBackupJobs -O json 2>/dev/null)
# Validasi API Output
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
NOW_EPOCH=$(date +%s)
WARN_THRESHOLD=24
CRIT_THRESHOLD=48
# 1. CEK APAKAH ADA JOB YANG STUCK (Running terlalu lama)
# Mencari job yang 'running: true' dan menghitung usianya sejak 'last_run'
STUCK_INFO=$(echo "$API_OUTPUT" | jq -r '.data.jobs[] | select(.disabled == 0 and .running == true) | .name, .last_run' | sed 'N;s/\n/|/')
STUCK_AGE=0
STUCK_JOB_NAME=""
if [[ -n "$STUCK_INFO" ]]; then
while IFS='|' read -r name last_run; do
START_EPOCH=$(date -d "$last_run" +%s)
AGE=$(( (NOW_EPOCH - START_EPOCH) / 3600 ))
if [[ $AGE -gt $STUCK_AGE ]]; then
STUCK_AGE=$AGE
STUCK_JOB_NAME=$name
fi
done <<< "$STUCK_INFO"
fi
# 2. CEK KAPAN TERAKHIR BACKUP SUKSES (Bukan yang sedang running)
LAST_COMPLETED_TIME=$(echo "$API_OUTPUT" | jq -r '.data.jobs[] | select(.disabled == 0 and .running == false and .last_run != "") | .last_run' | sort -r | head -n1)
if [[ -z "$LAST_COMPLETED_TIME" ]]; then
LAST_SUCCESS_AGE=0
else
SUCCESS_EPOCH=$(date -d "$LAST_COMPLETED_TIME" +%s)
LAST_SUCCESS_AGE=$(( (NOW_EPOCH - SUCCESS_EPOCH) / 3600 ))
fi
# --- LOGIKA KEPUTUSAN STATUS ---
# Prioritas 1: Jika ada job yang STUCK lebih dari batas CRITICAL
if [[ $STUCK_AGE -gt $CRIT_THRESHOLD ]]; then
STATE=2
STATUS_TEXT="CRITICAL - Job [$STUCK_JOB_NAME] STUCK running for ${STUCK_AGE}h"
# Prioritas 2: Jika backup terakhir sukses sudah terlalu lama
elif [[ $LAST_SUCCESS_AGE -gt $CRIT_THRESHOLD ]]; then
STATE=2
STATUS_TEXT="CRITICAL - Last successful backup ${LAST_SUCCESS_AGE}h ago"
# Prioritas 3: Jika ada job stuck tapi masih di level WARNING
elif [[ $STUCK_AGE -gt $WARN_THRESHOLD ]]; then
STATE=1
STATUS_TEXT="WARNING - Job [$STUCK_JOB_NAME] running for ${STUCK_AGE}h"
# Prioritas 4: Jika backup terakhir sukses di level WARNING
elif [[ $LAST_SUCCESS_AGE -gt $WARN_THRESHOLD ]]; then
STATE=1
STATUS_TEXT="WARNING - Last successful backup ${LAST_SUCCESS_AGE}h ago"
# Kondisi Sehat
else
STATE=0
STATUS_TEXT="OK - Last backup ${LAST_SUCCESS_AGE}h ago (No stuck jobs)"
fi
# Output untuk Checkmk
echo "$STATE Status_Jetbackup_LastRun age=${LAST_SUCCESS_AGE}h;${WARN_THRESHOLD};${CRIT_THRESHOLD};; - $STATUS_TEXT"