#!/bin/bash

# ==========================================
# KONFIGURASI
# ==========================================
LOG_FILE="/var/log/setup_nagios_ubuntu.log"
NAGIOS_MONITORING_IP="202.157.186.88"
PLUGIN_DIR="/usr/lib/nagios/plugins"
CFG_FILE="/etc/nagios/nrpe.cfg"

# Redirect output ke layar & log
exec > >(tee -a "$LOG_FILE") 2>&1

echo "#######################################################"
echo "STARTING NAGIOS SETUP (UBUNTU/DEBIAN) - $(date)"
echo "#######################################################"

# ==========================================
# STEP 1: INSTALL PACKAGES
# ==========================================
echo "[STEP 1] Installing Nagios NRPE & Plugins..."

apt-get update
apt-get install -y nagios-nrpe-server nagios-plugins nagios-plugins-basic nagios-plugins-standard curl

echo "Packages Installed."

# ==========================================
# STEP 2: CREATE CUSTOM PLUGINS
# ==========================================
echo "[STEP 2] Creating Custom Scripts..."

# Pastikan folder plugin ada
mkdir -p $PLUGIN_DIR
cd $PLUGIN_DIR

# --- 1. Create check_mailq (From your attachment) ---
cat > check_mailq <<'EOF'
#!/bin/bash
#EXIM=/usr/sbin/exim
#EXIM=$(which exim)
WARNING="400"
CRITICAL="500"
MAILER=""
TIMER=""

while getopts "w:c:M:t" optionName; do
  case "${optionName}" in
    w) WARNING="${OPTARG}";;
    c) CRITICAL="${OPTARG}";;
    M) MAILER="${OPTARG}";;
    t) TIMER="${OPTARG}";;
  esac
done

#SUDO=/usr/bin/sudo
#MAILS_IN_QUEUE=`$SUDO  -u root exim -bpc`
MAILS_IN_QUEUE=`exim -bpc`

if [[ ${MAILS_IN_QUEUE} -gt ${CRITICAL} ]]; then
  echo "CRITICAL: Current queue is ${MAILS_IN_QUEUE} (threshold w = ${CRITICAL})|unsent=${MAILS_IN_QUEUE};${WARNING};${CRITICAL};0"
  exit 2
elif [[ ${MAILS_IN_QUEUE} -gt ${WARNING} ]]; then
  echo "WARNING: Currrent queue is ${MAILS_IN_QUEUE} (threshold w = ${WARNING})|unsent=${MAILS_IN_QUEUE};${WARNING};${CRITICAL};0"
  exit 1
elif [[ ${MAILS_IN_QUEUE} -lt ${WARNING} ]]; then
  echo "OK: Current queue is ${MAILS_IN_QUEUE} (threshold w = ${WARNING})|unsent=${MAILS_IN_QUEUE};${WARNING};${CRITICAL};0"
  exit 0
else
  echo "ERROR: something did not go right"
  exit 2
fi
EOF

# --- 2. Create check_init_service (From your attachment) ---
cat > check_init_service <<'EOF'
#!/bin/sh

PROGNAME=`basename $0`

print_usage() {
        echo "Usage: $PROGNAME"
}

print_help() {
        echo ""
        print_usage
        echo ""
        echo "This plugin checks the status of services normally started by the init process."
        echo ""
        support
        exit 0
}


case "$1" in
        --help)
                print_help
                exit 0
                ;;
        -h)
                print_help
                exit 0
                ;;
        *)

                if [ $# -eq 1 ]; then 
                        /usr/sbin/service $1 status
                        ret=$?
                        case "$ret" in
                             0)
                                exit $ret
                                ;;
                             *)
                                exit 2
                                ;;
                        esac
                else
                        echo "ERROR: No service name specified on command line"
                        exit 3
                fi
                ;;
esac
EOF

# Perbaikan Path Service: Di ubuntu modern path service ada di /usr/sbin/service
# Script asli pakai /sbin/service, saya sesuaikan sedikit di atas agar compatible.

