Files
cdp/data-layer/Makefile
2026-05-25 10:16:31 +07:00

160 lines
5.5 KiB
Makefile

.PHONY: help \
migrate/new migrate/up migrate/down migrate/status \
clickhouse/up clickhouse/down \
run/api run/workers run/console \
build/api build/workers \
test test/integration \
lint fmt tidy
# ---------------------------------------------------------------------------
# Configuration
# ---------------------------------------------------------------------------
# Auto-load .env if present, then export every variable so child processes
# (go run, docker run, the apply script) inherit them.
ifneq (,$(wildcard ./.env))
include .env
export
endif
POSTGRES_DSN ?= postgres://renolation:renolation@103.188.82.191:5432/analytics?sslmode=disable
POSTGRES_DSN_DOCKER ?= $(POSTGRES_DSN)
CLICKHOUSE_ADDR ?= 192.168.1.60:9000
CLICKHOUSE_DB ?= analytics
CLICKHOUSE_USER ?= renolation
CLICKHOUSE_PASSWORD ?= renolation
CLICKHOUSE_SECURE ?= 0
# Re-export everything the Go services + scripts consume. Explicit list is
# required on GNU Make 3.81 (macOS default), where bare `export` is a no-op.
export POSTGRES_DSN REDIS_ADDR
export CLICKHOUSE_ADDR CLICKHOUSE_DB CLICKHOUSE_USER CLICKHOUSE_PASSWORD CLICKHOUSE_SECURE
export ANALYTICS_HTTP_ADDR ANALYTICS_LOG_LEVEL ANALYTICS_SHUTDOWN_TIMEOUT_SECONDS
export ANALYTICS_CACHE_TTL_QUERY_SECONDS ANALYTICS_CACHE_TTL_PROFILE_SECONDS ANALYTICS_CH_TEMPLATES_DIR
export ANALYTICS_CH_SQL_USER ANALYTICS_CH_SQL_PASSWORD
export WORKER_HTTP_ADDR WORKER_LOG_LEVEL WORKER_SHUTDOWN_TIMEOUT_SECONDS
export WORKER_MAX_WORKERS WORKER_COMPUTE_TRAITS_EVERY WORKER_REFRESH_SEGMENT_EVERY
MIGRATE_IMAGE ?= migrate/migrate:v4.17.1
MIGRATIONS_DIR := infra/migrations
CLICKHOUSE_DIR := infra/clickhouse
export CLICKHOUSE_ADDR CLICKHOUSE_DB CLICKHOUSE_USER CLICKHOUSE_PASSWORD CLICKHOUSE_SECURE
# `migrate` CLI: prefer local binary, otherwise run the official Docker image.
MIGRATE_BIN ?= $(shell command -v migrate 2>/dev/null)
ifeq ($(MIGRATE_BIN),)
MIGRATE = docker run --rm \
-v $(CURDIR)/$(MIGRATIONS_DIR):/migrations \
$(MIGRATE_IMAGE) -path=/migrations -database "$(POSTGRES_DSN_DOCKER)"
MIGRATE_CREATE = docker run --rm \
-v $(CURDIR)/$(MIGRATIONS_DIR):/migrations \
$(MIGRATE_IMAGE) create -ext sql -dir /migrations -seq
else
MIGRATE = $(MIGRATE_BIN) -path $(MIGRATIONS_DIR) -database "$(POSTGRES_DSN)"
MIGRATE_CREATE = $(MIGRATE_BIN) create -ext sql -dir $(MIGRATIONS_DIR) -seq
endif
# ---------------------------------------------------------------------------
# Help
# ---------------------------------------------------------------------------
help:
@echo "CDP Analytics (data-layer) - common tasks"
@echo ""
@echo " make migrate/new name=X create new PG migration"
@echo " make migrate/up apply PG migrations"
@echo " make migrate/down rollback one"
@echo " make migrate/status migration status"
@echo ""
@echo " make clickhouse/up apply analytics ClickHouse DDL"
@echo " make clickhouse/down drop analytics ClickHouse schema"
@echo ""
@echo " make run/api run analytics API (port 4000)"
@echo " make run/workers run analytics worker (port 4001)"
@echo " make run/console run analytics console (port 4002)"
@echo ""
@echo " make test unit tests"
@echo " make test/integration integration tests (testcontainers)"
@echo ""
@echo " Shared infra (postgres, redis, clickhouse) lives in ../ingestion."
@echo " Run 'make up' from there first."
# ---------------------------------------------------------------------------
# PostgreSQL migrations
# ---------------------------------------------------------------------------
migrate/new:
@if [ -z "$(name)" ]; then echo "usage: make migrate/new name=add_xxx"; exit 1; fi
$(MIGRATE_CREATE) $(name)
migrate/up:
$(MIGRATE) up
migrate/down:
$(MIGRATE) down 1
migrate/status:
$(MIGRATE) version
# ---------------------------------------------------------------------------
# ClickHouse DDL
# ---------------------------------------------------------------------------
clickhouse/up:
@bash infra/scripts/clickhouse_apply.sh up
clickhouse/down:
@bash infra/scripts/clickhouse_apply.sh down
# ---------------------------------------------------------------------------
# Run services
# ---------------------------------------------------------------------------
run/api:
cd api && go run ./cmd/server
run/workers:
cd workers && go run ./cmd/worker
run/console:
@cd console && [ -d node_modules ] || npm install
cd console && npm run dev
# ---------------------------------------------------------------------------
# Build
# ---------------------------------------------------------------------------
build/api:
cd api && CGO_ENABLED=0 go build -o ../bin/api ./cmd/server
build/workers:
cd workers && CGO_ENABLED=0 go build -o ../bin/worker ./cmd/worker
# ---------------------------------------------------------------------------
# Tests
# ---------------------------------------------------------------------------
test:
cd api && go test ./... -count=1
cd workers && go test ./... -count=1
test/integration:
cd api && go test -tags=integration ./... -count=1 -timeout=5m
cd workers && go test -tags=integration ./... -count=1 -timeout=5m
# ---------------------------------------------------------------------------
# Code quality
# ---------------------------------------------------------------------------
lint:
cd api && golangci-lint run ./...
cd workers && golangci-lint run ./...
fmt:
cd api && gofmt -w .
cd workers && gofmt -w .
tidy:
cd api && go mod tidy
cd workers && go mod tidy