#!/usr/bin/bash

LOGFILE="system_monitor.log"
INTERVAL=1  # интервал в секундах

# Функция для сбора и записи данных в лог
collect_data() {
    local cpu_load=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
    local mem_used=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }')
    local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
    echo "$timestamp CPU Load: $cpu_load% Memory Usage: $mem_used%" >> "$LOGFILE"
}

# Обработчик сигнала SIGUSR1 — вывод текущего состояния в консоль
handle_status() {
    echo "---------- STATUS REPORT ----------"
    tail -n 5 "$LOGFILE"
    echo "---------------------------------"
}

# Обработчик сигнала SIGINT — корректное завершение скрипта
handle_exit() {
    echo "Завершение мониторинга..."
    exit 0
}

# Назначаем обработчики сигналов
trap 'handle_status' SIGUSR1
trap 'handle_exit' SIGINT

echo "Запуск мониторинга системы. PID: $$"
echo "Для вывода текущего состояния выполните: kill -SIGUSR1 $$"
echo "Для завершения: Ctrl+C"

# Очистка лога при старте
> "$LOGFILE"

# Основной цикл сбора данных
while true; do
    collect_data
    sleep $INTERVAL
done
