#!/usr/bin/env bash LOG_FILE="Logs/api.log" GHAYMAH_ENDPOINT_URL="http://hosted.ghaymah.systems" # Function to get server metrics get_server_metrics() { # Get IP address IP=$(hostname -I | awk '{print $1}') # Get CPU usage CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}') # Get RAM available RAM_AVAILABLE=$(free -h | grep Mem | awk '{print $7}') # Get disk space DISK_SPACE=$(df -h / | awk 'NR==2 {print $4}') # Return JSON formatted metrics echo "{ \"ip\": \"$IP\", \"cpu_usage\": \"${CPU_USAGE}%\", \"ram_available\": \"$RAM_AVAILABLE\", \"disk_space\": \"$DISK_SPACE\" }" } # Function to send alert send_alert() { local error_code="$1" local error_message="$2" local timestamp="$3" local server_metrics=$(get_server_metrics) curl -X POST "$GHAYMAH_ENDPOINT_URL" \ -H "Content-Type: application/json" \ -d "{ \"error\": \"$error_code\", \"timestamp\": \"$timestamp\", \"message\": \"$error_message\", \"server_metrics\": $server_metrics }" } # Main monitoring loop tail -f "$LOG_FILE" | while read -r line; do level=$(echo "$line" | jq -r '.Level') timestamp=$(echo "$line" | jq -r '.Timestamp') status_code=$(echo "$line" | jq -r '.Properties.StatusCode') message=$(echo "$line" | jq -r '.MessageTemplate') if [ "$level" = "Error" ] || [ "$level" = "Warning" ]; then send_alert "$level" "$message" "$timestamp" continue fi # Check for HTTP error codes (4XX, 5XX) if [[ "$status_code" =~ ^[45][0-9]{2}$ ]]; then send_alert "$status_code" "$message" "$timestamp" fi done