Commit Graph
4 Commits
Author SHA1 Message Date
ddadminandClaude Opus 5 2890c7f9fb feat(generator): каркас проекта и контракт схемы события
- Зачем:
  - этап 2 начинается с формы: контракт схемы — источник истины и для
    генерации событий, и для DDL хранилища, а имена пакета и модулей
    задают границы всем следующим тикетам этапа.
- Что:
  - заведён uv-проект generator/ (pyproject.toml и uv.lock в git; numpy,
    pytest и ruff), пакет clickstream_generator.
  - schema.py — контракт: чистые данные о 47 колонках выгрузки (имя
    Метрики, тип ClickHouse, тип numpy, имя для DDS, группа); порядок
    несёт сам кортеж COLUMNS, отдельного поля с номером нет намеренно.
  - schema_doc.py собирает из контракта описание выгрузки
    docs/formats/clickstream-event.md — по нему пишется сторона
    хранилища; документ руками не правится.
  - тесты: инварианты контракта (состав, уникальность, заполненность,
    согласие типов и порядок групп) и свежесть описания выгрузки.
  - цели make lint, make test и make docs; README, AGENTS.md и
    CONTEXT.md дополнены генератором, форматами и словарной статьёй.
- Проверка:
  - make test (248 тестов), make lint, make config-test;
  - make docs, затем git diff --exit-code docs/ — пусто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 22:22:14 +03:00
ddadminandClaude Opus 5 860c88b7f7 chore(tests): выкинуты сторожа документации и тест на комментарий
Зачем

tests/docs-guards.sh сличал README с образцами текста: одна проверка требовала
двух подряд идущих строк дословно, другая — что в отчёте написано «ГБ», а не
«GB». Это тесты на вёрстку абзаца, а не на факт: перестановка слов красит их
в красный, хотя ничего не сломано. README всё равно предстоит переписать
целиком, когда стенд дорастёт до менти, и тогда эти сторожа краснели бы на
здоровом изменении.

Из той же семьи была проверка в stand-smoke-static.sh, требовавшая, чтобы
в scripts/stand-smoke.sh существовал комментарий определённой формулировки.

Что

- удалён tests/docs-guards.sh и его запуск из цели config-test;
- из tests/stand-smoke-static.sh убрана проверка наличия комментария,
  счётчик итога приведён к двум оставшимся.

Оставлены обе содержательные проверки stand-smoke-static.sh: отказ на
недоступных compose.yaml и .env.example и то, что скрипт не виснет в сломанном
окружении.

Ссылка на удалённый файл в ADR 0004 намеренно не правится: там записано, что
было сделано в тот день, и подчищать записи решений под сегодняшнее дерево
значит перестать им верить.

Проверка

make config-test — зелено, 5 и 2.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 15:33:52 +03:00
ddadminandClaude Opus 5 63c42bc068 feat(infra): стенд целиком — Kafka, Airflow 3, Superset и мониторинг одной командой
Зачем: рядом с кластером ClickHouse не хватало остальной платформы, а
поднимать её по кускам — значит каждый раз вспоминать порядок. Теперь
`make up` даёт стенд целиком, а `make smoke` честно отвечает, работает он
или нет.

Что:
- Kafka в режиме KRaft (без ZooKeeper), Postgres под метаданные, Airflow
  3.3 четырьмя сервисами и Superset 6.1 с драйверами ClickHouse;
- мониторинг: Prometheus снимает метрики с обеих нод ClickHouse и keeper,
  Grafana получает подготовленный источник данных;
- подключение Airflow ведёт на ноду 1, подключение Superset — на ноду 2:
  ловушка правильных ошибок, забытый `ON CLUSTER` виден в дашборде сам;
- `scripts/stand-smoke.sh` — сквозная проверка из 24 пунктов: топик в
  Kafka, цели Prometheus, запуск примера DAG через API Airflow, проверка
  подключения Superset и расход памяти против порога 3,4 ГБ;
- `make config-test` — статические ворота: Compose, синтаксис Bash и
  Python, стражи README; стражи smoke проверяют, что отчёт краснеет на
  сломанном стенде и зеленеет после восстановления;
- решения записаны в `docs/adr/0001-stand-services.md`, состав стенда и
  порядок работы — в README.

Проверка: на чистых томах `make clean` → `cp .env.example .env` →
`make up` (1 мин 51 с) → `make smoke` — 24 пройдено, 0 ошибок, 2171 MiB.
Перезапуск `make down` → `make up` → `make smoke` — 24/0. Также зелены
`make config-test` (3/0 и 5/0), `make smoke-cluster` (8/8) и
`make smoke-guards` (3/0 и 3/0).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 08:46:04 +03:00
ddadmin 2f9bb8700e feat(infra): поднят кластер ClickHouse из двух шардов и keeper
- Зачем:
  - этап 1 спеки требует стенд, поднимаемый одной командой; кластер —
    единственный режим, выключателя «без кластера» нет (issue #12).
- Что:
  - compose.yaml: две ноды ClickHouse и отдельный clickhouse-keeper на
    зафиксированном LTS-образе 26.3.17.56, порты только на 127.0.0.1.
  - infra/clickhouse: общее описание кластера, подключение к keeper и
    отдельные макросы shard и replica для каждой ноды.
  - scripts/clickhouse-smoke.sh: восемь проверок ON CLUSTER от описания
    кластера до удаления временных таблиц, вывод по-русски.
  - tests/smoke-guards.sh: три проверки самой smoke-команды —
    ограниченная аварийная очистка, обработка прерывания, окружение keeper.
  - README.md: быстрый старт, роли нод, обоснование выбора версии.
- Проверка:
  - make up && make smoke && make smoke-guards && make clean
2026-07-30 18:53:14 +03:00