#!/bin/bash

# ==========================================
# CONFIGURATION
# ==========================================
LOG_FILE="/var/log/plesknagios.log"
NAGIOS_MONITORING_IP="202.157.186.88"

# Redirect output ke layar & log
exec > >(tee -a "$LOG_FILE") 2>&1

echo "#######################################################"
echo "STARTING PLESK & NAGIOS SETUP - $(date)"
echo "#######################################################"

# ==========================================
# STEP 1: INSTALL PLESK (ONE CLICK)
# ==========================================
echo "[STEP 1] Cek Status Plesk..."

if command -v plesk &> /dev/null; then
    echo "Plesk sudah terinstall. Lanjut ke konfigurasi."
else
    echo "Plesk belum ada. Install sekarang..."
    # Installer resmi Plesk
    sh <(curl https://autoinstall.plesk.com/one-click-installer || wget -O - https://autoinstall.plesk.com/one-click-installer)
fi

# ==========================================
# STEP 2: SET HOSTNAME (PLESK WAY)
# ==========================================
echo "[STEP 2] Memastikan Hostname..."

MAIN_IP=$(hostname -I | awk '{print $1}')
IP_DASH=${MAIN_IP//./-}
NEW_HOSTNAME="${IP_DASH}.idcloudhosting.my.id"

echo "Target Hostname: $NEW_HOSTNAME"

# Set Hostname di Linux
hostnamectl set-hostname $NEW_HOSTNAME
# Set Hostname di Database Plesk (Penting biar sync)
plesk bin server_pref --update -hostname $NEW_HOSTNAME

# ==========================================
# STEP 3: SETUP NAGIOS NRPE
# ==========================================
echo "[STEP 3] Setup Nagios NRPE..."

# Clean Cache
dnf clean all
rm -rf /var/cache/dnf

# 3a. Install Paket
echo "--> Installing Packages..."
dnf install epel-release -y
dnf install nrpe nagios-plugins-{load,http,users,procs,disk,swap,nrpe,uptime,dns} -y
dnf install nagios-plugins-perl -y

# 3b. Download Custom Scripts
echo "--> Preparing Custom Script Directory..."
mkdir -p /usr/local/nagios/libexec
cd /usr/local/nagios/libexec

echo "--> Downloading Scripts..."
# Exim Queue (NOTE: Plesk biasanya Postfix, pastikan ini sesuai)
wget https://paste.idcloudhosting.my.id/paste/jk3xs/raw -O eximqueue.sh
chmod +x eximqueue.sh
chown root:root eximqueue.sh
sed -i -e 's/\r$//' eximqueue.sh

# Check Service
wget https://paste.idcloudhosting.my.id/paste/mqw2e/raw -O check_service2
chmod +x check_service2
chown root:root check_service2
sed -i -e 's/\r$//' check_service2

# 3c. Config Visudo
echo "--> Configuring Visudo..."
if ! grep -q "nagios ALL=(ALL) NOPASSWD" /etc/sudoers; then
    echo "" >> /etc/sudoers
    echo "nagios ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/" >> /etc/sudoers
    echo "Defaults:nagios !requiretty" >> /etc/sudoers
fi

# 3d. Config nrpe.cfg
echo "--> Configuring nrpe.cfg..."
CFG_FILE="/etc/nagios/nrpe.cfg"
cp $CFG_FILE $CFG_FILE.bak

# Set Allowed Hosts
sed -i "s/^allowed_hosts=.*/allowed_hosts=127.0.0.1,${NAGIOS_MONITORING_IP}/g" $CFG_FILE

# Hapus command default
sed -i '/^command\[check_users\]/d' $CFG_FILE
sed -i '/^command\[check_load\]/d' $CFG_FILE
sed -i '/^command\[check_disk\]/d' $CFG_FILE
sed -i '/^command\[check_zombie_procs\]/d' $CFG_FILE
sed -i '/^command\[check_total_procs\]/d' $CFG_FILE
sed -i '/^command\[check_mailq\]/d' $CFG_FILE
sed -i '/^command\[check_mysql\]/d' $CFG_FILE

# Hitung Load CPU
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

# Inject Command Baru
cat >> $CFG_FILE <<EOF

command[check_users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib64/nagios/plugins/check_load -r -w $WARN_LOAD -c $CRIT_LOAD
command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w 10% -c 5% -p /
command[check_zombie_procs]=/usr/lib64/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib64/nagios/plugins/check_procs -w 150 -c 200
command[check_mailq]=/usr/local/nagios/libexec/eximqueue.sh
command[check_mysql]=/usr/local/nagios/libexec/check_service2 mysqld
EOF

# Restart NRPE
systemctl enable nrpe
systemctl restart nrpe

# ==========================================
# STEP 4: FIREWALL (OPEN PORT PLESK & NAGIOS)
# ==========================================
echo "[STEP 4] Configuring Firewall..."

# Buka port standar Plesk + Custom SSH + NRPE
if systemctl is-active --quiet firewalld; then
    # Port Plesk
    firewall-cmd --zone=public --add-port=8443/tcp --permanent
    firewall-cmd --zone=public --add-port=8880/tcp --permanent
    firewall-cmd --zone=public --add-port=8447/tcp --permanent
    # Port Monitoring & SSH Custom
    firewall-cmd --zone=public --add-port=8288/tcp --permanent
    firewall-cmd --zone=public --add-port=5666/tcp --permanent
    firewall-cmd --reload
fi

echo "#######################################################"
echo "SETUP PLESK & NAGIOS COMPLETED!"
echo "Log: $LOG_FILE"
echo "#######################################################"