#!/bin/bash
# Local MariaDB ping + connection count.
# Reads creds from /etc/vexor/db.env (pymysql env-file: VEXOR_DB_PASSWORD=, VEXOR_DB_URL=mysql+pymysql://user:pass@host/db).
set -o pipefail
ENV_FILE=/etc/vexor/db.env
if ! command -v mysql >/dev/null; then
  echo "CRITICAL: mysql client missing"
  exit 2
fi
START=$(date +%s%N)
USER=""; HOST=""; DB=""; PASS=""
if [ -r "$ENV_FILE" ]; then
  PASS=$(grep -E "^VEXOR_DB_PASSWORD=" "$ENV_FILE" | head -1 | cut -d= -f2-)
  URL=$(grep -E "^VEXOR_DB_URL=" "$ENV_FILE" | head -1 | cut -d= -f2-)
  if [ -n "$URL" ]; then
    USER=$(echo "$URL" | sed -E 's|^[^:]+://([^:]+):.*|\1|')
    HOST=$(echo "$URL" | sed -E 's|^[^@]+@([^:/?]+).*|\1|')
    DB=$(echo "$URL"   | sed -E 's|.*/([^/?]+)(\?.*)?$|\1|')
  fi
fi
RC=1
OUT=""
if [ -n "$USER" ] && [ -n "$HOST" ]; then
  OUT=$(MYSQL_PWD="$PASS" mysql -u"$USER" -h"$HOST" -NBe "SELECT 1" "$DB" 2>&1)
  RC=$?
fi
if [ "$RC" -ne 0 ]; then
  OUT=$(mysql -uroot -NBe "SELECT 1" 2>&1)
  RC=$?
fi
END=$(date +%s%N)
MS=$(( (END - START) / 1000000 ))
if [ "$RC" -ne 0 ]; then
  MSG=$(printf '%s' "$OUT" | tr -d '\n' | cut -c1-160)
  echo "CRITICAL: MariaDB unreachable: ${MSG} | response_time=${MS}ms"
  exit 2
fi
if [ -n "$USER" ] && [ -n "$HOST" ]; then
  CONNS=$(MYSQL_PWD="$PASS" mysql -u"$USER" -h"$HOST" -NBe "SHOW GLOBAL STATUS LIKE 'Threads_connected'" 2>/dev/null | cut -f2)
else
  CONNS=$(mysql -uroot -NBe "SHOW GLOBAL STATUS LIKE 'Threads_connected'" 2>/dev/null | cut -f2)
fi
CONNS=${CONNS:-0}
echo "OK: MariaDB responding (${CONNS} conns) | response_time=${MS}ms connections=${CONNS}"
exit 0