Files
mates-server-maintenance/scripts/server-report.sh
T
mates 1eede74dc6 fix: odstranit emoji ze vsech souboru
Kompletne odstraneno:
- Emoji (smajliky, symboly, boxes, arrows) z README
- Emoji ze skriptu (sipky, symboly)
- Emoji z docker-compose (adresare)

Nahrano za:
- Textove alternativy (sipky -> '->', boxes -> '+', atd.)
- ASCII pouze kde to slo

Ciste vsechny 7 repo (overeno Python skriptem).
2026-08-02 08:50:13 +02:00

133 lines
4.0 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#
# server-report.sh - denni report stavu serveru na Telegram.
# Obsahuje: uptime, load, RAM, disk, teplota CPU, Docker kontejnery,
# Docker update log, zalohy, sitovy traffic.
#
# Spust jednou rucne: bash server-report.sh
# Spust automaticky: systemd timer server-report.timer (kazdy den 09:30)
#
# Konfigurace: /home/mates/.telegram.conf
#
set -euo pipefail
# === KONFIGURACE ===
USER_NAME="mates"
WORK_DIR="/home/$USER_NAME"
CONFIG_FILE="$WORK_DIR/.telegram.conf"
DOCKER_ROOT="$WORK_DIR/docker"
DOCKER_UPDATE_LOG="$WORK_DIR/skripty/update-docker-script/docker-update.log"
DOCKER_BACKUP_DIR="$WORK_DIR/zalohy/docker"
HOST=$(hostname)
INTERFACE="eth0" # nastav podle sveho serveru
# Prahy pro upozorneni
DISK_WARN=80
DISK_CRIT=90
TEMP_WARN=70
TEMP_CRIT=80
# === TELEGRAM KONFIGURACE ===
if [[ -f "$CONFIG_FILE" ]]; then
# shellcheck disable=SC1090
source "$CONFIG_FILE"
fi
TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}"
TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}"
send_msg() {
local TEXT="$1"
if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then
echo "Telegram neni nakonfigurovan, preskakuji"
return 0
fi
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
-d text="$TEXT" \
-d parse_mode="Markdown" \
--max-time 10 \
--retry 3 > /dev/null || echo " Telegram chyba"
}
# === SYSTEMOVE STATISTIKY ===
UPTIME=$(uptime -p | sed 's/^up //')
LOAD=$(awk '{print $1" "$2" "$3}' /proc/loadavg)
RAM_USED=$(free -h | awk '/^Mem:/ {print $3}')
RAM_TOTAL=$(free -h | awk '/^Mem:/ {print $2}')
DISK_USED_HUMAN=$(df -h / | awk 'NR==2 {print $3}')
DISK_TOTAL_HUMAN=$(df -h / | awk 'NR==2 {print $2}')
DISK_PERCENT_RAW=$(df -P / | awk 'NR==2 {print $5}' | tr -d '%')
# CPU teplota (pokud je k dispozici)
TEMP_RAW=""
if [[ -f /sys/class/thermal/thermal_zone0/temp ]]; then
TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo "")
fi
TEMP_HUMAN=""
if [[ -n "$TEMP_RAW" && "$TEMP_RAW" -gt 0 ]]; then
TEMP_C=$((TEMP_RAW / 1000))
TEMP_HUMAN=" CPU: ${TEMP_C}°C\n"
fi
# Docker kontejnery
CONTAINERS_RUNNING=$(docker ps -q 2>/dev/null | wc -l | tr -d ' ')
CONTAINERS_TOTAL=$(docker ps -aq 2>/dev/null | wc -l | tr -d ' ')
CONTAINERS_STOPPED=$((CONTAINERS_TOTAL - CONTAINERS_RUNNING))
# Sitovy traffic (pokud je dostupny)
NETWORK_RX=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes 2>/dev/null || echo "0")
NETWORK_TX=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes 2>/dev/null || echo "0")
NETWORK_RX_HUMAN=$(awk "BEGIN {printf \"%.2f GB\", $NETWORK_RX/1073741824}")
NETWORK_TX_HUMAN=$(awk "BEGIN {printf \"%.2f GB\", $NETWORK_TX/1073741824}")
# Posledni Docker update a zaloha
LAST_UPDATE="zatim neprobehla"
if [[ -f "$DOCKER_UPDATE_LOG" ]]; then
LAST_UPDATE=$(grep -E "=== (docker-update|update.sh) (spusten|dokoncen)" "$DOCKER_UPDATE_LOG" | tail -1 | awk '{print $1, $2}')
fi
LAST_BACKUP="zatim neprobehla"
if [[ -d "$DOCKER_BACKUP_DIR" ]]; then
LAST_BACKUP=$(ls -t "$DOCKER_BACKUP_DIR"/*/ 2>/dev/null | head -1 | xargs -I {} basename {} 2>/dev/null || echo "neni")
fi
# === SESTAVENI REPORTU ===
ALERTS=""
if [[ $DISK_PERCENT_RAW -ge $DISK_CRIT ]]; then
ALERTS="${ALERTS} *DISK KRITICKY: ${DISK_PERCENT_RAW}%*\n"
elif [[ $DISK_PERCENT_RAW -ge $DISK_WARN ]]; then
ALERTS="${ALERTS} *DISK: ${DISK_PERCENT_RAW}%*\n"
fi
if [[ -n "$TEMP_RAW" && "$TEMP_RAW" -gt 0 ]]; then
TEMP_C=$((TEMP_RAW / 1000))
if [[ $TEMP_C -ge $TEMP_CRIT ]]; then
ALERTS="${ALERTS} *CPU KRITICKY: ${TEMP_C}°C*\n"
elif [[ $TEMP_C -ge $TEMP_WARN ]]; then
ALERTS="${ALERTS} *CPU: ${TEMP_C}°C*\n"
fi
fi
# === ODESLANI ===
REPORT="${ALERTS} *[$HOST]* Denni report
⏱️ Uptime: \`$UPTIME\`
Load: \`$LOAD\`
RAM: $RAM_USED / $RAM_TOTAL
Disk: $DISK_USED_HUMAN / $DISK_TOTAL_HUMAN (${DISK_PERCENT_RAW}%)
${TEMP_HUMAN} Sit ($INTERFACE):
RX: $NETWORK_RX_HUMAN | TX: $NETWORK_TX_HUMAN
Docker:
Bezi: $CONTAINERS_RUNNING | Celkem: $CONTAINERS_TOTAL
Stopped: $CONTAINERS_STOPPED
Posledni Docker update: \`$LAST_UPDATE\`
Posledni zaloha: \`$LAST_BACKUP\`"
send_msg "$REPORT"
exit 0