142 lines
5.7 KiB
Bash
Executable File
142 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Generate Test Traffic to Services
|
|
# This script generates API calls to verify telemetry data collection
|
|
|
|
set -e
|
|
|
|
NAMESPACE="bakery-ia"
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo -e "${BLUE} Generating Test Traffic for SigNoz Verification${NC}"
|
|
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
echo ""
|
|
|
|
# Check if ingress is accessible
|
|
echo -e "${BLUE}Step 1: Verifying Gateway Access${NC}"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
GATEWAY_POD=$(kubectl get pods -n $NAMESPACE -l app=gateway --field-selector=status.phase=Running -o jsonpath='{.items[0].metadata.name}' 2>/dev/null)
|
|
if [[ -z "$GATEWAY_POD" ]]; then
|
|
echo -e "${YELLOW}⚠ Gateway pod not running. Starting port-forward...${NC}"
|
|
# Port forward in background
|
|
kubectl port-forward -n $NAMESPACE svc/gateway-service 8000:8000 &
|
|
PORT_FORWARD_PID=$!
|
|
sleep 3
|
|
API_URL="http://localhost:8000"
|
|
else
|
|
echo -e "${GREEN}✓ Gateway is running: $GATEWAY_POD${NC}"
|
|
# Use internal service
|
|
API_URL="http://gateway-service.$NAMESPACE.svc.cluster.local:8000"
|
|
fi
|
|
echo ""
|
|
|
|
# Function to make API call from inside cluster
|
|
make_request() {
|
|
local endpoint=$1
|
|
local description=$2
|
|
|
|
echo -e "${BLUE}→ Testing: $description${NC}"
|
|
echo " Endpoint: $endpoint"
|
|
|
|
if [[ -n "$GATEWAY_POD" ]]; then
|
|
# Make request from inside the gateway pod
|
|
RESPONSE=$(kubectl exec -n $NAMESPACE $GATEWAY_POD -- curl -s -w "\nHTTP_CODE:%{http_code}" "$API_URL$endpoint" 2>/dev/null || echo "FAILED")
|
|
else
|
|
# Make request from localhost
|
|
RESPONSE=$(curl -s -w "\nHTTP_CODE:%{http_code}" "$API_URL$endpoint" 2>/dev/null || echo "FAILED")
|
|
fi
|
|
|
|
if [[ "$RESPONSE" == "FAILED" ]]; then
|
|
echo -e " ${YELLOW}⚠ Request failed${NC}"
|
|
else
|
|
HTTP_CODE=$(echo "$RESPONSE" | grep "HTTP_CODE" | cut -d: -f2)
|
|
if [[ "$HTTP_CODE" == "200" ]] || [[ "$HTTP_CODE" == "401" ]] || [[ "$HTTP_CODE" == "404" ]]; then
|
|
echo -e " ${GREEN}✓ Response received (HTTP $HTTP_CODE)${NC}"
|
|
else
|
|
echo -e " ${YELLOW}⚠ Unexpected response (HTTP $HTTP_CODE)${NC}"
|
|
fi
|
|
fi
|
|
echo ""
|
|
sleep 1
|
|
}
|
|
|
|
# Generate traffic to various endpoints
|
|
echo -e "${BLUE}Step 2: Generating Traffic to Services${NC}"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# Health checks (should generate traces)
|
|
make_request "/health" "Gateway Health Check"
|
|
make_request "/api/health" "API Health Check"
|
|
|
|
# Auth service endpoints
|
|
make_request "/api/auth/health" "Auth Service Health"
|
|
|
|
# Tenant service endpoints
|
|
make_request "/api/tenants/health" "Tenant Service Health"
|
|
|
|
# Inventory service endpoints
|
|
make_request "/api/inventory/health" "Inventory Service Health"
|
|
|
|
# Orders service endpoints
|
|
make_request "/api/orders/health" "Orders Service Health"
|
|
|
|
# Forecasting service endpoints
|
|
make_request "/api/forecasting/health" "Forecasting Service Health"
|
|
|
|
echo -e "${BLUE}Step 3: Checking Service Logs for Telemetry${NC}"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# Check a few service pods for tracing logs
|
|
SERVICES=("auth-service" "inventory-service" "gateway")
|
|
|
|
for service in "${SERVICES[@]}"; do
|
|
POD=$(kubectl get pods -n $NAMESPACE -l app=$service --field-selector=status.phase=Running -o jsonpath='{.items[0].metadata.name}' 2>/dev/null)
|
|
if [[ -n "$POD" ]]; then
|
|
echo -e "${BLUE}Checking $service ($POD)...${NC}"
|
|
TRACING_LOG=$(kubectl logs -n $NAMESPACE $POD --tail=100 2>/dev/null | grep -i "tracing\|otel" | head -n 2 || echo "")
|
|
if [[ -n "$TRACING_LOG" ]]; then
|
|
echo -e "${GREEN}✓ Tracing configured:${NC}"
|
|
echo "$TRACING_LOG" | sed 's/^/ /'
|
|
else
|
|
echo -e "${YELLOW}⚠ No tracing logs found${NC}"
|
|
fi
|
|
echo ""
|
|
fi
|
|
done
|
|
|
|
# Wait for data to be processed
|
|
echo -e "${BLUE}Step 4: Waiting for Data Processing${NC}"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "Waiting 30 seconds for telemetry data to be processed..."
|
|
for i in {30..1}; do
|
|
echo -ne "\r ${i} seconds remaining..."
|
|
sleep 1
|
|
done
|
|
echo -e "\n"
|
|
|
|
# Cleanup port-forward if started
|
|
if [[ -n "$PORT_FORWARD_PID" ]]; then
|
|
kill $PORT_FORWARD_PID 2>/dev/null || true
|
|
fi
|
|
|
|
echo -e "${GREEN}✓ Test traffic generation complete!${NC}"
|
|
echo ""
|
|
echo -e "${BLUE}Next Steps:${NC}"
|
|
echo "1. Run the verification script to check for collected data:"
|
|
echo " ./infrastructure/helm/verify-signoz-telemetry.sh"
|
|
echo ""
|
|
echo "2. Access SigNoz UI to visualize the data:"
|
|
echo " https://monitoring.bakery-ia.local"
|
|
echo " or"
|
|
echo " kubectl port-forward -n bakery-ia svc/signoz 3301:8080"
|
|
echo " Then go to: http://localhost:3301"
|
|
echo ""
|
|
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|