Schema additions for issues #37-41: New models: - Domain (#37): Life domains (work, marriage, homelab, etc.) - Idea (#38): Brain dumps with pgvector embeddings - Relationship (#39): Generic entity linking (blocks, depends_on) - Agent (#40): ClawdBot agent tracking with metrics - AgentSession (#40): Conversation session tracking - WidgetDefinition (#41): HUD widget registry - UserLayout (#41): Per-user dashboard configuration Updated models: - Task, Event, Project: Added domainId foreign key - User, Workspace: Added new relations New enums: - IdeaStatus: CAPTURED, PROCESSING, ACTIONABLE, ARCHIVED, DISCARDED - RelationshipType: BLOCKS, BLOCKED_BY, DEPENDS_ON, etc. - AgentStatus: IDLE, WORKING, WAITING, ERROR, TERMINATED - EntityType: Added IDEA, DOMAIN Migration: 20260129182803_add_domains_ideas_agents_widgets
222 lines
5.6 KiB
Bash
Executable File
222 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored output
|
|
print_success() {
|
|
echo -e "${GREEN}✓ $1${NC}"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}✗ $1${NC}"
|
|
}
|
|
|
|
print_info() {
|
|
echo -e "${YELLOW}→ $1${NC}"
|
|
}
|
|
|
|
# Function to check if a service is healthy
|
|
check_service_health() {
|
|
local service=$1
|
|
local max_retries=30
|
|
local retry=0
|
|
|
|
print_info "Waiting for $service to be healthy..."
|
|
|
|
while [ $retry -lt $max_retries ]; do
|
|
if docker compose ps --format json $service 2>/dev/null | grep -q '"Health":"healthy"'; then
|
|
print_success "$service is healthy"
|
|
return 0
|
|
elif docker compose ps --format json $service 2>/dev/null | grep -q '"State":"running"'; then
|
|
# Service is running but no health check defined
|
|
print_success "$service is running"
|
|
return 0
|
|
fi
|
|
|
|
retry=$((retry + 1))
|
|
sleep 2
|
|
done
|
|
|
|
print_error "$service failed to become healthy"
|
|
return 1
|
|
}
|
|
|
|
# Function to check HTTP endpoint
|
|
check_http_endpoint() {
|
|
local url=$1
|
|
local service_name=$2
|
|
local max_retries=15
|
|
local retry=0
|
|
|
|
print_info "Checking $service_name endpoint: $url"
|
|
|
|
while [ $retry -lt $max_retries ]; do
|
|
if curl -sf "$url" > /dev/null 2>&1; then
|
|
print_success "$service_name endpoint is accessible"
|
|
return 0
|
|
fi
|
|
|
|
retry=$((retry + 1))
|
|
sleep 2
|
|
done
|
|
|
|
print_error "$service_name endpoint is not accessible"
|
|
return 1
|
|
}
|
|
|
|
# Main test script
|
|
main() {
|
|
echo "=================================================="
|
|
echo " Mosaic Stack Docker Deployment Test"
|
|
echo "=================================================="
|
|
echo ""
|
|
|
|
# Check if Docker is running
|
|
print_info "Checking Docker..."
|
|
if ! docker info > /dev/null 2>&1; then
|
|
print_error "Docker is not running"
|
|
exit 1
|
|
fi
|
|
print_success "Docker is running"
|
|
|
|
# Check if docker-compose.yml exists
|
|
if [ ! -f "docker-compose.yml" ]; then
|
|
print_error "docker-compose.yml not found"
|
|
exit 1
|
|
fi
|
|
print_success "docker-compose.yml found"
|
|
|
|
# Check if .env exists, create from .env.example if not
|
|
if [ ! -f ".env" ]; then
|
|
print_info ".env not found, copying from .env.example"
|
|
cp .env.example .env
|
|
print_success ".env created from .env.example"
|
|
fi
|
|
|
|
# Clean up any existing containers
|
|
print_info "Cleaning up existing containers..."
|
|
docker compose down -v > /dev/null 2>&1 || true
|
|
print_success "Cleanup complete"
|
|
|
|
echo ""
|
|
echo "Starting core services..."
|
|
echo ""
|
|
|
|
# Start core services (no profiles)
|
|
print_info "Starting PostgreSQL, Valkey, API, and Web..."
|
|
docker compose up -d
|
|
|
|
# Wait a bit for services to initialize
|
|
sleep 5
|
|
|
|
# Check PostgreSQL
|
|
check_service_health "postgres" || exit 1
|
|
|
|
# Check Valkey
|
|
check_service_health "valkey" || exit 1
|
|
|
|
# Check API
|
|
check_service_health "api" || exit 1
|
|
|
|
# Check Web
|
|
check_service_health "web" || exit 1
|
|
|
|
echo ""
|
|
echo "Checking service endpoints..."
|
|
echo ""
|
|
|
|
# Check API health endpoint
|
|
check_http_endpoint "http://localhost:3001/health" "API" || exit 1
|
|
|
|
# Check Web
|
|
check_http_endpoint "http://localhost:3000" "Web" || exit 1
|
|
|
|
echo ""
|
|
echo "Checking service connectivity..."
|
|
echo ""
|
|
|
|
# Check PostgreSQL connectivity from API
|
|
print_info "Testing PostgreSQL connection from API..."
|
|
if docker compose exec -T api sh -c 'nc -zv postgres 5432' > /dev/null 2>&1; then
|
|
print_success "API can connect to PostgreSQL"
|
|
else
|
|
print_error "API cannot connect to PostgreSQL"
|
|
exit 1
|
|
fi
|
|
|
|
# Check Valkey connectivity from API
|
|
print_info "Testing Valkey connection from API..."
|
|
if docker compose exec -T api sh -c 'nc -zv valkey 6379' > /dev/null 2>&1; then
|
|
print_success "API can connect to Valkey"
|
|
else
|
|
print_error "API cannot connect to Valkey"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Checking Docker resources..."
|
|
echo ""
|
|
|
|
# Check volumes
|
|
print_info "Verifying volumes..."
|
|
if docker volume ls | grep -q "mosaic-postgres-data"; then
|
|
print_success "PostgreSQL volume created"
|
|
else
|
|
print_error "PostgreSQL volume missing"
|
|
exit 1
|
|
fi
|
|
|
|
if docker volume ls | grep -q "mosaic-valkey-data"; then
|
|
print_success "Valkey volume created"
|
|
else
|
|
print_error "Valkey volume missing"
|
|
exit 1
|
|
fi
|
|
|
|
# Check networks
|
|
print_info "Verifying networks..."
|
|
if docker network ls | grep -q "mosaic-internal"; then
|
|
print_success "Internal network created"
|
|
else
|
|
print_error "Internal network missing"
|
|
exit 1
|
|
fi
|
|
|
|
if docker network ls | grep -q "mosaic-public"; then
|
|
print_success "Public network created"
|
|
else
|
|
print_error "Public network missing"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "=================================================="
|
|
print_success "All tests passed!"
|
|
echo "=================================================="
|
|
echo ""
|
|
echo "Services are running:"
|
|
echo " - Web: http://localhost:3000"
|
|
echo " - API: http://localhost:3001"
|
|
echo " - API Health: http://localhost:3001/health"
|
|
echo " - PostgreSQL: localhost:5432"
|
|
echo " - Valkey: localhost:6379"
|
|
echo ""
|
|
echo "To view logs:"
|
|
echo " docker compose logs -f"
|
|
echo ""
|
|
echo "To stop services:"
|
|
echo " docker compose down"
|
|
echo ""
|
|
echo "To stop and remove volumes:"
|
|
echo " docker compose down -v"
|
|
echo ""
|
|
}
|
|
|
|
# Run main function
|
|
main
|