67 lines
2.4 KiB
Bash
Executable File
67 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Проверка контура: сервисы запущены, образ бота — ожидаемый, миграции применены.
|
|
# Использование: ./scripts/check_contour.sh [test|prod]
|
|
set -euo pipefail
|
|
|
|
E="${1:-test}"
|
|
FILE="env/${E}.env"
|
|
|
|
if [ ! -f "$FILE" ]; then
|
|
echo "Нет файла окружения: $FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
COMPOSE="docker compose -p ${E} --env-file ${FILE} -f docker-compose.prod.yml"
|
|
|
|
echo "== контур: ${E} =="
|
|
$COMPOSE ps
|
|
|
|
echo
|
|
echo "== образы =="
|
|
$COMPOSE images
|
|
|
|
echo
|
|
echo "== проверки =="
|
|
|
|
running="$($COMPOSE ps --services --status running || true)"
|
|
fail=0
|
|
for svc in postgres clickhouse bot; do
|
|
if echo "$running" | grep -qx "$svc"; then
|
|
echo "OK ${svc}: running"
|
|
else
|
|
echo "FAIL ${svc}: не запущен" >&2
|
|
fail=1
|
|
fi
|
|
done
|
|
|
|
# миграции: сервис migrate должен завершиться успешно (Exited (0))
|
|
if $COMPOSE ps -a --format '{{.Service}} {{.Status}}' | grep -q '^migrate Exited (0)'; then
|
|
echo "OK migrate: завершён успешно"
|
|
else
|
|
echo "WARN migrate: нет подтверждённого успешного завершения (см. 'logs migrate')" >&2
|
|
fi
|
|
|
|
# БД отвечает
|
|
if $COMPOSE exec -T postgres sh -lc 'pg_isready -U "$POSTGRES_USER" -d "$POSTGRES_DB"' >/dev/null 2>&1; then
|
|
echo "OK postgres: принимает соединения"
|
|
else
|
|
echo "FAIL postgres: не отвечает" >&2
|
|
fail=1
|
|
fi
|
|
|
|
# ClickHouse отвечает и схема аналитики применена (initdb применяется один раз,
|
|
# при первой инициализации пустого data-каталога)
|
|
if $COMPOSE exec -T clickhouse sh -lc 'clickhouse-client --user "$CLICKHOUSE_USER" --password "$CLICKHOUSE_PASSWORD" --query "SELECT 1"' >/dev/null 2>&1; then
|
|
echo "OK clickhouse: принимает запросы"
|
|
if $COMPOSE exec -T clickhouse sh -lc 'clickhouse-client --user "$CLICKHOUSE_USER" --password "$CLICKHOUSE_PASSWORD" --query "SELECT count() FROM analytics.events"' >/dev/null 2>&1; then
|
|
echo "OK clickhouse: таблица analytics.events доступна"
|
|
else
|
|
echo "WARN clickhouse: нет доступа к analytics.events (см. clickhouse/init/001_events.sql)" >&2
|
|
fi
|
|
else
|
|
echo "FAIL clickhouse: не отвечает" >&2
|
|
fail=1
|
|
fi
|
|
|
|
exit $fail
|