mirror of
https://github.com/alibaba/higress.git
synced 2026-02-06 15:10:54 +08:00
138 lines
4.6 KiB
Bash
Executable File
138 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# 测试日志轮转功能
|
||
|
||
set -e
|
||
|
||
SKILL_DIR="$(dirname "$(dirname "$(realpath "$0")")")"
|
||
EXAMPLE_DIR="$SKILL_DIR/example"
|
||
TEST_DIR="$EXAMPLE_DIR/rotation_test"
|
||
LOG_FILE="$TEST_DIR/access.log"
|
||
OUTPUT_DIR="$TEST_DIR/sessions"
|
||
|
||
echo "========================================"
|
||
echo "Log Rotation Test"
|
||
echo "========================================"
|
||
echo ""
|
||
|
||
# 清理旧测试数据
|
||
rm -rf "$TEST_DIR"
|
||
mkdir -p "$TEST_DIR"
|
||
|
||
echo "📁 Test directory: $TEST_DIR"
|
||
echo ""
|
||
|
||
# 模拟日志轮转场景
|
||
echo "========================================"
|
||
echo "步骤1:创建初始日志文件"
|
||
echo "========================================"
|
||
|
||
# 创建第一批日志(10条)
|
||
for i in {1..10}; do
|
||
echo "{\"timestamp\":\"2026-02-01T10:0${i}:00Z\",\"ai_log\":\"{\\\"session_id\\\":\\\"session_001\\\",\\\"model\\\":\\\"gpt-4o\\\",\\\"input_token\\\":$((100+i)),\\\"output_token\\\":$((50+i)),\\\"cached_tokens\\\":$((30+i))}\"}" >> "$LOG_FILE"
|
||
done
|
||
|
||
echo "✅ Created $LOG_FILE with 10 lines"
|
||
echo ""
|
||
|
||
# 首次解析
|
||
echo "========================================"
|
||
echo "步骤2:首次解析(应该处理10条记录)"
|
||
echo "========================================"
|
||
python3 "$SKILL_DIR/main.py" \
|
||
--log-path "$LOG_FILE" \
|
||
--output-dir "$OUTPUT_DIR" \
|
||
|
||
|
||
echo ""
|
||
|
||
# 检查session数据
|
||
echo "Session数据:"
|
||
cat "$OUTPUT_DIR/session_001.json" | python3 -c "import sys, json; d=json.load(sys.stdin); print(f\" Messages: {d['messages_count']}, Total Input: {d['total_input_tokens']}\")"
|
||
echo ""
|
||
|
||
# 模拟日志轮转
|
||
echo "========================================"
|
||
echo "步骤3:模拟日志轮转"
|
||
echo "========================================"
|
||
mv "$LOG_FILE" "$LOG_FILE.1"
|
||
echo "✅ Rotated: access.log -> access.log.1"
|
||
echo ""
|
||
|
||
# 创建新的日志文件(5条新记录)
|
||
for i in {11..15}; do
|
||
echo "{\"timestamp\":\"2026-02-01T10:${i}:00Z\",\"ai_log\":\"{\\\"session_id\\\":\\\"session_001\\\",\\\"model\\\":\\\"gpt-4o\\\",\\\"input_token\\\":$((100+i)),\\\"output_token\\\":$((50+i)),\\\"cached_tokens\\\":$((30+i))}\"}" >> "$LOG_FILE"
|
||
done
|
||
|
||
echo "✅ Created new $LOG_FILE with 5 lines"
|
||
echo ""
|
||
|
||
# 再次解析(应该只处理新的5条)
|
||
echo "========================================"
|
||
echo "步骤4:再次解析(应该只处理新的5条)"
|
||
echo "========================================"
|
||
python3 "$SKILL_DIR/main.py" \
|
||
--log-path "$LOG_FILE" \
|
||
--output-dir "$OUTPUT_DIR" \
|
||
|
||
|
||
echo ""
|
||
|
||
# 检查session数据
|
||
echo "Session数据:"
|
||
cat "$OUTPUT_DIR/session_001.json" | python3 -c "import sys, json; d=json.load(sys.stdin); print(f\" Messages: {d['messages_count']}, Total Input: {d['total_input_tokens']} (应该是15条记录)\")"
|
||
echo ""
|
||
|
||
# 再次轮转
|
||
echo "========================================"
|
||
echo "步骤5:再次轮转"
|
||
echo "========================================"
|
||
mv "$LOG_FILE.1" "$LOG_FILE.2"
|
||
mv "$LOG_FILE" "$LOG_FILE.1"
|
||
echo "✅ Rotated: access.log -> access.log.1"
|
||
echo "✅ Rotated: access.log.1 -> access.log.2"
|
||
echo ""
|
||
|
||
# 创建新的日志文件(3条新记录)
|
||
for i in {16..18}; do
|
||
echo "{\"timestamp\":\"2026-02-01T10:${i}:00Z\",\"ai_log\":\"{\\\"session_id\\\":\\\"session_001\\\",\\\"model\\\":\\\"gpt-4o\\\",\\\"input_token\\\":$((100+i)),\\\"output_token\\\":$((50+i)),\\\"cached_tokens\\\":$((30+i))}\"}" >> "$LOG_FILE"
|
||
done
|
||
|
||
echo "✅ Created new $LOG_FILE with 3 lines"
|
||
echo ""
|
||
|
||
# 再次解析(应该只处理新的3条)
|
||
echo "========================================"
|
||
echo "步骤6:再次解析(应该只处理新的3条)"
|
||
echo "========================================"
|
||
python3 "$SKILL_DIR/main.py" \
|
||
--log-path "$LOG_FILE" \
|
||
--output-dir "$OUTPUT_DIR" \
|
||
|
||
|
||
echo ""
|
||
|
||
# 检查session数据
|
||
echo "Session数据:"
|
||
cat "$OUTPUT_DIR/session_001.json" | python3 -c "import sys, json; d=json.load(sys.stdin); print(f\" Messages: {d['messages_count']}, Total Input: {d['total_input_tokens']} (应该是18条记录)\")"
|
||
echo ""
|
||
|
||
# 检查状态文件
|
||
echo "========================================"
|
||
echo "步骤7:查看状态文件"
|
||
echo "========================================"
|
||
echo "状态文件内容:"
|
||
cat "$OUTPUT_DIR/.state.json" | python3 -m json.tool | head -20
|
||
echo ""
|
||
|
||
echo "========================================"
|
||
echo "✅ 测试完成!"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "💡 验证要点:"
|
||
echo " 1. 首次解析处理了10条记录"
|
||
echo " 2. 轮转后只处理新增的5条记录(总计15条)"
|
||
echo " 3. 再次轮转后只处理新增的3条记录(总计18条)"
|
||
echo " 4. 状态文件记录了每个文件的inode和offset"
|
||
echo ""
|
||
echo "📂 测试数据保存在: $TEST_DIR/"
|