Зачем. Демонстрационный DAG example_clickstream_hello ничего не проверял: он не обращался ни к ClickHouse, ни к Kafka, поэтому его зелёный результат ничего не говорил о стенде. Пробники проверяют связи по-настоящему — и тем же клиентом, каким будут ходить рабочие DAG. Что. - test_clickhouse: пишет строку в ReplicatedMergeTree на ноде 1 и читает её с ноды 2 через Distributed. Данные проходят путь «нода 2 → все шарды → шард ноды 1», то есть проверяется межшардовое чтение, а не одна нода. - test_kafka: пишет в постоянный топик сообщение с меткой прогона и вычитывает его обратно. - infra/airflow/Dockerfile: clickhouse-connect 1.6.0 и confluent-kafka 2.15.0 вшиты в образ, импорт проверяется на сборке — при запуске контейнера пакеты не доустанавливаются. - Проверки: scripts/stand-smoke.sh гоняет оба пробника через API Airflow, scripts/config-test.sh разбирает DAG без стенда, tests/stand-smoke-guards.sh проверяет красный путь, tests/dag-probes-unit.py — модульные проверки разбора. - README и ADR 0001 обновлены тем же изменением. - Удалён dags/example_clickstream_hello.py. Проверка. make config-test — пройдено 3, 3 и 6, ошибок 0. make clean; cp .env.example .env; make up — 116 с на чистых томах. make smoke — пройдено 25, ошибок 0; стенд занимает 2244,0 MiB. make smoke-cluster — все 8 проверок кластера. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
49 lines
2.2 KiB
Bash
Executable File
49 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
readonly ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
readonly README="$ROOT_DIR/README.md"
|
|
|
|
grep -Eq 'нода 1.*28123.*29000' "$README"
|
|
grep -Eq 'нода 2.*28124.*29001' "$README"
|
|
printf 'ЗЕЛЁНО: README перечисляет HTTP- и нативные порты обеих нод.\n'
|
|
|
|
grep -Eq 'После первого запуска.*`make clean`' "$README"
|
|
printf 'ЗЕЛЁНО: README объясняет сброс томов после смены исходных учётных данных.\n'
|
|
|
|
grep -Fxq -- '- нода 2 — `http://127.0.0.1:28124`, нативный порт `29001`;' "$README"
|
|
printf 'ЗЕЛЁНО: список портов остаётся единым списком.\n'
|
|
|
|
awk '
|
|
previous == "`make config-test` проверяет Compose, синтаксис Bash и Python, малые проверки" &&
|
|
$0 == "логики пробников и пробельные ошибки в diff без запуска стенда." {
|
|
found = 1
|
|
}
|
|
{previous = $0}
|
|
END {exit !found}
|
|
' "$README"
|
|
printf 'ЗЕЛЁНО: README перечисляет малые проверки пробников в составе config-test.\n'
|
|
|
|
awk '
|
|
previous == "После изменения `infra/clickhouse/config.d/prometheus.xml` выполните" &&
|
|
$0 == "`docker compose restart clickhouse-01 clickhouse-02`: обычный `make up` не" {
|
|
found = 1
|
|
}
|
|
{previous = $0}
|
|
END {exit !found}
|
|
' "$README"
|
|
printf 'ЗЕЛЁНО: README требует перезапуск ClickHouse после изменения настройки метрик.\n'
|
|
|
|
grep_status=0
|
|
grep -q '3,4 GB' "$ROOT_DIR/scripts/stand-smoke.sh" || grep_status=$?
|
|
if [[ "$grep_status" -eq 0 ]]; then
|
|
printf 'ОШИБКА: отчёт проверки использует латинское обозначение GB.\n' >&2
|
|
exit 1
|
|
elif [[ "$grep_status" -ne 1 ]]; then
|
|
printf 'ОШИБКА: не удалось проверить обозначение единицы памяти.\n' >&2
|
|
exit 1
|
|
fi
|
|
printf 'ЗЕЛЁНО: отчёт проверки использует русское обозначение ГБ.\n'
|
|
|
|
printf 'ИТОГ: пройдено 6, ошибок 0\n'
|