pulse-lets-go/Makefile
Maksim Totmin fd949ddaed chore: emulator sip_gateway, Makefile targets, full README documentation
- Emulator: add sip_gateway field to all scenarios (auto-trunk creation)
- Makefile: build-agent, build-siptest, emulate-*, siptest-* targets
- README: full documentation with agent section, production deployment
- Project structure update with all components
2026-06-25 16:59:17 +07:00

178 lines
5.4 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.

# pulse-lets-go — Telephone Load Balancer
# Сборка Go backend + SvelteKit фронта в единый бинарник.
APP := pulse-lets-go
BINDIR := bin
WEB_DIR := web
DATA_DIR := data
.PHONY: all build build-go build-web clean run test install \
emulate emulate-normal emulate-overload emulate-cpu-low emulate-fail-high \
emulate-node-down emulate-stale emulate-chaos build-emulator \
build-siptest siptest-uas siptest-uac siptest-full
all: build
# Полная сборка: фронт + бекенд
build: build-web build-go
@echo "✓ Сборка завершена: $(BINDIR)/$(APP)"
# Сборка SvelteKit фронта
build-web:
@echo "→ Сборка SvelteKit..."
cd $(WEB_DIR) && npm run build
# Сборка Go бинарника
build-go:
@mkdir -p $(BINDIR)
@echo "→ Сборка Go backend..."
go build -o $(BINDIR)/$(APP) ./cmd/$(APP)
# Быстрая сборка только Go (без фронта)
build-go-only:
@mkdir -p $(BINDIR)
go build -o $(BINDIR)/$(APP) ./cmd/$(APP)
# Запуск в dev-режиме: Go backend на :8080, SvelteKit dev server на :5173
run:
@echo "→ Запуск pulse-lets-go (dev)"
$(BINDIR)/$(APP) &
cd $(WEB_DIR) && npm run dev
# Продакшн сборка с оптимизациями
build-prod:
@mkdir -p $(BINDIR)
cd $(WEB_DIR) && npm run build
CGO_ENABLED=0 go build -ldflags="-s -w" -o $(BINDIR)/$(APP) ./cmd/$(APP)
# Установка: копирует бинарник и статику в /usr/local
install: build
@echo "→ Установка в /usr/local"
mkdir -p /usr/local/share/$(APP)/web
cp -r $(WEB_DIR)/build /usr/local/share/$(APP)/web/
cp $(BINDIR)/$(APP) /usr/local/bin/$(APP)
chmod +x /usr/local/bin/$(APP)
@echo "✓ Установлен в /usr/local/bin/$(APP)"
# Установка systemd unit
install-systemd:
@echo "→ Установка systemd unit"
cp deploy/$(APP).service /etc/systemd/system/
systemctl daemon-reload
@echo "✓ systemd unit установлен. Запуск: systemctl start $(APP)"
# ============================================================
# Эмулятор метрик
# ============================================================
# Сборка эмулятора
build-emulator:
@mkdir -p $(BINDIR)
go build -o $(BINDIR)/emulator ./cmd/emulator
# По умолчанию — normal
emulate: emulate-normal
# Все ноды здоровы, случайная загрузка
emulate-normal: nats build-emulator
./$(BINDIR)/emulator --scenario normal
# Последняя нода перегружена (active_calls=max_calls)
emulate-overload: nats build-emulator
./$(BINDIR)/emulator --scenario overload
# Последняя нода с низким idle_cpu (< 5)
emulate-cpu-low: nats build-emulator
./$(BINDIR)/emulator --scenario cpu-low
# Последняя нода с высоким call_failure_rate (> 15)
emulate-fail-high: nats build-emulator
./$(BINDIR)/emulator --scenario fail-high
# Последняя нода status="down"
emulate-node-down: nats build-emulator
./$(BINDIR)/emulator --scenario node-down
# Первая нода замолкает через 10 сек (stale)
emulate-stale: nats build-emulator
./$(BINDIR)/emulator --scenario stale
# Случайные lethal-состояния
emulate-chaos: nats build-emulator
./$(BINDIR)/emulator --scenario chaos
# ============================================================
# Агент сбора метрик (pulse-lets-go-agent)
# ============================================================
build-agent:
@mkdir -p $(BINDIR)
go build -o $(BINDIR)/pulse-lets-go-agent ./cmd/pulse-lets-go-agent
# ============================================================
# SIP-тестер (e2e проверка с FreeSWITCH)
# ============================================================
build-siptest:
@mkdir -p $(BINDIR)
go build -o $(BINDIR)/siptest ./cmd/siptest
# Запуск UAS (PBX-нода, отвечает 200 OK на INVITE)
siptest-uas: build-siptest
./$(BINDIR)/siptest -mode uas
# Отправка тестового звонка (10 CPS, 100 вызовов)
siptest-uac: build-siptest
./$(BINDIR)/siptest -mode uac -r 10 -l 100 -m 100
# Полный e2e тест: UAS + UAC
siptest-full: build-siptest
@echo "→ Запуск UAS (PBX-нода) на порту 5090..."
./$(BINDIR)/siptest -mode uas &
@sleep 1
@echo "→ Запуск UAC (оператор)..."
./$(BINDIR)/siptest -mode uac -r 10 -l 100 -m 200
@echo "→ Остановка UAS..."
pkill siptest 2>/dev/null || true
# ============================================================
# NATS и запуск
# ============================================================
# Запуск NATS-сервера для разработки (в фоне)
nats:
@echo "→ Запуск NATS на порту 4222..."
@if ! pgrep -x nats-server > /dev/null; then \
$(BINDIR)/nats-server -p 4222 -D &>/dev/null & \
disown; \
echo "✓ NATS запущен"; \
else \
echo "NATS уже запущен"; \
fi
# Быстрый старт: NATS + pulse-lets-go
start: nats
@echo "→ Запуск pulse-lets-go..."
$(BINDIR)/$(APP)
# Очистка
clean:
rm -rf $(BINDIR)
cd $(WEB_DIR) && rm -rf build .svelte-kit
# Тесты
test:
go test ./... -v -cover
# Запуск тестов с race detector
test-race:
go test ./... -race -v
# Линтинг
lint:
go vet ./...
# Форматирование
fmt:
go fmt ./...