مراية لـ
https://github.com/Cesarkassis/booking-Api.git
تم المزامنة 2025-11-30 21:32:29 +00:00
91 أسطر
2.1 KiB
Bash
91 أسطر
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
LOG_PATH="../logs/api.log"
|
|
ENDPOINT="https://ghaymah.com/alert"
|
|
LAST_LINE_CHECKED_FILE="/tmp/monitor.lastline"
|
|
|
|
# Read last processed line number
|
|
last_line=$(cat "$LAST_LINE_CHECKED_FILE" 2>/dev/null || echo 0)
|
|
total_lines=$(wc -l < "$LOG_PATH")
|
|
|
|
if ! (command -v jq >/dev/null 2>&1); then
|
|
sudo apt-get install -y jq
|
|
fi
|
|
|
|
#System info
|
|
|
|
function get_HOSTNAME(){
|
|
echo "$(hostname)"
|
|
}
|
|
function get_IP(){
|
|
echo "$(hostname -I | awk '{print $1}')"
|
|
}
|
|
function get_CPU_Usage(){
|
|
echo "$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8"%"}')"
|
|
}
|
|
|
|
function get_MEM_Usage(){
|
|
echo "$(free -m | awk '/Mem/{printf "%.2f%%", $3/$2 * 100}')"
|
|
}
|
|
|
|
function get_DISK_Usage(){
|
|
echo "$(df -h / | awk 'NR==2 {print $5}')"
|
|
}
|
|
|
|
|
|
function build_JSON() {
|
|
local line="$1" # log message as parameter
|
|
|
|
local status_code
|
|
status_code=$(echo "$line" | grep -oP 'status=\K[0-9]+')
|
|
|
|
local timestamp
|
|
timestamp=$(echo "$line" | grep -oP '^\[\K[^\]]+')
|
|
|
|
JSON=$(jq -n \
|
|
--arg host "$(get_HOSTNAME)" \
|
|
--arg ip "$(get_IP)" \
|
|
--arg cpu "$(get_CPU_Usage)" \
|
|
--arg mem "$(get_MEM_Usage)" \
|
|
--arg disk "$(get_DISK_Usage)" \
|
|
--arg log "$line" \
|
|
--arg error "$status_code" \
|
|
--arg timestamp "$timestamp" \
|
|
'{
|
|
error: $error,
|
|
timestamp: $timestamp,
|
|
message: $log,
|
|
server_metrics: {
|
|
host: $host,
|
|
ip: $ip,
|
|
cpu: $cpu,
|
|
mem: $mem,
|
|
disk: $disk
|
|
}
|
|
}'
|
|
)
|
|
|
|
echo "$JSON"
|
|
}
|
|
|
|
|
|
|
|
# Process only new lines (used tail to display last new lines)
|
|
tail -n +"$((last_line+1))" "$LOG_PATH" | while read -r line; do
|
|
line=$(echo "$line" | tr -d '\r')
|
|
|
|
if echo "$line" | grep -E -q '(status=[45][0-9]{2}|failed|timeout)'; then
|
|
#echo " Error detected: $line"
|
|
|
|
build_JSON "$line"
|
|
|
|
|
|
|
|
# Send alert
|
|
#curl -X POST -H "Content-Type: application/json" -d "$JSON" "$ENDPOINT"
|
|
fi
|
|
done
|
|
|
|
# Update last processed line
|
|
echo "$total_lines" > "$LAST_LINE_CHECKED_FILE"
|