????

Your IP : 216.73.217.84


Current Path : /proc/1724857/root/usr/lib/check_mk_agent/local/
Upload File :
Current File : //proc/1724857/root/usr/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"