# NebulaGraph 3.8 + Elasticsearch 7 + Nebula Studio
# Рецепты — однострочные команды docker compose.
# На Windows запускайте из WSL или Git Bash. Те же команды есть в README.

COMPOSE = docker compose

.PHONY: help env up init verify console ps logs es-health check config down clean

help:
	@echo "make up         поднять NebulaGraph, Elasticsearch и Studio"
	@echo "make init       ADD HOSTS и SIGN IN TEXT SERVICE"
	@echo "make verify     init, listener, полнотекстовый индекс и поиск"
	@echo "make console    интерактивная консоль nGQL"
	@echo "make ps         статус контейнеров"
	@echo "make logs       последние логи"
	@echo "make es-health  состояние кластера Elasticsearch"
	@echo "make check      vm.max_map_count внутри Docker"
	@echo "make down       остановить, тома сохранить"
	@echo "make clean      остановить и удалить тома"

.env:
	cp .env.example .env

env: .env

up: .env
	$(COMPOSE) up -d

init: up
	$(COMPOSE) --profile ops run --rm --no-deps -e OPS_COMMAND=init ops

verify: up
	$(COMPOSE) --profile ops run --rm --no-deps -e OPS_COMMAND=verify ops

console: .env
	$(COMPOSE) --profile ops run --rm --no-deps console

ps:
	$(COMPOSE) ps -a

logs:
	$(COMPOSE) logs --tail=80

es-health: .env
	$(COMPOSE) exec -T es01 sh -c 'curl -fsS -u "elastic:$$ELASTIC_PASSWORD" http://127.0.0.1:9200/_cluster/health?pretty'

check:
	docker run --rm alpine sysctl vm.max_map_count

config: .env
	$(COMPOSE) config --quiet && echo "compose config ok"

down:
	$(COMPOSE) --profile ops down

clean:
	$(COMPOSE) --profile ops down -v
