Files
EventHubBack/Makefile

314 lines
12 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
.PHONY: help clean compile shell test eunit test-api test-all \
dialyzer xref cover docs release run stop logs
# Цвета для вывода (только для команд, где нужны)
GREEN := \033[0;32m
YELLOW := \033[1;33m
RED := \033[0;31m
BLUE := \033[0;34m
NC := \033[0m
# Переменные
REBAR3 := rebar3
SNAME := eventhub
SHELL := /bin/bash
# ============================================================================
# HELP
# ============================================================================
help: ## Показать это сообщение
@echo "EventHub - Makefile команды:"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " %-20s %s\n", $$1, $$2}'
# ============================================================================
# BUILD
# ============================================================================
compile: ## Скомпилировать проект
@echo "Компиляция проекта..."
@$(REBAR3) compile
@echo "✓ Компиляция завершена"
clean: ## Очистить проект
@echo "Очистка проекта..."
@$(REBAR3) clean
#@rm -rf _build build/ct_run.* deps logs *.log
@rm -rf build/ct_run.* deps logs *.log
@echo "✓ Очистка завершена"
deps: ## Установить зависимости
@echo "Установка зависимостей..."
@$(REBAR3) get-deps
@echo "✓ Зависимости установлены"
update-deps: ## Обновить зависимости
@echo "Обновление зависимостей..."
@$(REBAR3) update-deps
@echo "✓ Зависимости обновлены"
# ============================================================================
# DEVELOPMENT
# ============================================================================
shell: ## Запустить интерактивную оболочку
@echo "Запуск Erlang shell..."
@$(REBAR3) shell --sname $(SNAME)
run: ## Запустить приложение (foreground)
@echo "Запуск приложения..."
@$(REBAR3) shell --sname $(SNAME)
test-server: ## Запустить тестовый сервер в фоне
@echo "Cleaning old data..."
@rm -rf Mnesia.*
@echo "Starting server..."
@$(REBAR3) shell --sname eventhub_test </dev/null > /tmp/eventhub_test.log 2>&1 &
@echo "PID: $$!"
@for i in 1 2 3 4 5 6 7 8 9 10; do \
if curl -s http://localhost:8080/health | grep -q "ok"; then \
echo "✓ Server ready at http://localhost:8080"; \
break; \
fi; \
sleep 1; \
done
stop: ## Остановить приложение
@echo "Остановка приложения..."
@pkill -f "rebar3 shell --sname $(SNAME)" || true
@pkill -f "beam.*$(SNAME)" || true
@echo "✓ Приложение остановлено"
restart: stop run ## Перезапустить приложение
# ============================================================================
# TESTING
# ============================================================================
test: eunit ## Запустить все тесты (алиас для eunit)
eunit: ## Запустить EUnit тесты
@echo "Запуск EUnit тестов..."
@$(REBAR3) eunit --sname $(SNAME)_test --verbose
eunit-module: ## Запустить тесты для модуля (make eunit-module MODULE=core_calendar_tests)
@echo "Запуск тестов для модуля $(MODULE)..."
@$(REBAR3) eunit --sname $(SNAME)_test --module=$(MODULE) --verbose
eunit-verbose: ## Запустить EUnit тесты с подробным выводом
@echo "Запуск EUnit тестов (verbose)..."
@$(REBAR3) eunit --sname $(SNAME)_test --verbose
test-api: test-ct
test-ct: ## Запустить Common Test для API
@$(REBAR3) ct --sname $(SNAME)_api_test
test-ct-verbose: ## Запустить Common Test с подробным выводом
@ct_run -suite test/api_SUITE \
-pa _build/default/lib/*/ebin \
-pa test/api \
-logdir build \
-verbosity 50
test-scripts: ## Запустить тесты с фильтром (make test-runner PATTERN=booking)
@chmod +x test/scripts/*.sh
@cd test/scripts && ./run_tests.sh $(PATTERN)
test-all: eunit test-api ## Запустить ВСЕ тесты (EUnit + API)
@echo "========================================"
@echo " ВСЕ ТЕСТЫ ПРОЙДЕНЫ!"
@echo "========================================"
# ============================================================================
# LOAD TESTING
# ============================================================================
tsung-test: ## Запустить нагрузочный тест Tsung
@echo "Запуск нагрузочного теста Tsung..."
@mkdir -p logs/tsung
@tsung -f test/tsung/eventhub_http.xml -l logs/tsung start
@echo "Отчёт: logs/tsung/*/report.html"
wrk-register: ## Нагрузочный тест регистрации (wrk2)
@wrk -t4 -c100 -d30s -t100 -s test/wrk/scripts/wrk_register.lua http://localhost/v1/register
wrk-search: ## Нагрузочный тест поиска (wrk2)
@TOKEN=$$(curl -s -X POST http://localhost:8080/v1/register \
-H "Content-Type: application/json" \
-d '{"email":"wrktest@test.com","password":"pass"}' | \
grep -o '"token":"[^"]*"' | cut -d'"' -f4); \
wrk -t4 -c100 -d30s -t200 \
-H "Authorization: Bearer $$TOKEN" \
http://localhost:8080/v1/search?type=event\&q=test
curl-health:
for i in {1..120}; do curl -k -s -o /dev/null -w "%{http_code}\n" -H "Host: api.eventhub.local" https://localhost/health; done
wrk-health: ## Нагрузочный тест health (wrk2)
wrk -t4 -c100 -d30s -t100 \
-H "Host: api.eventhub.local" \
https://api.eventhub.local/health
# ============================================================================
# CODE QUALITY
# ============================================================================
dialyzer: ## Запустить Dialyzer (статический анализ)
@echo "Запуск Dialyzer..."
@$(REBAR3) dialyzer
@echo "✓ Dialyzer завершён"
xref: ## Запустить Xref (кросс-ссылки)
@echo "Запуск Xref..."
@$(REBAR3) xref
@echo "✓ Xref завершён"
cover: ## Запустить тесты с покрытием кода
@echo "Запуск тестов с покрытием..."
@$(REBAR3) eunit --sname $(SNAME)_test --cover
@$(REBAR3) cover --verbose
@echo "✓ Отчёт о покрытии в _build/test/cover/"
docs: ## Сгенерировать документацию (EDoc)
@echo "Генерация документации..."
@$(REBAR3) edoc
@echo "✓ Документация в doc/"
# ============================================================================
# RELEASE & DOCKER
# ============================================================================
release: ## Собрать релиз
@echo "Сборка релиза..."
@$(REBAR3) as prod release
@echo "✓ Релиз собран в _build/prod/rel/eventhub/"
# ============================================================================
# DOCKER
# ============================================================================
docker-build: ## Собрать Docker образ
@echo "Сборка Docker образа..."
@docker build -f docker/Dockerfile -t eventhub:latest .
@echo "✅ Docker образ собран"
docker-build-debug: ## Собрать Docker образ
@echo "Сборка Docker образа..."
@docker build -f docker/Debug.Dockerfile -t eventhub-debug:latest .
@echo "✅ Docker образ собран"
docker-run: ## Запустить Docker контейнер (одиночный)
@echo "Запуск Docker контейнера..."
@docker run -d \
--hostname eventhub.local \
--env-file docker/.env \
--name eventhub \
-e NODE_NAME=eventhub@eventhub.local \
-p 8080:8080 \
-p 8081:8081 \
-p 8445:8445 \
-p 8446:8446 \
-v eventhub-data:/app/data \
eventhub:latest
@echo "✅ Контейнер запущен на http://localhost:8080"
docker-stop: ## Остановить Docker контейнер
@echo "Остановка Docker контейнера..."
@docker stop eventhub 2>/dev/null || true
@docker rm eventhub 2>/dev/null || true
@echo "✅ Контейнер остановлен"
docker-logs: ## Показать логи Docker контейнера
@docker logs -f eventhub
docker-shell: ## Зайти в Docker контейнер
@docker exec -it eventhub sh
docker-compose-build-app: ## Собрать Docker образ
@echo "Сборка Docker образа..."
@docker-compose -f docker/docker-compose.yml build --no-cache eventhub-node1 eventhub-node2 eventhub-node3
@echo "✅ Docker образ собран"
docker-compose-up: ## Запустить кластер (3 ноды)
@echo "Запуск кластера EventHub (3 ноды)..."
@docker-compose -f docker/docker-compose.yml --env-file docker/.env up -d
@echo "✅ Кластер запущен"
@echo "Node 1: http://localhost:8080"
@echo "Node 2: http://localhost:8082"
@echo "Node 3: http://localhost:8084"
@echo "Prometheus: http://localhost:9090"
@echo "Grafana: http://localhost:3000"
@echo "ObserverWeb: http://localhost:4000/observer/"
@echo "Traefik: http://localhost:8080"
@echo "LogLynx: http://localhost:6123"
docker-compose-down: ## Остановить кластер
@echo "Остановка кластера..."
@docker-compose -f docker/docker-compose.yml --env-file docker/.env down
@echo "✅ Кластер остановлен"
docker-compose-logs: ## Показать логи кластера
@docker-compose -f docker/docker-compose.yml --env-file docker/.env logs -f
docker-clean: docker-stop ## Очистить Docker образы и volumes
@docker rmi eventhub:latest 2>/dev/null || true
@docker volume rm eventhub-data 2>/dev/null || true
@echo "✅ Docker очищен"
# ============================================================================
# UTILITIES
# ============================================================================
status: ## Проверить статус сервера
@echo "Проверка статуса сервера..."
@if curl -s http://localhost:8080/health > /dev/null 2>&1; then \
echo "✓ Сервер запущен на http://localhost:8080"; \
curl -s http://localhost:8080/health; \
else \
echo "✗ Сервер не запущен"; \
fi
tree: ## Показать структуру проекта
@tree -I '_build|deps|logs|.git' --dirsfirst 2>/dev/null || ls -la
info: ## Показать информацию о проекте
@echo "EventHub - информация о проекте:"
@echo ""
@echo "API эндпоинты:"
@echo " POST /v1/register - Регистрация"
@echo " POST /v1/login - Логин"
@echo " POST /v1/refresh - Обновление токена"
@echo " GET /v1/user/me - Профиль"
@echo " POST /v1/calendars - Создание календаря"
@echo " GET /v1/calendars - Список календарей"
@echo " POST /v1/calendars/:id/events - Создание события"
@echo " POST /v1/events/:id/bookings - Запись на событие"
@echo ""
@echo "Порты:"
@echo " HTTP API: 8080"
@echo " Admin HTTP: 8445"
# ============================================================================
# DEVELOPMENT WORKFLOW
# ============================================================================
dev-setup: deps compile ## Настроить окружение для разработки
@echo "✓ Окружение настроено"
dev-test: ## Быстрый цикл: compile + eunit
@make compile
@make eunit
# ============================================================================
# GIT HELPERS
# ============================================================================
git-status: ## Показать статус Git
@git status --short
git-log: ## Показать лог Git (последние 10)
@git log --oneline -10
git-save: ## Сохранить изменения (commit + push)
@read -p "Сообщение коммита: " msg; \
git add .; \
git commit -m "$$msg"; \
git push
# ============================================================================
# DEFAULT
# ============================================================================
.DEFAULT_GOAL := help