47 lines
2.7 KiB
Bash
47 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
# Clusev themed MOTD — printed at host login (Debian/Ubuntu run-parts MOTD).
|
|
# Installed by install.sh, which substitutes __CLUSEV_URL__, __CLUSEV_VERSION__ and
|
|
# __CLUSEV_COMPOSE__ (absolute path to docker-compose.prod.yml). Signal-orange brand,
|
|
# live stack status, no emoji (status = colour + dot). Idempotent: install.sh only ever
|
|
# overwrites this single 00-clusev file, never other MOTD parts. Never fails a login
|
|
# (every dynamic lookup degrades to "unbekannt").
|
|
O=$'\033[38;5;208m' # signal-orange (brand)
|
|
G=$'\033[38;5;42m' # online green
|
|
E=$'\033[38;5;203m' # offline red
|
|
D=$'\033[2m' # dim
|
|
B=$'\033[1m' # bold
|
|
R=$'\033[0m' # reset
|
|
|
|
URL="__CLUSEV_URL__"
|
|
VERSION="__CLUSEV_VERSION__"
|
|
COMPOSE="__CLUSEV_COMPOSE__"
|
|
|
|
# Live stack status — "X/Y Dienste aktiv" (green when all up, red otherwise). Best-effort:
|
|
# any failure (no docker, daemon down, file moved) falls back to a dim "Status unbekannt".
|
|
stack_status() {
|
|
command -v docker >/dev/null 2>&1 || { printf '%s● Status unbekannt%s' "$D" "$R"; return; }
|
|
[ -f "$COMPOSE" ] || { printf '%s● Status unbekannt%s' "$D" "$R"; return; }
|
|
local total running
|
|
total=$(docker compose -f "$COMPOSE" config --services 2>/dev/null | grep -c .)
|
|
running=$(docker compose -f "$COMPOSE" ps --status running -q 2>/dev/null | grep -c .)
|
|
if [ "${total:-0}" -gt 0 ] && [ "${running:-0}" = "$total" ]; then
|
|
printf '%s● %s/%s Dienste aktiv%s' "$G" "$running" "$total" "$R"
|
|
elif [ "${total:-0}" -gt 0 ]; then
|
|
printf '%s● %s/%s aktiv — Stack pruefen%s' "$E" "$running" "$total" "$R"
|
|
else
|
|
printf '%s● Status unbekannt%s' "$D" "$R"
|
|
fi
|
|
}
|
|
|
|
printf '%s\n' ""
|
|
printf ' %s%s█▀▀ █ █ █ █▀▀ █▀▀ █ █%s\n' "$B" "$O" "$R"
|
|
printf ' %s%s█ █ █ █ ▀▀█ █▀▀ █ █%s\n' "$B" "$O" "$R"
|
|
printf ' %s%s▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀ ▀ %s %sFleet Control · v%s%s\n' "$B" "$O" "$R" "$D" "$VERSION" "$R"
|
|
printf ' %s──────────────────────────────────────────────────────────%s\n' "$D" "$R"
|
|
printf ' %sDashboard%s %s%s%s\n' "$D" "$R" "$O" "$URL" "$R"
|
|
printf ' %sStack%s %s\n' "$D" "$R" "$(stack_status)"
|
|
printf ' %sLogin%s %sStandard-Passwort: clusev — beim ersten Login aendern · Reset: clusev:reset-admin%s\n' "$D" "$R" "$D" "$R"
|
|
printf ' %sVerwalten%s %sdocker compose -f docker-compose.prod.yml ps | logs -f | restart%s\n' "$D" "$R" "$D" "$R"
|
|
printf ' %s──────────────────────────────────────────────────────────%s\n' "$D" "$R"
|
|
printf '%s\n' ""
|