Blame view

test_all.sh 4.77 KB
a7653f3c   tangwang   补充脚本
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  #!/bin/bash
  
  # Complete test script for SearchEngine
  # This script performs full testing including data ingestion and service restart
  
  cd "$(dirname "$0")"
  
  GREEN='\033[0;32m'
  YELLOW='\033[1;33m'
  RED='\033[0;31m'
  NC='\033[0m'
  
  echo -e "${GREEN}========================================${NC}"
  echo -e "${GREEN}SearchEngine完整测试脚本${NC}"
  echo -e "${GREEN}========================================${NC}"
  
  # Step 1: Setup environment
  echo -e "\n${YELLOW}Step 1/4: 设置环境${NC}"
  if [ -f "./setup.sh" ]; then
      ./setup.sh
      if [ $? -eq 0 ]; then
          echo -e "${GREEN}✓ 环境设置完成${NC}"
      else
          echo -e "${RED}✗ 环境设置失败${NC}"
          exit 1
      fi
  else
      echo -e "${YELLOW}⚠ setup脚本不存在,跳过环境设置${NC}"
  fi
  
  # Step 2: Check and ingest data if needed
  echo -e "\n${YELLOW}Step 2/4: 检查并准备数据${NC}"
  source /home/tw/miniconda3/etc/profile.d/conda.sh
  conda activate searchengine
  
  # Check if index exists
  INDEX_EXISTS=$(python -c "
  from config.env_config import get_es_config
  from utils.es_client import ESClient
  from config import ConfigLoader
  
  try:
      es_config = get_es_config()
      es_client = ESClient(hosts=[es_config['host']], username=es_config.get('username'), password=es_config.get('password'))
  
      config_loader = ConfigLoader('config/schema')
      config = config_loader.load_customer_config('customer1')
  
      if es_client.index_exists(config.es_index_name):
          doc_count = es_client.count(config.es_index_name)
          print(f'{doc_count}')
      else:
          print('0')
  except Exception as e:
      print(f'0')
  " 2>/dev/null || echo "0")
  
  if [ "$INDEX_EXISTS" = "0" ]; then
      echo -e "${YELLOW}索引不存在,开始导入数据...${NC}"
      echo -e "${YELLOW}注意: 首次导入会下载模型文件,可能需要10-30分钟${NC}"
      echo -e "${YELLOW}导入1000条数据进行快速测试(跳过embedding以加快速度)${NC}"
  
      if [ -f "./scripts/ingest.sh" ]; then
          ./scripts/ingest.sh 1000 true
          if [ $? -eq 0 ]; then
              echo -e "${GREEN}✓ 数据导入完成${NC}"
          else
              echo -e "${RED}✗ 数据导入失败${NC}"
              exit 1
          fi
      else
          echo -e "${RED}✗ 数据导入脚本不存在${NC}"
          exit 1
      fi
  else
      echo -e "${GREEN}✓ 数据已存在,包含 $INDEX_EXISTS 条文档${NC}"
  fi
  
  # Step 3: Restart services (stop first, then start)
  echo -e "\n${YELLOW}Step 3/4: 重启服务${NC}"
  if [ -f "./restart.sh" ]; then
      ./restart.sh
      if [ $? -eq 0 ]; then
          echo -e "${GREEN}✓ 服务重启完成${NC}"
      else
          echo -e "${RED}✗ 服务重启失败${NC}"
          exit 1
      fi
  else
      echo -e "${RED}✗ 重启脚本不存在${NC}"
      exit 1
  fi
  
  # Step 4: Test the services
  echo -e "\n${YELLOW}Step 4/4: 测试服务${NC}"
  sleep 3
  
  # Test backend health
  echo -e "${YELLOW}测试后端服务健康状态...${NC}"
  if curl -s http://localhost:6002/admin/health > /dev/null 2>&1; then
      echo -e "${GREEN}✓ 后端服务健康检查通过${NC}"
  else
      echo -e "${YELLOW}⚠ 后端服务健康检查失败,但服务可能仍在启动${NC}"
  fi
  
  # Test frontend
  echo -e "${YELLOW}测试前端服务...${NC}"
  if curl -s http://localhost:6003/ > /dev/null 2>&1; then
      echo -e "${GREEN}✓ 前端服务可访问${NC}"
  else
      echo -e "${YELLOW}⚠ 前端服务可能还在启动中${NC}"
  fi
  
  # Test API endpoint
  echo -e "${YELLOW}测试API端点...${NC}"
  API_TEST_RESULT=$(curl -s -X GET "http://localhost:6002/search?q=test&size=5" 2>/dev/null | python -c "
  import json
  import sys
  try:
      data = json.load(sys.stdin)
      if 'results' in data and len(data['results']) > 0:
          print('API_TEST_OK')
      else:
          print('API_TEST_EMPTY')
  except:
      print('API_TEST_ERROR')
  " 2>/dev/null || echo "API_TEST_ERROR")
  
  case $API_TEST_RESULT in
      "API_TEST_OK")
          echo -e "${GREEN}✓ API测试通过,返回搜索结果${NC}"
          ;;
      "API_TEST_EMPTY")
          echo -e "${YELLOW}⚠ API测试通过,但返回空结果${NC}"
          ;;
      *)
          echo -e "${YELLOW}⚠ API测试失败,服务可能还在启动中${NC}"
          ;;
  esac
  
  echo -e "${GREEN}========================================${NC}"
  echo -e "${GREEN}完整测试流程结束!${NC}"
  echo -e "${GREEN}========================================${NC}"
  echo ""
  echo -e "服务状态:"
  echo -e "  ${GREEN}前端界面: http://localhost:6003${NC}"
  echo -e "  ${GREEN}后端API: http://localhost:6002${NC}"
  echo -e "  ${GREEN}API文档: http://localhost:6002/docs${NC}"
  echo ""
  echo -e "可用脚本:"
  echo -e "  ${YELLOW}./run.sh${NC}     - 仅启动服务(不导入数据)"
  echo -e "  ${YELLOW}./stop.sh${NC}    - 停止所有服务"
  echo -e "  ${YELLOW}./restart.sh${NC} - 重启所有服务"
  echo -e "  ${YELLOW}./test_all.sh${NC}- 完整测试(包含数据导入)"
  echo ""