# Set Permissions
chmod +x check_mailq
chmod +x check_init_service

echo "Custom Scripts Created."

# ==========================================
# STEP 3: CONFIGURE NRPE
# ==========================================
echo "[STEP 3] Configuring nrpe.cfg..."

# Backup Config
cp $CFG_FILE $CFG_FILE.bak

# 1. Set Allowed Hosts
# Menggunakan sed untuk replace baris allowed_hosts
sed -i "s/^allowed_hosts=.*/allowed_hosts=127.0.0.1,${NAGIOS_MONITORING_IP}/g" $CFG_FILE

# 2. Hapus command bawaan yang akan kita replace (biar ga duplikat)
sed -i '/^command\[check_load\]/d' $CFG_FILE
sed -i '/^command\[check_disk\]/d' $CFG_FILE
# Hapus command lain jika ada di default ubuntu
sed -i '/^command\[check_users\]/d' $CFG_FILE
sed -i '/^command\[check_total_procs\]/d' $CFG_FILE
sed -i '/^command\[check_zombie_procs\]/d' $CFG_FILE

# 3. Hitung Load CPU (Logic Tabel)
CPU_COUNT=$(nproc)
WARN_LOAD="5,5,5"; CRIT_LOAD="10,10,10"

if [ "$CPU_COUNT" -eq 1 ]; then WARN_LOAD="1,1,2"; CRIT_LOAD="2,3,4";
elif [ "$CPU_COUNT" -eq 2 ]; then WARN_LOAD="1,1,2"; CRIT_LOAD="2,3,4";
elif [ "$CPU_COUNT" -eq 3 ]; then WARN_LOAD="1,2,3"; CRIT_LOAD="2,3,4";
elif [ "$CPU_COUNT" -eq 4 ]; then WARN_LOAD="2,3,4"; CRIT_LOAD="3,4,5";
elif [ "$CPU_COUNT" -eq 5 ]; then WARN_LOAD="3,4,5"; CRIT_LOAD="4,5,6";
elif [ "$CPU_COUNT" -eq 6 ]; then WARN_LOAD="4,5,6"; CRIT_LOAD="5,6,7";
elif [ "$CPU_COUNT" -eq 7 ]; then WARN_LOAD="5,6,7"; CRIT_LOAD="6,7,8";
elif [ "$CPU_COUNT" -eq 8 ]; then WARN_LOAD="6,7,8"; CRIT_LOAD="7,8,9";
elif [ "$CPU_COUNT" -ge 9 ]; then WARN_LOAD="7,8,9"; CRIT_LOAD="8,9,10";
fi

echo "CPU Cores: $CPU_COUNT | Load Threshold: W=$WARN_LOAD C=$CRIT_LOAD"

# 4. Inject Command Baru
cat >> $CFG_FILE <<EOF

# --- CUSTOM IDCH COMMANDS ---
command[check_load]=${PLUGIN_DIR}/check_load -r -w $WARN_LOAD -c $CRIT_LOAD
command[check_disk]=${PLUGIN_DIR}/check_disk -w 10% -c 5% -p /
command[check_mailq]=${PLUGIN_DIR}/check_mailq
command[check_mysql]=${PLUGIN_DIR}/check_init_service mysql
command[check_acronis]=${PLUGIN_DIR}/check_init_service aakore
EOF

# ==========================================
# STEP 4: RESTART SERVICE & FIREWALL
# ==========================================
echo "[STEP 4] Restarting Services..."

# Restart NRPE
/etc/init.d/nagios-nrpe-server restart

# Setup UFW (Firewall standar Ubuntu)
if command -v ufw > /dev/null; then
    if ufw status | grep -q "Status: active"; then
        echo "UFW Active, allowing port 5666..."
        ufw allow 5666/tcp
        ufw reload
    fi
fi

echo "#######################################################"
echo "NAGIOS SETUP COMPLETED!"
echo "Log: $LOG_FILE"
echo "#######################################################"