#!/bin/sh
# Ubiquiti AP Packet Loss Monitor (Zoho Cliq Bot) - Streamlined Version
# Author: Evan
# Modified: $(date)
# Version: 3.1
# Description: Reports all loss events, clears logs periodically to prevent RAM issues.

# Prompt for API key
echo "Enter the Zoho Cliq API Key:"
read var_apiKey

# Set up variables
var_cliqWebhook="https://cliq.zoho.com/company/709535273/api/v2/bots/bashbot/incoming?zapikey=$var_apiKey"
var_logFile="/tmp/ping_logs/ping_report.csv"
var_logDir="/tmp/ping_logs"
var_pingHosts="8.8.8.8 1.1.1.1 66.181.254.201"

# Ensure log directory exists
mkdir -p "$var_logDir"

# CSV Header (If first run)
if [ ! -f "$var_logFile" ]; then
    echo "Timestamp,Host,Packet Loss %,Min RTT,Avg RTT,Max RTT" > "$var_logFile"
fi

# Function to run continuous ping logging
func_pingTest() {
    while :  
    do
        var_timestamp=$(date +"%Y-%m-%d %H:%M:%S")
        for var_host in $var_pingHosts
        do
            var_pingResult=$(ping -c 10 -q "$var_host")
            var_loss=$(echo "$var_pingResult" | awk -F'[, %]+' '/packet loss/ {print $7}')
            var_rttStats=$(echo "$var_pingResult" | awk -F'/' '/rtt/ {print $4","$5","$6}')

            echo "$var_timestamp,$var_host,${var_loss:-100},$var_rttStats" >> "$var_logFile"
        done
        sleep 30
    done
}

# Function to report all detected loss events
func_sendAlert() {
    while :  
    do
        var_lossEvents=""
        while IFS=, read -r log_timestamp log_host log_loss log_min log_avg log_max; do
            if [ "$log_loss" != "0" ] && [ "$log_loss" != "" ]; then
                var_lossEvents="$var_lossEvents\n📡 *$log_host* lost **$log_loss%** at $log_timestamp"
            fi
        done < "$var_logFile"

        if [ "$var_lossEvents" != "" ]; then
            curl -s -X POST "$var_cliqWebhook" \
                -H "Content-Type: application/json" \
                -d "{\"text\": \"⚠️ Packet Loss Events: $var_lossEvents\"}"
        fi

        sleep 300
    done
}

# Function to clear log file every 2 hours
func_clearLog() {
    while :  
    do
        echo "Timestamp,Host,Packet Loss %,Min RTT,Avg RTT,Max RTT" > "$var_logFile"
        sleep 7200  # Clear every 2 hours
    done
}

# Run functions in the background
func_pingTest &
func_sendAlert &
func_clearLog &

# Keep script running
wait
