182 lines
6.2 KiB
Bash
182 lines
6.2 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# 🔍 Testing-Autonomous 实时监控脚本
|
|||
|
|
# 用法: ./monitor.sh [project_path]
|
|||
|
|
|
|||
|
|
PROJECT_PATH=${1:-.}
|
|||
|
|
LOG_FILE="$PROJECT_PATH/.testing-autonomous/progress.log"
|
|||
|
|
COVERAGE_FILE="$PROJECT_PATH/target/site/jacoco/index.html"
|
|||
|
|
|
|||
|
|
# 颜色定义
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
echo -e "${BLUE}🔍 Testing-Autonomous 实时监控${NC}"
|
|||
|
|
echo "=================================="
|
|||
|
|
echo "项目路径: $PROJECT_PATH"
|
|||
|
|
echo "=================================="
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查配置文件
|
|||
|
|
if [ -f "$PROJECT_PATH/.testing-autonomous/config.yml" ]; then
|
|||
|
|
echo -e "${GREEN}✅ 配置文件存在${NC}"
|
|||
|
|
TARGET_COVERAGE=$(grep "instruction:" "$PROJECT_PATH/.testing-autonomous/config.yml" | head -1 | awk '{print $2}' | tr -d '%')
|
|||
|
|
echo "🎯 目标覆盖率: ${TARGET_COVERAGE}%"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}⚠️ 配置文件不存在,使用默认配置${NC}"
|
|||
|
|
TARGET_COVERAGE=85
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 实时监控函数
|
|||
|
|
monitor_progress() {
|
|||
|
|
local last_coverage=0
|
|||
|
|
local round=0
|
|||
|
|
|
|||
|
|
while true; do
|
|||
|
|
clear
|
|||
|
|
echo -e "${BLUE}🔍 Testing-Autonomous 实时监控${NC}"
|
|||
|
|
echo "=================================="
|
|||
|
|
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
|||
|
|
echo "=================================="
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 显示进度日志(最近20行)
|
|||
|
|
if [ -f "$LOG_FILE" ]; then
|
|||
|
|
echo -e "${BLUE}📊 最新进展:${NC}"
|
|||
|
|
tail -20 "$LOG_FILE" 2>/dev/null | while read line; do
|
|||
|
|
if [[ $line == *"ERROR"* ]] || [[ $line == *"失败"* ]]; then
|
|||
|
|
echo -e "${RED}$line${NC}"
|
|||
|
|
elif [[ $line == *"SUCCESS"* ]] || [[ $line == *"成功"* ]]; then
|
|||
|
|
echo -e "${GREEN}$line${NC}"
|
|||
|
|
elif [[ $line == *"WARNING"* ]] || [[ $line == *"警告"* ]]; then
|
|||
|
|
echo -e "${YELLOW}$line${NC}"
|
|||
|
|
else
|
|||
|
|
echo "$line"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
echo ""
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 解析当前覆盖率
|
|||
|
|
if [ -f "$COVERAGE_FILE" ]; then
|
|||
|
|
# 从JaCoCo报告中提取覆盖率
|
|||
|
|
COVERAGE=$(grep -o 'ctr2>[0-9]*%' "$COVERAGE_FILE" | head -1 | grep -o '[0-9]*')
|
|||
|
|
if [ ! -z "$COVERAGE" ]; then
|
|||
|
|
echo -e "${BLUE}📈 覆盖率状态:${NC}"
|
|||
|
|
echo "当前: ${COVERAGE}%"
|
|||
|
|
echo "目标: ${TARGET_COVERAGE}%"
|
|||
|
|
|
|||
|
|
# 计算进度条
|
|||
|
|
PROGRESS=$((COVERAGE * 50 / 100)) # 50字符宽度的进度条
|
|||
|
|
BAR=$(printf '%*s' "$PROGRESS" | tr ' ' '█')
|
|||
|
|
REMAINING=$((50 - PROGRESS))
|
|||
|
|
EMPTY=$(printf '%*s' "$REMAINING" | tr ' ' '░')
|
|||
|
|
|
|||
|
|
if [ $COVERAGE -ge $TARGET_COVERAGE ]; then
|
|||
|
|
echo -e "${GREEN}进度: [${BAR}${EMPTY}] ${COVERAGE}% ✅ 已达标${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${YELLOW}进度: [${BAR}${EMPTY}] ${COVERAGE}% 🔄 继续优化${NC}"
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 显示差距
|
|||
|
|
GAP=$((TARGET_COVERAGE - COVERAGE))
|
|||
|
|
if [ $GAP -gt 0 ]; then
|
|||
|
|
echo -e "${YELLOW}还需提升: ${GAP}%${NC}"
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 检查测试执行状态
|
|||
|
|
if [ -f "$PROJECT_PATH/target/surefire-reports" ]; then
|
|||
|
|
TEST_COUNT=$(find "$PROJECT_PATH/target/surefire-reports" -name "*.txt" | wc -l)
|
|||
|
|
echo -e "${BLUE}🧪 测试统计:${NC}"
|
|||
|
|
echo "测试文件: $TEST_COUNT 个"
|
|||
|
|
|
|||
|
|
# 统计失败/错误
|
|||
|
|
FAILURES=$(grep -l "FAILURE\|ERROR" "$PROJECT_PATH/target/surefire-reports"/*.txt 2>/dev/null | wc -l)
|
|||
|
|
if [ $FAILURES -gt 0 ]; then
|
|||
|
|
echo -e "${RED}❌ 失败: $FAILURES${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "${GREEN}✅ 全部通过${NC}"
|
|||
|
|
fi
|
|||
|
|
echo ""
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 检查是否有卡住迹象
|
|||
|
|
if [ -f "$LOG_FILE" ]; then
|
|||
|
|
LAST_UPDATE=$(stat -c %Y "$LOG_FILE" 2>/dev/null || stat -f %m "$LOG_FILE" 2>/dev/null)
|
|||
|
|
CURRENT_TIME=$(date +%s)
|
|||
|
|
TIME_DIFF=$((CURRENT_TIME - LAST_UPDATE))
|
|||
|
|
|
|||
|
|
if [ $TIME_DIFF -gt 300 ]; then # 5分钟无更新
|
|||
|
|
echo -e "${RED}⚠️ 警告: 已超过5分钟无进展,可能卡住${NC}"
|
|||
|
|
echo -e "${YELLOW} 自动恢复机制应该已经启动...${NC}"
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${BLUE}==================================${NC}"
|
|||
|
|
echo "按 Ctrl+C 退出监控"
|
|||
|
|
echo -e "${BLUE}==================================${NC}"
|
|||
|
|
|
|||
|
|
# 每5秒刷新一次
|
|||
|
|
sleep 5
|
|||
|
|
done
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 快速统计模式
|
|||
|
|
quick_stats() {
|
|||
|
|
echo -e "${BLUE}📊 快速统计${NC}"
|
|||
|
|
echo "=================================="
|
|||
|
|
|
|||
|
|
# 测试数量
|
|||
|
|
if [ -d "$PROJECT_PATH/src/test/java" ]; then
|
|||
|
|
TEST_FILES=$(find "$PROJECT_PATH/src/test/java" -name "*Test.java" | wc -l)
|
|||
|
|
echo -e "测试文件: ${GREEN}$TEST_FILES${NC} 个"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 覆盖率
|
|||
|
|
if [ -f "$COVERAGE_FILE" ]; then
|
|||
|
|
COVERAGE=$(grep -o 'ctr2>[0-9]*%' "$COVERAGE_FILE" | head -1 | grep -o '[0-9]*')
|
|||
|
|
if [ ! -z "$COVERAGE" ]; then
|
|||
|
|
if [ $COVERAGE -ge $TARGET_COVERAGE ]; then
|
|||
|
|
echo -e "覆盖率: ${GREEN}${COVERAGE}% ✅${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "覆盖率: ${YELLOW}${COVERAGE}% 🔄${NC} (目标: ${TARGET_COVERAGE}%)"
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 配置文件状态
|
|||
|
|
if [ -f "$PROJECT_PATH/.testing-autonomous/config.yml" ]; then
|
|||
|
|
echo -e "配置: ${GREEN}✅ 已配置${NC}"
|
|||
|
|
else
|
|||
|
|
echo -e "配置: ${RED}❌ 未配置${NC}"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "=================================="
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主逻辑
|
|||
|
|
case "${2:-monitor}" in
|
|||
|
|
monitor)
|
|||
|
|
monitor_progress
|
|||
|
|
;;
|
|||
|
|
stats)
|
|||
|
|
quick_stats
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
echo "用法: $0 [project_path] [monitor|stats]"
|
|||
|
|
echo ""
|
|||
|
|
echo "示例:"
|
|||
|
|
echo " $0 . monitor # 实时监控当前项目"
|
|||
|
|
echo " $0 . stats # 快速统计"
|
|||
|
|
echo " $0 /path/to/project monitor # 监控指定项目"
|
|||
|
|
exit 1
|
|||
|
|
;;
|
|||
|
|
esac
|