#!/bin/bash

# Nagios Exit Codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

# Default values
warn=1440
crit=30
OVERRIDE_FILE="/var/lib/nagios/uptime_override"

# Retrieve arguments
while getopts "w:c:f:" opt; do
  case $opt in
    w) warn=$OPTARG ;;
    c) crit=$OPTARG ;;
    f) OVERRIDE_FILE=$OPTARG ;; # Permet de changer le chemin via Icinga
    *) echo "Usage: $0 -w <minutes> -c <minutes> [-f <file_path>]"; exit $STATE_UNKNOWN ;;
  esac
done

# Extract uptime (in seconds) via /proc
uptime_seconds=$(cat /proc/uptime | awk '{print $1}' | cut -d. -f1)
uptime_min=$((uptime_seconds / 60))

# Performance Data
PERFDATA="|uptime_min=${uptime_min}min;${warn};${crit};0;"

# 1. Vérification du fichier d'acquittement
if [ -f "$OVERRIDE_FILE" ]; then
    # Si le système est redevenu "stable" naturellement, on supprime le flag
    if [ "$uptime_min" -gt "$warn" ]; then
        rm -f "$OVERRIDE_FILE"
    else
        echo "OK - Reboot acquitté manuellement (Uptime: ${uptime_min} min)$PERFDATA"
        exit $STATE_OK
    fi
fi

# 2. Logique de décision standard
if [ "$uptime_min" -le "$crit" ]; then
    echo "CRITICAL - Recent reboot detected (${uptime_min} min < threshold ${crit} min)$PERFDATA"
    exit $STATE_CRITICAL
elif [ "$uptime_min" -le "$warn" ]; then
    echo "WARNING - Uptime low (${uptime_min} min < threshold ${warn} min)$PERFDATA"
    exit $STATE_WARNING
else
    echo "OK - System stable (Uptime: ${uptime_min} min)$PERFDATA"
    exit $STATE_OK
fi
