Changes: - Remove deprecated Fengling.Activity and YarpGateway.Admin projects - Add points processing services with distributed lock support - Update Vben frontend with gateway management pages - Add gateway config controller and database listener - Update routing to use header-mixed-nav layout - Add comprehensive test suites for Member services - Add YarpGateway integration tests - Update package versions in Directory.Packages.props Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
186 lines
5.5 KiB
Bash
186 lines
5.5 KiB
Bash
#!/bin/bash
|
||
# Service Gateway Registration Script
|
||
# Usage: ./register-service.sh [OPTIONS]
|
||
#
|
||
# Options:
|
||
# -p, --prefix Service prefix (default: activity)
|
||
# -v, --version API version (default: v1)
|
||
# -g, --gateway-url Gateway URL (default: http://localhost:5000)
|
||
# -a, --address Service address (default: http://localhost:5001)
|
||
# -d, --destination Destination ID (default: {prefix}-1)
|
||
# -w, --weight Instance weight (default: 1)
|
||
# -G, --global Create global route (default: true)
|
||
# -t, --tenant-code Tenant code for tenant-specific route
|
||
# -h, --help Show this help
|
||
|
||
set -e
|
||
|
||
# Default values
|
||
SERVICE_PREFIX="activity"
|
||
API_VERSION="v1"
|
||
GATEWAY_URL="http://localhost:5000"
|
||
SERVICE_ADDRESS="http://localhost:5001"
|
||
WEIGHT=1
|
||
IS_GLOBAL=true
|
||
TENANT_CODE=""
|
||
|
||
# Colors
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
CYAN='\033[0;36m'
|
||
NC='\033[0m'
|
||
|
||
# Parse arguments
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
-p|--prefix)
|
||
SERVICE_PREFIX="$2"
|
||
shift 2
|
||
;;
|
||
-v|--version)
|
||
API_VERSION="$2"
|
||
shift 2
|
||
;;
|
||
-g|--gateway-url)
|
||
GATEWAY_URL="$2"
|
||
shift 2
|
||
;;
|
||
-a|--address)
|
||
SERVICE_ADDRESS="$2"
|
||
shift 2
|
||
;;
|
||
-d|--destination)
|
||
DESTINATION_ID="$2"
|
||
shift 2
|
||
;;
|
||
-w|--weight)
|
||
WEIGHT="$2"
|
||
shift 2
|
||
;;
|
||
-G|--global)
|
||
IS_GLOBAL=true
|
||
shift
|
||
;;
|
||
-t|--tenant-code)
|
||
IS_GLOBAL=false
|
||
TENANT_CODE="$2"
|
||
shift 2
|
||
;;
|
||
-h|--help)
|
||
grep -A 50 '# Usage:' "$0" | tail -n +2 | head -n 20
|
||
exit 0
|
||
;;
|
||
*)
|
||
echo "Unknown option: $1"
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# Set derived values
|
||
CLUSTER_ID="${SERVICE_PREFIX}-service"
|
||
DESTINATION_ID="${DESTINATION_ID:-${SERVICE_PREFIX}-1}"
|
||
PATH_PATTERN="/${SERVICE_PREFIX}/${API_VERSION}/{**path}"
|
||
|
||
echo -e "${CYAN}╔════════════════════════════════════════════════════════════╗${NC}"
|
||
echo -e "${CYAN}║ Service Gateway Registration ║${NC}"
|
||
echo -e "${CYAN}╚════════════════════════════════════════════════════════════╝${NC}"
|
||
echo ""
|
||
|
||
# Step 1: Add Service Instance
|
||
echo -e "${YELLOW}[1/3] Adding service instance...${NC}"
|
||
|
||
INSTANCE_BODY=$(cat <<EOF
|
||
{
|
||
"destinationId": "$DESTINATION_ID",
|
||
"address": "$SERVICE_ADDRESS",
|
||
"weight": $WEIGHT
|
||
}
|
||
EOF
|
||
)
|
||
|
||
HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
|
||
"$GATEWAY_URL/api/gateway/clusters/$CLUSTER_ID/instances" \
|
||
-H "Content-Type: application/json" \
|
||
-d "$INSTANCE_BODY")
|
||
|
||
HTTP_CODE=$(echo "$HTTP_RESPONSE" | tail -n 1)
|
||
RESPONSE_BODY=$(echo "$HTTP_RESPONSE" | sed '$d')
|
||
|
||
if [ "$HTTP_CODE" -eq 200 ]; then
|
||
echo -e " ${GREEN}✓ Instance: $DESTINATION_ID -> $SERVICE_ADDRESS${NC}"
|
||
else
|
||
echo -e " ${YELLOW}ℹ Instance may already exist${NC}"
|
||
fi
|
||
|
||
# Step 2: Add Route
|
||
echo ""
|
||
echo -e "${YELLOW}[2/3] Configuring gateway route...${NC}"
|
||
|
||
if [ "$IS_GLOBAL" = true ]; then
|
||
ROUTE_URL="$GATEWAY_URL/api/gateway/routes/global"
|
||
|
||
ROUTE_BODY=$(cat <<EOF
|
||
{
|
||
"serviceName": "$SERVICE_PREFIX",
|
||
"clusterId": "$CLUSTER_ID",
|
||
"pathPattern": "$PATH_PATTERN"
|
||
}
|
||
EOF
|
||
)
|
||
ROUTE_TYPE="Global"
|
||
else
|
||
ROUTE_URL="$GATEWAY_URL/api/gateway/tenants/$TENANT_CODE/routes"
|
||
ROUTE_TYPE="Tenant [$TENANT_CODE]"
|
||
|
||
ROUTE_BODY=$(cat <<EOF
|
||
{
|
||
"serviceName": "$SERVICE_PREFIX",
|
||
"pathPattern": "$PATH_PATTERN"
|
||
}
|
||
EOF
|
||
)
|
||
fi
|
||
|
||
HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST \
|
||
"$ROUTE_URL" \
|
||
-H "Content-Type: application/json" \
|
||
-d "$ROUTE_BODY")
|
||
|
||
HTTP_CODE=$(echo "$HTTP_RESPONSE" | tail -n 1)
|
||
RESPONSE_BODY=$(echo "$HTTP_RESPONSE" | sed '$d')
|
||
|
||
if [ "$HTTP_CODE" -eq 200 ]; then
|
||
echo -e " ${GREEN}✓ Route: $PATH_PATTERN -> $CLUSTER_ID${NC}"
|
||
else
|
||
echo -e " ${YELLOW}ℹ Route may already exist${NC}"
|
||
fi
|
||
|
||
# Step 3: Reload Config
|
||
echo ""
|
||
echo -e "${YELLOW}[3/3] Reloading gateway configuration...${NC}"
|
||
|
||
curl -s -X POST "$GATEWAY_URL/api/gateway/reload" > /dev/null
|
||
echo -e " ${GREEN}✓ Configuration reloaded${NC}"
|
||
|
||
# Summary
|
||
echo ""
|
||
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||
echo -e "${CYAN} Service Registered Successfully!${NC}"
|
||
echo -e "${CYAN}════════════════════════════════════════════════════════════${NC}"
|
||
echo ""
|
||
echo -e " ${WHITE}Service:${NC} $SERVICE_PREFIX"
|
||
echo -e " ${WHITE}Version:${NC} $API_VERSION"
|
||
echo -e " ${WHITE}Cluster:${NC} $CLUSTER_ID"
|
||
echo -e " ${WHITE}Type:${NC} $ROUTE_TYPE"
|
||
echo -e " ${WHITE}Pattern:${NC} $PATH_PATTERN"
|
||
echo -e " ${WHITE}Address:${NC} $SERVICE_ADDRESS"
|
||
echo ""
|
||
echo -e " ${CYAN}Available Endpoints:${NC}"
|
||
echo -e " GET $GATEWAY_URL/${SERVICE_PREFIX}/${API_VERSION}/campaigns"
|
||
echo -e " POST $GATEWAY_URL/${SERVICE_PREFIX}/${API_VERSION}/campaigns"
|
||
echo -e " GET $GATEWAY_URL/${SERVICE_PREFIX}/${API_VERSION}/campaigns/\{id\}"
|
||
echo -e " POST $GATEWAY_URL/${SERVICE_PREFIX}/${API_VERSION}/campaigns/\{id\}/publish"
|
||
echo ""
|