#!/bin/bash
#
# BRUNIE
#
# Systeminformationen sammeln
#
# Angepasst fr:
#   - CentOS 10
#   - GT.M 7.1
#   - systemd
#

###############################################################################
# Grundeinstellungen
###############################################################################

BRUNIE_DIR="/brunie"
LOGDIR="${BRUNIE_DIR}/log"
LOGFILE="systeminfo.txt"
LOG="${LOGDIR}/${LOGFILE}"

EXT_IP_FILE="${LOGDIR}/ext_ip.txt"
STARTUP_LOG="${LOGDIR}/startup.log"
SHUTDOWN_LOG="${LOGDIR}/shutdown.log"

TRENNER="==================================================================================="

###############################################################################
# Log-Verzeichnis prfen
###############################################################################

if [ ! -d "${LOGDIR}" ]; then
    mkdir -p "${LOGDIR}" || {
        echo "FEHLER: ${LOGDIR} konnte nicht angelegt werden."
        exit 1
    }
fi

###############################################################################
# Grundeinstellungen / Systeminformationen
###############################################################################

HOST="$(hostname)"

SYS="$(uname -s)"
RELEASE="$(uname -r)"
MACHINE="$(uname -m)"

if [ -f /etc/os-release ]; then
    OS="$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2- | tr -d '"')"
else
    OS="Unbekannt"
fi

###############################################################################
# IP-Adressen
###############################################################################

# Erste globale IPv4-Adresse
INT_IP1="$(
    ip -4 addr show scope global 2>/dev/null |
    awk '/inet / {
        sub("/.*", "", $2);
        print $2;
        exit
    }'
)"

if [ -z "${INT_IP1}" ]; then
    INT_IP1="nicht gefunden"
fi

if [ -f "${EXT_IP_FILE}" ]; then
    EXTIP="$(cat "${EXT_IP_FILE}")"
else
    EXTIP="nicht vorhanden"
fi

###############################################################################
# Netzwerk / MUMPS-Prozesse
###############################################################################

NET_MUMPS="$(
    ss -taulpen 2>/dev/null |
    grep mumps || true
)"

###############################################################################
# Arbeitsspeicher
###############################################################################

RAM_TOT="$(
    free -m 2>/dev/null |
    awk '/^Mem:/ {
        printf "Total:  %s MB", $2
    }'
)"

RAM_USE="$(
    free -m 2>/dev/null |
    awk '/^Mem:/ {
        printf "Used:   %s MB", $3
    }'
)"

RAM_FRE="$(
    free -m 2>/dev/null |
    awk '/^Mem:/ {
        printf "Free:   %s MB", $4
    }'
)"

###############################################################################
# CPU
###############################################################################

CPU_COUNT="$(nproc 2>/dev/null || echo "unbekannt")"

CPU_MODEL="$(
    lscpu 2>/dev/null |
    awk -F: '/Model name/ {
        sub(/^[ \t]+/, "", $2);
        print $2;
        exit
    }'
)"

if [ -z "${CPU_MODEL}" ]; then
    CPU_MODEL="unbekannt"
fi

###############################################################################
# Log-Datei neu erstellen
###############################################################################

rm -f "${LOG}"
touch "${LOG}" || {
    echo "FEHLER: ${LOG} konnte nicht erstellt werden."
    exit 1
}

###############################################################################
# Header
###############################################################################

echo "${TRENNER}" >> "${LOG}"
echo "SYSTEM INFORMATIONEN" >> "${LOG}"
echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Netzwerk Informationen
###############################################################################

echo "Netzwerk Informationen" >> "${LOG}"
echo "" >> "${LOG}"

echo "IP-Adresse:              ${INT_IP1}" >> "${LOG}"
echo "Oeffentliche IP-Adresse: ${EXTIP}" >> "${LOG}"
echo "Netzwerkname:            ${HOST}" >> "${LOG}"

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Netzwerk-Schnittstellen
###############################################################################

echo "Netzwerk-Schnittstellen:" >> "${LOG}"
ip addr show >> "${LOG}" 2>&1

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Netzwerk-Verbindungen
###############################################################################

echo "Netzwerk-Verbindungen:" >> "${LOG}"
ss -taulpen >> "${LOG}" 2>&1

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Betriebssystem Informationen
###############################################################################

echo "Betriebssystem Informationen" >> "${LOG}"
echo "Hostname:       ${HOST}" >> "${LOG}"
echo "Betriebssystem: ${SYS}" >> "${LOG}"
echo "Release-Note:   ${RELEASE}" >> "${LOG}"
echo "Distribution:   ${OS}" >> "${LOG}"
echo "Typ:            ${MACHINE}" >> "${LOG}"

echo "" >> "${LOG}"
echo "${TRENNER}" >> "${LOG}"

###############################################################################
# /etc/fstab
###############################################################################

echo "FSTAB:" >> "${LOG}"
cat /etc/fstab >> "${LOG}" 2>&1

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Festplattenbelegung
###############################################################################

echo "Festplattenbelegung:" >> "${LOG}"
df -h >> "${LOG}" 2>&1

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Arbeitsspeicher
###############################################################################

echo "Arbeitsspeicher:" >> "${LOG}"
echo "${RAM_TOT}" >> "${LOG}"
echo "${RAM_USE}" >> "${LOG}"
echo "${RAM_FRE}" >> "${LOG}"

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Prozessor Informationen
###############################################################################

