-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
157 lines (132 loc) · 6.05 KB
/
Copy pathMakefile
File metadata and controls
157 lines (132 loc) · 6.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
.PHONY: help build run test clean docker-build docker-push docker-run deploy k8s-apply k8s-delete load-test load-test-quick load-test-stress
# Variables
APP_NAME := taiji
VERSION ?= latest
REGISTRY ?= ghcr.io/pokt-network
IMAGE := $(REGISTRY)/$(APP_NAME):$(VERSION)
# Colors for output
COLOR_RESET := \033[0m
COLOR_BOLD := \033[1m
COLOR_GREEN := \033[32m
COLOR_YELLOW := \033[33m
help: ## Show this help message
@echo "$(COLOR_BOLD)Available targets:$(COLOR_RESET)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(COLOR_GREEN)%-20s$(COLOR_RESET) %s\n", $$1, $$2}'
build: ## Build the Go binary locally
@echo "$(COLOR_YELLOW)Building $(APP_NAME)...$(COLOR_RESET)"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o bin/$(APP_NAME) main.go
@echo "$(COLOR_GREEN)✓ Build complete: bin/$(APP_NAME)$(COLOR_RESET)"
run: ## Run the service locally (uses examples/proxies.csv by default)
@echo "$(COLOR_YELLOW)Running $(APP_NAME) locally...$(COLOR_RESET)"
PORT=8080 go run main.go
clean: ## Clean build artifacts
@echo "$(COLOR_YELLOW)Cleaning...$(COLOR_RESET)"
rm -rf bin/
rm -f coverage.out
@echo "$(COLOR_GREEN)✓ Clean complete$(COLOR_RESET)"
docker-build: ## Build Docker image
@echo "$(COLOR_YELLOW)Building Docker image: $(IMAGE)...$(COLOR_RESET)"
docker build -t $(IMAGE) .
@echo "$(COLOR_GREEN)✓ Docker build complete: $(IMAGE)$(COLOR_RESET)"
docker-push: ## Push Docker image to registry
@echo "$(COLOR_YELLOW)Pushing Docker image: $(IMAGE)...$(COLOR_RESET)"
docker push $(IMAGE)
@echo "$(COLOR_GREEN)✓ Docker push complete$(COLOR_RESET)"
docker-run: ## Run Docker container locally
@echo "$(COLOR_YELLOW)Running Docker container...$(COLOR_RESET)"
docker run --rm -it \
-p 8080:8080 \
-v $(PWD)/examples/proxies.csv:/config/proxies.csv:ro \
$(IMAGE)
docker-buildx: ## Build multi-platform image (arm64/amd64)
@echo "$(COLOR_YELLOW)Building multi-platform image: $(IMAGE)...$(COLOR_RESET)"
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t $(IMAGE) \
--push \
.
@echo "$(COLOR_GREEN)✓ Multi-platform build complete$(COLOR_RESET)"
fmt: ## Format Go code
@echo "$(COLOR_YELLOW)Formatting code...$(COLOR_RESET)"
go fmt ./...
@echo "$(COLOR_GREEN)✓ Format complete$(COLOR_RESET)"
lint: ## Run linter (requires golangci-lint)
@echo "$(COLOR_YELLOW)Running linter...$(COLOR_RESET)"
golangci-lint run
@echo "$(COLOR_GREEN)✓ Lint complete$(COLOR_RESET)"
deps: ## Download Go dependencies
@echo "$(COLOR_YELLOW)Downloading dependencies...$(COLOR_RESET)"
go mod download
go mod verify
@echo "$(COLOR_GREEN)✓ Dependencies downloaded$(COLOR_RESET)"
mod-tidy: ## Tidy Go modules
@echo "$(COLOR_YELLOW)Tidying modules...$(COLOR_RESET)"
go mod tidy
@echo "$(COLOR_GREEN)✓ Modules tidied$(COLOR_RESET)"
security-scan: ## Run security scan with trivy
@echo "$(COLOR_YELLOW)Running security scan...$(COLOR_RESET)"
trivy image $(IMAGE)
@echo "$(COLOR_GREEN)✓ Security scan complete$(COLOR_RESET)"
# Load testing variables
LOAD_TEST_URL ?= https://eth.api.pocket.network
LOAD_TEST_REQUESTS ?= 1000
LOAD_TEST_CONCURRENCY ?= 50
LOAD_TEST_DURATION ?= 30s
LOAD_TEST_METHOD ?= eth_blockNumber
LOAD_TEST_PAYLOAD ?=
load-test: ## Load test production (LOAD_TEST_URL, LOAD_TEST_REQUESTS, LOAD_TEST_CONCURRENCY, LOAD_TEST_DURATION, LOAD_TEST_METHOD or LOAD_TEST_PAYLOAD)
@echo "$(COLOR_YELLOW)Load testing $(LOAD_TEST_URL)...$(COLOR_RESET)"
@echo "$(COLOR_BOLD)Configuration:$(COLOR_RESET)"
@echo " URL: $(LOAD_TEST_URL)"
@echo " Requests: $(LOAD_TEST_REQUESTS)"
@echo " Concurrency: $(LOAD_TEST_CONCURRENCY)"
@echo " Duration: $(LOAD_TEST_DURATION)"
@command -v hey >/dev/null 2>&1 || { echo "$(COLOR_YELLOW)⚠ 'hey' not found. Installing...$(COLOR_RESET)"; go install github.com/rakyll/hey@latest; }
@if [ -n "$(LOAD_TEST_PAYLOAD)" ]; then \
echo " Payload: $(LOAD_TEST_PAYLOAD)"; \
echo ""; \
echo '$(LOAD_TEST_PAYLOAD)' > /tmp/load-test-payload.json; \
else \
echo " Method: $(LOAD_TEST_METHOD)"; \
echo ""; \
echo '{"jsonrpc":"2.0","method":"$(LOAD_TEST_METHOD)","params":[],"id":1}' > /tmp/load-test-payload.json; \
fi
hey -n $(LOAD_TEST_REQUESTS) \
-c $(LOAD_TEST_CONCURRENCY) \
-z $(LOAD_TEST_DURATION) \
-m POST \
-H "Content-Type: application/json" \
-D /tmp/load-test-payload.json \
$(LOAD_TEST_URL)
@rm -f /tmp/load-test-payload.json
@echo "$(COLOR_GREEN)✓ Load test complete$(COLOR_RESET)"
load-test-quick: ## Quick load test (100 requests, 10 concurrent)
@$(MAKE) load-test LOAD_TEST_REQUESTS=100 LOAD_TEST_CONCURRENCY=10 LOAD_TEST_DURATION=10s
load-test-stress: ## Stress test (10000 requests, 200 concurrent)
@$(MAKE) load-test LOAD_TEST_REQUESTS=10000 LOAD_TEST_CONCURRENCY=200 LOAD_TEST_DURATION=60s
docker-compose-up: ## Start docker-compose services (httpbin + redis)
@echo "$(COLOR_YELLOW)Starting docker-compose services...$(COLOR_RESET)"
docker-compose up -d
@echo "$(COLOR_GREEN)✓ Services started: httpbin1 (4040), httpbin2 (4041), redis (6379)$(COLOR_RESET)"
docker-compose-down: ## Stop docker-compose services
@echo "$(COLOR_YELLOW)Stopping docker-compose services...$(COLOR_RESET)"
docker-compose down
@echo "$(COLOR_GREEN)✓ Services stopped$(COLOR_RESET)"
docker-compose-logs: ## Show docker-compose logs
docker-compose logs -f
test-local: docker-compose-up ## Run tests with docker-compose services
@echo "$(COLOR_YELLOW)Waiting for services to be ready...$(COLOR_RESET)"
@sleep 3
@echo "$(COLOR_YELLOW)Running tests...$(COLOR_RESET)"
./test.sh
@echo "$(COLOR_GREEN)✓ Tests complete$(COLOR_RESET)"
test-distributed: ## Test distributed rate limiting with 2 Taiji instances + HAProxy
@echo "$(COLOR_YELLOW)Building and starting distributed setup...$(COLOR_RESET)"
docker-compose up -d --build
@echo "$(COLOR_YELLOW)Waiting for services to be ready...$(COLOR_RESET)"
@sleep 10
@echo "$(COLOR_YELLOW)Running distributed rate limiting test...$(COLOR_RESET)"
./test-distributed.sh
@echo "$(COLOR_GREEN)✓ Test complete$(COLOR_RESET)"
logs-distributed: ## Show logs from both Taiji instances
docker-compose logs -f taiji-1 taiji-2