SHELL := /bin/bash
DC := docker compose

.PHONY: help prereq shim shim-down build up down restart flows verify logs ports health slots drain enable metrics conns trace shell

help:
	@echo "Стенд hpnn_v2 — шаг 1 (OVS: маршрутизация + балансировка)"
	@echo
	@echo "  make prereq     загрузить модуль openvswitch на хосте"
	@echo "  make shim       поднять macvlan-shim (проверка стенда с самого хоста)"
	@echo "  make shim-down  снять shim"
	@echo "  make up         собрать образы и запустить стенд"
	@echo "  make down       остановить стенд и удалить сети"
	@echo "  make flows      перечитать pipeline.sh и перезалить пайплайн"
	@echo "  make verify     прогнать проверки"
	@echo "  make ports      порты моста br-lb"
	@echo "  make health     состояние членов пула по данным health-проб"
	@echo "  make slots      раскладка таблицы слотов и счётчики"
	@echo "  make drain M=be1    вывести член из балансировки"
	@echo "  make enable M=be1   вернуть член в балансировку"
	@echo "  make metrics    метрики Prometheus"
	@echo "  make conns      таблица соединений ct"
	@echo "  make trace SRC=192.168.5.7 [SPORT=40000]   ofproto/trace сессии на VIP"
	@echo "  make logs       логи контейнеров"
	@echo "  make shell      shell в контейнере lb-router"

prereq:
	sudo scripts/host-prereq.sh

shim:
	sudo scripts/host-prereq.sh --shim

shim-down:
	sudo scripts/host-prereq.sh --shim-down

build:
	$(DC) build

up: prereq
	$(DC) up -d --build
	@echo "Ждём готовности балансировщика..."
	@for i in $$(seq 40); do \
		$(DC) exec -T lb-router curl -fsS --max-time 2 http://127.0.0.1:9111/status >/dev/null 2>&1 && break; \
		sleep 1; \
	done
	@$(MAKE) --no-print-directory health

down:
	$(DC) down

restart:
	$(DC) restart lb-router

flows:
	$(DC) exec -T lb-router /opt/lb/apply.sh

verify:
	@scripts/verify.sh

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

ports:
	$(DC) exec -T lb-router lbctl ports

health:
	$(DC) exec -T lb-router lbctl health

slots:
	$(DC) exec -T lb-router lbctl slots

drain:
	$(DC) exec -T lb-router lbctl drain $(M)

enable:
	$(DC) exec -T lb-router lbctl enable $(M)

metrics:
	$(DC) exec -T lb-router lbctl metrics

conns:
	$(DC) exec -T lb-router lbctl conns

trace:
	$(DC) exec -T lb-router lbctl trace $(SRC) $(SPORT)

shell:
	$(DC) exec lb-router bash
