#!/bin/sh
# Короткий отчёт о состоянии экрана — в консоль.
set -u

line() { echo "-------- $* --------"; }

echo
line "DashDash, аптайм $(cut -d. -f1 /proc/uptime)с"

for unit in dashdash-agent dashdash-kiosk; do
	printf '%-16s %s\n' "$unit" "$(systemctl is-active "$unit" 2>/dev/null)"
done

line "экраны"
found=0
for status in /sys/class/drm/card*-*/status; do
	[ -f "$status" ] || continue
	found=1
	printf '  %-22s %s\n' "$(basename "$(dirname "$status")")" "$(cat "$status")"
done
[ "$found" = 1 ] || echo "  разъёмов DRM не видно вовсе"

line "cog"
if command -v cog >/dev/null 2>&1; then
	cog --version 2>&1 | head -1 | sed 's/^/  /'
	# Платформа DRM — отдельный модуль; если его нет, --platform=drm не заработает.
	for dir in /usr/lib/*/cog/modules /usr/lib/cog/modules; do
		[ -d "$dir" ] || continue
		echo "  модули: $(ls "$dir" 2>/dev/null | tr '\n' ' ')"
	done
else
	echo "  не установлен"
fi

line "сеть"
# Проверять командой, а не кодом возврата конвейера.
if command -v nmcli >/dev/null 2>&1; then
	nmcli -t -f DEVICE,TYPE,STATE device status 2>/dev/null | head -5 | sed 's/^/  /'
else
	echo "  nmcli не установлен"
fi

line "память"
# MemAvailable, а не free: свободной памяти на Linux почти никогда нет, и пугаться её малости незачем.
awk '/^(MemTotal|MemAvailable|SwapTotal|SwapFree|CmaTotal|CmaFree):/ {printf "  %-14s %6d МБ\n", $1, $2/1024}' /proc/meminfo 2>/dev/null
for name in cog WPEWebProcess; do
	rss=$(ps -eo comm=,rss= 2>/dev/null | awk -v n="$name" '$1 ~ n {s += $2} END {print int(s/1024)}')
	[ -n "$rss" ] && [ "$rss" -gt 0 ] && printf '  %-14s %6d МБ\n' "$name" "$rss"
done

line "чем кончалась память"
# Код возврата конвейера — от последней команды, то есть всегда 0.
kills=$(journalctl -k -b --no-pager 2>/dev/null | grep -iE "out of memory|oom-kill|killed process" | tail -3)
if [ -n "$kills" ]; then
	echo "$kills" | sed 's/^/  /'
else
	echo "  ядро никого не убивало"
fi

line "видео и GPU"
# Отказы распределения кадров и ошибки драйвера дисплея.
gpu=$(journalctl -k -b --no-pager 2>/dev/null | grep -iE "cma|drm|mali|lima|dma_alloc|atomic update failed" | tail -5)
if [ -n "$gpu" ]; then
	echo "$gpu" | sed 's/^/  /'
else
	echo "  драйвер дисплея молчит"
fi

line "последнее от киоска"
journalctl -u dashdash-kiosk -b --no-pager -n 12 -o cat 2>/dev/null | sed 's/^/  /'

line "конец отчёта"
echo "  повторяется раз в 10 минут; выключить: systemctl disable --now dashdash-report.timer"
echo
