fengling-activity/scripts/gateway/register-service.sh
sam ab8d12527e refactor: major project restructuring and cleanup
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>
2026-02-15 10:34:07 +08:00

186 lines
5.5 KiB
Bash
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.

#!/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 ""