70-deployment/check-engineering-platform-environment.sh

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$ROOT/lib/env.sh"
ENV_FILE="${1:-}"
load_env "$ENV_FILE"
for v in EP_ENVIRONMENT EP_HTTP_HOST EP_HTTP_PORT EP_RUNTIME_ROOT EP_INSTALLATION_ROOT EP_DATABASE_HOST EP_DATABASE_PORT EP_DATABASE_NAME EP_DATABASE_USER EP_DATABASE_PASSWORD EP_DEFAULT_UI_LANGUAGE EP_SUPPORTED_LANGUAGES EP_ARTIFACT_SEED_MODE EP_SEED_MANIFEST; do
  require_var "$v"
done
fail=0
check_cmd() {
  if command -v "$1" >/dev/null 2>&1; then
    echo "OK   $1: $($1 --version 2>&1 | head -n1)"
  else
    echo "FAIL $1 fehlt"
    fail=1
  fi
}
for cmd in go node npm python3 mariadb mariadb-admin systemctl ss; do check_cmd "$cmd"; done
if command -v go >/dev/null 2>&1; then
  actual="$(go env GOVERSION | sed 's/^go//')"
  python3 -c 'import sys; a=tuple(map(int,sys.argv[1].split(".")[:2])); r=(1,23); print("OK   Go-Version erfüllt >= 1.23") if a>=r else (_ for _ in ()).throw(SystemExit("FAIL Go-Version < 1.23"))' "$actual" || fail=1
fi
if systemctl is-active --quiet mariadb; then
  echo "OK   MariaDB-Systemdienst ist aktiv"
else
  echo "FAIL MariaDB-Systemdienst ist nicht aktiv"
  fail=1
fi
if mariadb-admin --host="$EP_DATABASE_HOST" --port="$EP_DATABASE_PORT" --user="$EP_DATABASE_USER" --password="$EP_DATABASE_PASSWORD" ping >/dev/null 2>&1; then
  echo "OK   Datenbankzugang für $EP_DATABASE_USER"
else
  echo "FAIL Datenbankzugang für $EP_DATABASE_USER / $EP_DATABASE_NAME"
  fail=1
fi
[[ -f "$EP_SEED_MANIFEST" ]] && echo "OK   Seed-Manifest vorhanden" || { echo "FAIL Seed-Manifest fehlt: $EP_SEED_MANIFEST"; fail=1; }
[[ "$EP_SUPPORTED_LANGUAGES" == *de* && "$EP_SUPPORTED_LANGUAGES" == *en* && "$EP_SUPPORTED_LANGUAGES" == *uk* ]] || { echo "FAIL Sprachen de,en,uk fehlen"; fail=1; }
if ss -ltn 2>/dev/null | awk '{print $4}' | grep -Eq "[:.]${EP_HTTP_PORT}$"; then
  echo "WARN Port $EP_HTTP_PORT ist bereits belegt"
else
  echo "OK   Port $EP_HTTP_PORT ist frei"
fi
exit "$fail"