#!/bin/bash

# 达梦8数据库性能分析脚本
# 逐步增加负载来分析系统性能瓶颈

SCRIPT_DIR=$(pwd)
TEST_SCRIPT="$SCRIPT_DIR/dm8-test.sh"
# 创建以时间命名的结果目录：YYYYMMDD_HHMMSS
TIMESTAMP=$(date '+%Y%m%d_%H%M%S')
RESULTS_DIR="$SCRIPT_DIR/results/$TIMESTAMP"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 创建结果目录
mkdir -p "$RESULTS_DIR"

log() {
    echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}

# 测试配置数组：连接数:持续时间
test_configs=(
    "100:10"
    "500:15"
    "1000:20"
    "2000:30"
    "3000:30"
    "4000:30"
    "5000:30"
)

log "${GREEN}===== 达梦8数据库性能分析开始 =====${NC}"
log "测试会话ID: $TIMESTAMP"
log "结果存储目录: $RESULTS_DIR"
log "将进行渐进式性能测试，分析系统性能曲线"
log ""

for config in "${test_configs[@]}"; do
    connections=$(echo "$config" | cut -d: -f1)
    duration=$(echo "$config" | cut -d: -f2)
    
    log "${BLUE}测试配置: ${connections}个并发连接，持续${duration}秒${NC}"
    
    # 运行测试
    log "开始测试..."
    "$TEST_SCRIPT" -c "$connections" -d "$duration" > "$RESULTS_DIR/test_${connections}_${duration}.log" 2>&1
    test_exit_code=$?
    
    # 检查测试是否成功执行（不考虑性能目标）
    if [ -s "$RESULTS_DIR/test_${connections}_${duration}.log" ] && grep -q "测试完成" "$RESULTS_DIR/test_${connections}_${duration}.log"; then
        log "${GREEN}✓ 测试执行完成${NC}"
    else
        log "${RED}✗ 测试执行失败${NC}"
    fi
    
    # 提取关键指标
    result_file="$RESULTS_DIR/test_${connections}_${duration}.log"
    if [ -f "$result_file" ]; then
        sql_rate=$(grep "平均SQL执行率:" "$result_file" | sed 's/\[[0-9;]*m//g' | awk '{print $5}')
        active_conns=$(grep "有效并发连接数:" "$result_file" | sed 's/\[[0-9;]*m//g' | awk '{print $5}')
        success_rate=$(grep "成功率:" "$result_file" | sed 's/\[[0-9;]*m//g' | awk '{print $5}' | sed 's/%//')
        
        log "  结果: 有效连接=${active_conns}, SQL执行率=${sql_rate}条/秒, 成功率=${success_rate}%"
        
        # 显示性能目标达成状态
        target_status=""
        if [ -n "$active_conns" ] && [ "$active_conns" -ge 5000 ]; then
            target_status="${target_status}连接数✓ "
        else
            target_status="${target_status}连接数✗ "
        fi
        
        if [ -n "$sql_rate" ] && [ "$(echo "$sql_rate" | cut -d. -f1)" -ge 3000 ]; then
            target_status="${target_status}SQL率✓"
        else
            target_status="${target_status}SQL率✗"
        fi
        
        log "  性能目标: ${target_status} (目标: ≥5000连接, ≥3000条/秒)"
        
        # 记录到汇总文件
        echo "$connections,$duration,$active_conns,$sql_rate,$success_rate" >> "$RESULTS_DIR/summary.csv"
    fi
    
    log "  等待5秒后进行下一项测试..."
    sleep 5
    log ""
done

log "${GREEN}===== 性能分析完成 =====${NC}"
log "生成性能分析报告..."

# 生成分析报告
cat > "$RESULTS_DIR/analysis_report.txt" << EOF
达梦8数据库性能分析报告
生成时间: $(date)

测试配置总览:
连接数  持续时间  有效连接  SQL执行率  成功率
----------------------------------------
EOF

if [ -f "$RESULTS_DIR/summary.csv" ]; then
    while IFS=',' read -r conns duration active_conns sql_rate success_rate; do
        printf "%-8s %-8s %-8s %-10s %-8s\n" "$conns" "$duration" "$active_conns" "$sql_rate" "$success_rate" >> "$RESULTS_DIR/analysis_report.txt"
    done < "$RESULTS_DIR/summary.csv"
fi

cat >> "$RESULTS_DIR/analysis_report.txt" << EOF

性能建议:
1. 如果有效连接数远小于目标连接数，可能存在连接池限制
2. 如果SQL执行率随连接数增加而下降，可能存在资源竞争
3. 如果成功率下降，可能存在超时或错误增加

详细日志文件位于: $RESULTS_DIR/
测试数据CSV: $RESULTS_DIR/summary.csv
EOF

log "分析报告已生成: $RESULTS_DIR/analysis_report.txt"
log "CSV数据文件: $RESULTS_DIR/summary.csv"
log "详细日志位于: $RESULTS_DIR/"

# 显示报告
cat "$RESULTS_DIR/analysis_report.txt"
