Blame view

scripts/check_services.sh 2.93 KB
e7f2b240   tangwang   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  #!/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 "=========================================="