echo "Prozessor Informationen" >> "${LOG}"
echo "Anzahl:         ${CPU_COUNT}" >> "${LOG}"
echo "Model:          ${CPU_MODEL}" >> "${LOG}"

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# MUMPS Prozesse
###############################################################################

echo "MUMPS Prozesse:" >> "${LOG}"

if [ -n "${NET_MUMPS}" ]; then
    echo "${NET_MUMPS}" >> "${LOG}"
else
    echo "Keine MUMPS-Prozesse bzw. Netzwerkverbindungen gefunden." >> "${LOG}"
fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# GT.M / BRUNIE Datenbanken
###############################################################################

echo "Vorhandene Datenbanken:" >> "${LOG}"

shopt -s nullglob

DB_FILES=( "${BRUNIE_DIR}"/*.dat )

if [ ${#DB_FILES[@]} -gt 0 ]; then
    ls -lh "${DB_FILES[@]}" >> "${LOG}" 2>&1
else
    echo "Keine .dat-Datenbanken gefunden." >> "${LOG}"
fi

shopt -u nullglob

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# GT.M letzter Start
###############################################################################

echo "GT.M das letzte Mal gestartet:" >> "${LOG}"

if [ -f "${STARTUP_LOG}" ]; then
    tail -1 "${STARTUP_LOG}" >> "${LOG}"
else
    echo "Keine startup.log vorhanden." >> "${LOG}"
fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# GT.M letztes Herunterfahren
###############################################################################

echo "GT.M das letzte Mal heruntergefahren:" >> "${LOG}"

if [ -f "${SHUTDOWN_LOG}" ]; then
    tail -1 "${SHUTDOWN_LOG}" >> "${LOG}"
else
    echo "Keine shutdown.log vorhanden." >> "${LOG}"
fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# BRUNIE systemd Service
###############################################################################

echo "BRUNIE API / systemd:" >> "${LOG}"

if command -v systemctl >/dev/null 2>&1; then

    systemctl is-enabled brunie.service >> "${LOG}" 2>&1 || true

    systemctl is-active brunie.service >> "${LOG}" 2>&1 || true

    echo "" >> "${LOG}"

    systemctl status brunie.service \
        --no-pager \
        --full >> "${LOG}" 2>&1 || true

else

    echo "systemctl nicht gefunden." >> "${LOG}"

fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# BRUNIE Prozesse
###############################################################################

echo "BRUNIE Prozesse:" >> "${LOG}"

ps -fu brunie >> "${LOG}" 2>&1 || true

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Backup Informationen
###############################################################################

echo "Backup Informationen:" >> "${LOG}"

BACKUP_LOG="/var/log/brunie/backup_protokoll.txt"

if [ -f "${BACKUP_LOG}" ]; then

    awk '/Backup/ {print $0}' "${BACKUP_LOG}" >> "${LOG}" 2>&1
    awk '/Sicherung/ {print $0}' "${BACKUP_LOG}" >> "${LOG}" 2>&1

else

    echo "Keine Backup-Protokolldatei gefunden:" >> "${LOG}"
    echo "  ${BACKUP_LOG}" >> "${LOG}"

fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Cron-Job
###############################################################################

echo "Cron-Job:" >> "${LOG}"

crontab -l 2>/dev/null |
    grep "brunie" >> "${LOG}" 2>&1 || true

echo "" >> "${LOG}"
echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Samba-Freigaben
###############################################################################

echo "Freigaben:" >> "${LOG}"

if [ -f /etc/samba/smb.conf ]; then

    awk '/path[[:space:]]*=/ {
        print $0
    }' /etc/samba/smb.conf >> "${LOG}" 2>&1

else

    echo "Keine Samba-Konfiguration gefunden." >> "${LOG}"

fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# GT.M Version
###############################################################################

echo "GT.M Informationen:" >> "${LOG}"

if [ -x /usr/gtm/mumps ]; then

    echo "GT.M Verzeichnis: /usr/gtm" >> "${LOG}"

    /usr/gtm/mumps -version >> "${LOG}" 2>&1 || true

else

    echo "GT.M nicht gefunden: /usr/gtm" >> "${LOG}"

fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Systemd Service-Datei
###############################################################################

echo "BRUNIE systemd Service-Datei:" >> "${LOG}"

if [ -f /etc/systemd/system/brunie.service ]; then

    cat /etc/systemd/system/brunie.service >> "${LOG}" 2>&1

else

    echo "Keine brunie.service gefunden." >> "${LOG}"

fi

echo "${TRENNER}" >> "${LOG}"

###############################################################################
# Ausgabe
###############################################################################

echo
echo "Systeminformationen wurden erstellt:"
echo
echo "  ${LOG}"
echo

###############################################################################
# E-Mail versenden
###############################################################################

if command -v mutt >/dev/null 2>&1; then

    mutt \
        -a "${LOG}" \
        -s "Systeminformationen von: ${HOST}" \
        -- "m.zahlmann@brunie.com" \
        < /dev/null

else

    echo "Hinweis: mutt ist nicht installiert."
    echo "Die Systeminformationen wurden nicht per E-Mail versendet."

fi

exit 0