Files
dss/scripts/dss-services.sh
DSS 08ce228df1
Some checks failed
DSS Project Analysis / dss-context-update (push) Has been cancelled
feat: Add DSS infrastructure, remove legacy admin-ui code
- Remove legacy admin-ui/js/ vanilla JS components
- Add .dss/ directory with core tokens, skins, themes
- Add Storybook configuration and generated stories
- Add DSS management scripts (dss-services, dss-init, dss-setup, dss-reset)
- Add MCP command definitions for DSS plugin
- Add Figma sync architecture and scripts
- Update pre-commit hooks with documentation validation
- Fix JSON trailing commas in skin files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-10 22:15:11 -03:00

312 lines
8.1 KiB
Bash
Executable File

#!/bin/bash
# DSS Services Manager
# Start, stop, and manage all DSS development services
#
# Usage: scripts/dss-services.sh <action> [--service NAME]
#
# Actions:
# start - Start all services (or specific service)
# stop - Stop all services (or specific service)
# status - Show status of all services
# restart - Restart all services (or specific service)
# logs - Show service logs
set -e
DSS_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
cd "$DSS_ROOT"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Service configuration
declare -A SERVICES=(
["api"]="8000"
["admin-ui"]="3456"
["storybook"]="6006"
)
declare -A SERVICE_CMDS=(
["api"]="uvicorn apps.api.server:app --host 0.0.0.0 --port 8000 --reload"
["admin-ui"]="npm run dev"
["storybook"]="npm run storybook"
)
declare -A SERVICE_DIRS=(
["api"]="$DSS_ROOT"
["admin-ui"]="$DSS_ROOT/admin-ui"
["storybook"]="$DSS_ROOT/admin-ui"
)
declare -A SERVICE_LOGS=(
["api"]="/tmp/dss-api.log"
["admin-ui"]="/tmp/dss-admin-ui.log"
["storybook"]="/tmp/dss-storybook.log"
)
# Logging
log_info() { echo -e "${CYAN}[INFO]${NC} $1"; }
log_ok() { echo -e "${GREEN}[OK]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# Check if port is in use
is_port_active() {
local port=$1
lsof -i ":$port" &>/dev/null
}
# Get PID using port
get_port_pid() {
local port=$1
lsof -ti ":$port" 2>/dev/null | head -1
}
# Start a single service
start_service() {
local service=$1
local port=${SERVICES[$service]}
local cmd=${SERVICE_CMDS[$service]}
local dir=${SERVICE_DIRS[$service]}
local log=${SERVICE_LOGS[$service]}
if is_port_active "$port"; then
log_warn "$service already running on port $port"
return 0
fi
log_info "Starting $service on port $port..."
cd "$dir"
if [ "$service" = "api" ]; then
# Activate venv for API server
source "$DSS_ROOT/.venv/bin/activate"
nohup $cmd > "$log" 2>&1 &
else
nohup $cmd > "$log" 2>&1 &
fi
local pid=$!
cd "$DSS_ROOT"
# Wait for service to start
local max_wait=30
local waited=0
while [ $waited -lt $max_wait ]; do
if is_port_active "$port"; then
log_ok "$service started (PID: $(get_port_pid $port), port: $port)"
return 0
fi
sleep 1
((waited++))
done
log_error "$service failed to start (check $log)"
return 1
}
# Stop a single service
stop_service() {
local service=$1
local port=${SERVICES[$service]}
if ! is_port_active "$port"; then
log_info "$service not running"
return 0
fi
local pid=$(get_port_pid "$port")
log_info "Stopping $service (PID: $pid)..."
kill "$pid" 2>/dev/null || true
sleep 1
# Force kill if still running
if is_port_active "$port"; then
kill -9 "$(get_port_pid $port)" 2>/dev/null || true
fi
log_ok "$service stopped"
}
# Show status of all services
show_status() {
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ DSS SERVICES STATUS ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
printf " %-12s %-8s %-8s %-30s\n" "SERVICE" "PORT" "STATUS" "URL"
echo " ──────────────────────────────────────────────────────────────"
for service in api admin-ui storybook; do
local port=${SERVICES[$service]}
local status="STOPPED"
local color=$RED
local url="-"
if is_port_active "$port"; then
status="RUNNING"
color=$GREEN
url="http://localhost:$port"
fi
printf " %-12s %-8s ${color}%-8s${NC} %-30s\n" "$service" "$port" "$status" "$url"
done
echo ""
echo " Logs:"
for service in api admin-ui storybook; do
echo " $service: ${SERVICE_LOGS[$service]}"
done
echo ""
}
# Show logs for a service
show_logs() {
local service=$1
local log=${SERVICE_LOGS[$service]}
if [ -z "$log" ]; then
log_error "Unknown service: $service"
return 1
fi
if [ ! -f "$log" ]; then
log_warn "No log file found: $log"
return 0
fi
echo "=== $service logs ($log) ==="
tail -50 "$log"
}
# Main command handling
ACTION=${1:-status}
SPECIFIC_SERVICE=""
# Parse arguments
shift || true
while [[ $# -gt 0 ]]; do
case $1 in
--service|-s)
SPECIFIC_SERVICE="$2"
shift 2
;;
api|admin-ui|storybook)
SPECIFIC_SERVICE="$1"
shift
;;
*)
shift
;;
esac
done
case $ACTION in
start)
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ STARTING DSS SERVICES ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
if [ -n "$SPECIFIC_SERVICE" ]; then
start_service "$SPECIFIC_SERVICE"
else
for service in api admin-ui storybook; do
start_service "$service"
done
fi
echo ""
show_status
;;
stop)
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ STOPPING DSS SERVICES ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
if [ -n "$SPECIFIC_SERVICE" ]; then
stop_service "$SPECIFIC_SERVICE"
else
for service in api admin-ui storybook; do
stop_service "$service"
done
fi
echo ""
show_status
;;
restart)
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ RESTARTING DSS SERVICES ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
if [ -n "$SPECIFIC_SERVICE" ]; then
stop_service "$SPECIFIC_SERVICE"
sleep 1
start_service "$SPECIFIC_SERVICE"
else
for service in api admin-ui storybook; do
stop_service "$service"
done
sleep 2
for service in api admin-ui storybook; do
start_service "$service"
done
fi
echo ""
show_status
;;
status)
show_status
;;
logs)
if [ -n "$SPECIFIC_SERVICE" ]; then
show_logs "$SPECIFIC_SERVICE"
else
for service in api admin-ui storybook; do
show_logs "$service"
echo ""
done
fi
;;
*)
echo "DSS Services Manager"
echo ""
echo "Usage: $0 <action> [--service NAME]"
echo ""
echo "Actions:"
echo " start Start all services (or specific service)"
echo " stop Stop all services (or specific service)"
echo " status Show status of all services"
echo " restart Restart all services (or specific service)"
echo " logs Show service logs"
echo ""
echo "Services: api, admin-ui, storybook"
echo ""
echo "Examples:"
echo " $0 start # Start all services"
echo " $0 start --service api # Start only API server"
echo " $0 stop storybook # Stop Storybook"
echo " $0 logs admin-ui # Show admin-ui logs"
;;
esac