molock 0.1.0

High-performance mock server for CI/CD pipelines and testing
.PHONY: build test test-coverage run docker-build docker-run docker-down clean lint fmt help benchmark benchmark-all benchmark-health benchmark-users benchmark-delay benchmark-post benchmark-docker observability-up observability-down

help:
	@echo "Available targets:"
	@echo "  build        - Build release binary"
	@echo "  test         - Run all tests"
	@echo "  test-coverage - Run tests with coverage report"
	@echo "  run          - Run the application"
	@echo "  docker-build - Build Docker image"
	@echo "  docker-run   - Run with docker-compose"
	@echo "  docker-down  - Stop docker-compose services"
	@echo "  clean        - Clean build artifacts"
	@echo "  lint         - Run clippy linter"
	@echo "  fmt          - Format code with rustfmt"
	@echo "  check        - Check code without building"
	@echo "  dev          - Run in development mode"
	@echo "  benchmark    - Run comprehensive benchmark suite"
	@echo "  benchmark-all - Run all benchmark scenarios"
	@echo "  benchmark-health - Benchmark health endpoints"
	@echo "  benchmark-users - Benchmark user endpoints"
	@echo "  benchmark-delay - Benchmark delayed responses"
	@echo "  benchmark-post - Benchmark POST endpoints"
	@echo "  benchmark-docker - Run benchmarks against Docker Compose stack"
	@echo "  observability-up - Start observability stack only"
	@echo "  observability-down - Stop observability stack"

build:
	cargo build --release

test:
	cargo test --features otel

test-coverage:
	cargo tarpaulin --features otel --out Html --skip-clean --ignore-tests

run:
	cargo run --release -- --config config/molock-config.yaml

dev:
	cargo run --features otel -- --config config/molock-config.yaml

benchmark-run:
	cargo run --release -- --config config/benchmark-config.yaml

docker-build:
	@echo "Building Molock Docker image (multi-stage build)..."
	docker build -f deployment/Dockerfile -t molock .

docker-run:
	docker-compose -f deployment/docker-compose.yml up

clean:
	cargo clean
	rm -rf target/ coverage/

lint:
	cargo clippy --features otel -- -D warnings

fmt:
	cargo fmt --all

check:
	cargo check --features otel

bench:
	cargo bench

doc:
	cargo doc --no-deps --open

benchmark: benchmark-all

benchmark-all:
	@echo "Running comprehensive benchmark suite..."
	@chmod +x benchmarks/benchmark.sh
	@./benchmarks/benchmark.sh

benchmark-health:
	@echo "Running health endpoint benchmarks..."
	@chmod +x benchmarks/health_benchmark.sh
	@./benchmarks/health_benchmark.sh

benchmark-users:
	@echo "Running user endpoint benchmarks..."
	@chmod +x benchmarks/users_benchmark.sh
	@./benchmarks/users_benchmark.sh

benchmark-delay:
	@echo "Running delayed response benchmarks..."
	@chmod +x benchmarks/delay_benchmark.sh
	@./benchmarks/delay_benchmark.sh

benchmark-post:
	@echo "Running POST endpoint benchmarks..."
	@chmod +x benchmarks/post_benchmark.sh
	@./benchmarks/post_benchmark.sh

benchmark-docker:
	@echo "Starting observability stack and Molock in Docker..."
	@echo "Building Docker image and starting services..."
	docker-compose -f deployment/docker-compose.yml up -d --build
	@echo "Waiting for services to start (10 seconds)..."
	@sleep 10
	@echo "Running benchmarks against Dockerized Molock..."
	@chmod +x benchmarks/benchmark.sh
	./benchmarks/benchmark.sh --docker
	@echo ""
	@echo "Benchmarks completed!"
	@echo "Observability UIs:"
	@echo "- Jaeger (traces): http://localhost:16686"
	@echo "- Grafana (metrics): http://localhost:3000 (admin/admin)"
	@echo "- Prometheus: http://localhost:9090"
	@echo ""
	@echo "To stop services: make docker-down"
	@echo "To view logs: docker-compose -f deployment/docker-compose.yml logs -f"

docker-down:
	docker-compose -f deployment/docker-compose.yml down

observability-up:
	@echo "Starting observability stack only..."
	@echo "Note: Molock service will not be started"
	docker-compose -f deployment/docker-compose.yml up -d otel-collector jaeger prometheus grafana
	@echo "Observability stack started:"
	@echo "- Jaeger (traces): http://localhost:16686"
	@echo "- Grafana (metrics): http://localhost:3000 (admin/admin)"
	@echo "- Prometheus: http://localhost:9090"
	@echo ""
	@echo "Now start Molock with: make docker-run"
	@echo "Or run benchmarks with: make benchmark-docker"

observability-down:
	docker-compose -f deployment/docker-compose.yml down