#!/usr/bin/env bash # ============================================================================= # OmniShopAgent - 服务健康检查脚本 # 检查 Milvus、CLIP、Streamlit 等依赖服务状态 # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo "==========================================" echo "OmniShopAgent 服务健康检查" echo "==========================================" # 1. Python 环境 echo -n "[Python] " if command -v python3 &>/dev/null; then VER=$(python3 -c 'import sys; v=sys.version_info; print(f"{v.major}.{v.minor}.{v.micro}")' 2>/dev/null) if [[ "$VER" == "3.1"* ]] || [[ "$VER" == "3.12"* ]]; then echo -e "${GREEN}OK${NC} $VER" else echo -e "${YELLOW}WARN${NC} $VER (建议 3.12+)" fi else echo -e "${RED}FAIL${NC} 未找到" fi # 2. 虚拟环境 echo -n "[Virtualenv] " if [ -d "$PROJECT_ROOT/venv" ]; then echo -e "${GREEN}OK${NC} $PROJECT_ROOT/venv" else echo -e "${YELLOW}WARN${NC} 未找到 venv" fi # 3. .env 配置 echo -n "[.env] " if [ -f "$PROJECT_ROOT/.env" ]; then if grep -q "OPENAI_API_KEY=sk-" "$PROJECT_ROOT/.env" 2>/dev/null; then echo -e "${GREEN}OK${NC} 已配置" else echo -e "${YELLOW}WARN${NC} 请配置 OPENAI_API_KEY" fi else echo -e "${RED}FAIL${NC} 未找到" fi # 4. Milvus echo -n "[Milvus] " if command -v docker &>/dev/null; then if docker ps --format '{{.Names}}' 2>/dev/null | grep -q milvus-standalone; then if curl -s -o /dev/null -w "%{http_code}" http://localhost:9091/healthz 2>/dev/null | grep -q 200; then echo -e "${GREEN}OK${NC} localhost:19530" else echo -e "${YELLOW}WARN${NC} 容器运行中,健康检查未响应" fi else echo -e "${YELLOW}WARN${NC} 未运行 (docker compose up -d)" fi else echo -e "${YELLOW}SKIP${NC} Docker 未安装" fi # 5. CLIP 服务(可选) echo -n "[CLIP] " if timeout 2 bash -c 'echo >/dev/tcp/localhost/51000' 2>/dev/null; then echo -e "${GREEN}OK${NC} localhost:51000" else echo -e "${YELLOW}WARN${NC} 未运行 (图像搜索需启动: python -m clip_server launch)" fi # 6. 数据目录 echo -n "[数据] " if [ -d "$PROJECT_ROOT/data/images" ] && [ -f "$PROJECT_ROOT/data/styles.csv" ]; then IMG_COUNT=$(find "$PROJECT_ROOT/data/images" -name "*.jpg" 2>/dev/null | wc -l) echo -e "${GREEN}OK${NC} $IMG_COUNT 张图片" else echo -e "${YELLOW}WARN${NC} 未找到 data/images 或 data/styles.csv (运行 download_dataset.py)" fi # 7. Streamlit echo -n "[Streamlit] " if pgrep -f "streamlit run app.py" >/dev/null 2>&1; then echo -e "${GREEN}OK${NC} 运行中" else echo -e "${YELLOW}WARN${NC} 未运行 (./scripts/start.sh)" fi echo "=========================================="