/
ievlev
/
TOP-AI
Обзор
Документация
Войти
/
ievlev
/
TOP-AI
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Makefile
102 строки
4 KB
KIevlev
contract: зависимости стендов, схема событий и имена объектов хранилищ
27 июл 2026, 21:40
27 июл 2026, 21:40
288480d
Код
Авторство
О чём код?
# Единый интерфейс работы с репозиторием ФОС. # Контракт стендов: stands/README.md. Версии компонентов: stands/version-matrix.md. SHELL := /bin/bash STANDS := hadoop minio hive hbase spark kafka airflow ozone WORK_DIR := data/work GEN := data/generators # Общая внешняя сеть: часть стендов использует слой хранения другого стенда # (см. раздел «Зависимости между стендами» в stands/README.md). NETWORK := topai .DEFAULT_GOAL := help .PHONY: help help: ## показать список команд @echo "Стенды: $(STANDS)" @echo @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \ | awk 'BEGIN {FS = ":.*?## "}; {printf " %-22s %s\n", $$1, $$2}' @echo @echo " up-<стенд> поднять стенд (например: make up-hadoop)" @echo " down-<стенд> остановить стенд, сохранив данные" @echo " clean-<стенд> остановить и удалить тома стенда" @echo " smoke-<стенд> проверить готовность стенда" # --- Управление стендами ----------------------------------------------------- # Каждый стенд лежит в stands/<name> и обязан содержать docker-compose.yml, # .env.example и smoke-test.sh (см. stands/README.md). define stand_env @if [[ ! -d "stands/$(1)" ]]; then \ echo "Стенд '$(1)' не найден: нет каталога stands/$(1)"; exit 1; fi @if [[ ! -f "stands/$(1)/.env" ]]; then \ cp "stands/$(1)/.env.example" "stands/$(1)/.env" && \ echo "Создан stands/$(1)/.env из .env.example"; fi endef up-%: ## поднять стенд $(call stand_env,$*) @docker network inspect $(NETWORK) >/dev/null 2>&1 \ || docker network create $(NETWORK) docker compose --project-directory "stands/$*" \ --env-file "stands/$*/.env" up -d @echo "Стенд '$*' запущен. Проверка: make smoke-$*" down-%: ## остановить стенд, сохранив данные docker compose --project-directory "stands/$*" down clean-%: ## остановить стенд и удалить его тома docker compose --project-directory "stands/$*" down -v rm -rf "stands/$*/volumes" smoke-%: ## проверить готовность стенда @bash "stands/$*/smoke-test.sh" .PHONY: smoke smoke: ## проверить все стенды, у которых есть запущенные контейнеры @failed=0; checked=0; \ for s in $(STANDS); do \ [[ -f "stands/$$s/smoke-test.sh" ]] || continue; \ running=$$(docker compose --project-directory "stands/$$s" ps -q 2>/dev/null); \ [[ -z "$$running" ]] && continue; \ checked=$$((checked+1)); \ echo "== $$s"; \ bash "stands/$$s/smoke-test.sh" || failed=$$((failed+1)); \ done; \ if [[ $$checked -eq 0 ]]; then echo "Нет запущенных стендов."; fi; \ exit $$failed .PHONY: down down: ## остановить все стенды @for s in $(STANDS); do \ [[ -f "stands/$$s/docker-compose.yml" ]] || continue; \ docker compose --project-directory "stands/$$s" down; \ done # --- Учебные данные ---------------------------------------------------------- .PHONY: data data: ## сгенерировать стандартный комплект учебных данных @mkdir -p $(WORK_DIR) python3 $(GEN)/gen_sales.py --rows 1000000 --out $(WORK_DIR)/sales.csv python3 $(GEN)/gen_weblog.py --rows 3000000 --out $(WORK_DIR)/access.log python3 $(GEN)/gen_events.py --rows 200000 --out $(WORK_DIR)/events.jsonl @echo "Данные готовы в $(WORK_DIR). Паспорта наборов выведены выше." .PHONY: clean-data clean-data: ## удалить сгенерированные данные rm -rf $(WORK_DIR) # --- Проверки репозитория ---------------------------------------------------- .PHONY: check-secrets check-secrets: ## проверить PDF-вложения на реквизиты и внутренние адреса python3 scripts/scan-pdf-secrets.py .PHONY: check-links check-links: ## проверить относительные ссылки в Markdown @bash scripts/check-links.sh .PHONY: check check: check-links check-secrets ## все проверки репозитория