File supportconfig-sapwmp of Package sapwmp.16404

#!/bin/bash
set -u

version="1.0"

function display_file() {
    echo -e "\n#==[ Configuration File ]===========================#"
    echo -e "# ${1}"
    if [ -e "${1}" ] ; then
        cat "${1}"
    else
       echo "${1} does not exist."
    fi
}


function display_rpm() {
    echo -e "\n#==[ Command ]======================================#"
    echo -e "# rpm -q ${1} "
    rpm -q "${1}"
}

function display_cmd() {
    echo -e "\n#==[ Command ]======================================#"
    echo -e "# ${@}"
    ${@}
}

function display_cgroup() {
    local f
    echo -e "\n#==[ Cgroup ]=======================================#"
    for f in memory.low memory.current memory.stat memory.events memory.swap.current  ; do
        [[ -e "${1}/${f}" ]] || continue
        echo "# ${1}/${f}"
        cat ${1}/${f}
        echo
    done
}

function display_log() {
    local file
    echo -e "\n#==[ Log File ]=====================================#"
    for file in ${1} ; do
        if [ -n "${3-}" ] ; then
            echo -e "# ${file} - only pattern '${2}' (latest ${3} hits)"
            zgrep "${2}" "${file}" | tail -n "${3}"
        else
            echo -e "# ${file} - only pattern '${2}'"
            zgrep "${2}" "${file}"
        fi
    done
}

function display_instance_profiles() {
    local p profile
    echo -e "\n#==[ Configuration]================================#"

    # Extracts profile pathes from running processes.
    while read profile ; do
        [[ "${profile}" =~ /host_profile ]] && continue
        echo "# ${profile}"
        cat "${profile}"
        echo
    done < <(
        while read p ; do
            [ "${p:0:3}" = "pf=" ] || continue
            echo "${p:3}"
        done < <(ps -eo cmd | tr ' ' '\n') | sort -u )
}

function display_swapped_procs() {
    local path pid comm swappss
    echo -e "\n#==[ Configuration ]================================#"
    echo "# /proc/[0-9]*/smaps - only SwapPSS > 0"
    printf "      SwapPss  Process\n-------------  ---------------------------\n"
    for path in /proc/[1-9]* ; do
        # smaps take time, tolerate gone PIDs
        [ -d ${path} ] || continue
        pid="${path##*/}"
        read comm < /proc/${pid}/comm
        swappss=$(awk 'BEGIN { swappss = 0 } /^SwapPss:/ { swappss += $2 } END {print swappss}' "${path}/smaps")
        [ "0${swappss}" -eq 0 ] && continue
        printf "%10d kB  %s[%d]\n" "${swappss}" "${comm}" ${pid}
    done
}


# ---- Main ----
echo "# Version: ${version}"
display_cmd grep cgroup /proc/mounts
display_file /proc/cmdline
display_file /etc/default/grub
display_rpm sapwmp
display_file /etc/sapwmp.conf
(
if [ -e /etc/sapwmp.conf ] ; then
    . /etc/sapwmp.conf
    if [ -n "${DEFAULT_SLICE:=}" ] ; then
        display_cmd systemctl cat "${DEFAULT_SLICE}"
        display_cmd systemctl show -p MemoryLow "${DEFAULT_SLICE}"
        while read subcgroup ; do
            display_cmd systemctl cat "${subcgroup##*/}"
        done < <(find "/sys/fs/cgroup/${DEFAULT_SLICE}" -mindepth 1 -maxdepth 1 -type d)
    else
        echo -e "\n#==[ Variable ]=====================================#\nDEFAULT_SLICE (/etc/sapwmp.conf) not set!"
    fi
fi
)
display_cmd systemctl status wmp-sample-memory.timer
display_cmd systemctl cat wmp-sample-memory.timer
display_instance_profiles
display_cmd systemd-cgls --all --no-pager
while read path ; do
        display_cgroup "${path}"
done < <(find /sys/fs/cgroup/ -mindepth 1 -maxdepth 1 -type d)
display_swapped_procs
display_log '/var/log/messages*' sapwmp-capture 100
display_log '/var/log/messages' wmp_memory_current 100

# Bye.
exit 0
openSUSE Build Service is sponsored by