- 产品编辑入口统一走 ProductFormFull(卖点/风格/人群/品牌词全字段); 修复开任务页 <form> 套 <form> 致"编辑产品"报错、改不了、跳回首个产品 - dashboard 入口卡片对齐实际路由: 系统管理(/config) 与 工作配置(/settings) 分开; settings ?tab=products 直达改用挂载后读 URL, 消除 hydration mismatch - 新增用户管理(users API/admin service/改密页) + alembic 022/023/024 - 上线部署: Dockerfile / docker-compose.prod+https / nginx https / .env.example - A8 三套正交叙事(痛点/场景/成分背书) + beige 调色去AI化 + 飞轮 text_import 高权重信号 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
71 lines
2.6 KiB
Bash
Executable File
71 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# watch.sh — Clover 全站实时监控
|
|
# 用途: 倩倩姐操作页面时, 实时显示哪个请求出错(4xx/5xx)、哪里抛异常。
|
|
# 用法: bash backend/scripts/watch.sh # 只看错误(默认, 干净)
|
|
# bash backend/scripts/watch.sh --all # 看全部请求(含正常)
|
|
# 退出: Ctrl-C
|
|
set -u
|
|
|
|
MODE="${1:-errors}" # errors(默认只看错误) | --all(全部)
|
|
|
|
# 颜色
|
|
R=$'\033[31m'; G=$'\033[32m'; Y=$'\033[33m'; B=$'\033[36m'; DIM=$'\033[2m'; N=$'\033[0m'
|
|
|
|
echo "${B}========================================${N}"
|
|
echo "${B} Clover 实时监控 (Ctrl-C 退出)${N}"
|
|
if [ "$MODE" = "--all" ]; then
|
|
echo " 模式: 全部请求"
|
|
else
|
|
echo " 模式: 只看错误 (加 --all 看全部)"
|
|
fi
|
|
echo "${B}========================================${N}"
|
|
echo "${DIM}盯着: clover_api + clover_worker. 现在去浏览器操作, 出错会标红.${N}"
|
|
echo ""
|
|
|
|
# 同时跟随 api 和 worker 日志, 每行打上来源标签
|
|
{
|
|
docker logs -f --tail 0 clover_api 2>&1 | sed "s/^/[API] /" &
|
|
API_PID=$!
|
|
docker logs -f --tail 0 clover_worker 2>&1 | sed "s/^/[WRK] /" &
|
|
WRK_PID=$!
|
|
trap "kill $API_PID $WRK_PID 2>/dev/null" EXIT INT TERM
|
|
wait
|
|
} | while IFS= read -r line; do
|
|
# 过滤纯噪音: 健康检查 + SQLAlchemy 回显
|
|
case "$line" in
|
|
*"/health"*) continue ;;
|
|
*"sqlalchemy"*|*"SELECT "*|*"FROM "*|*"WHERE "*|*"LIMIT "*|*"INSERT "*|*"UPDATE "*|*"BEGIN "*|*"COMMIT"*|*"ROLLBACK"*) continue ;;
|
|
esac
|
|
|
|
ts=$(date '+%H:%M:%S')
|
|
|
|
# 1) HTTP 请求行: 提取状态码
|
|
if echo "$line" | grep -qE '"(GET|POST|PUT|DELETE|PATCH) '; then
|
|
code=$(echo "$line" | grep -oE 'HTTP/1\.1" [0-9]{3}' | grep -oE '[0-9]{3}$')
|
|
req=$(echo "$line" | grep -oE '"(GET|POST|PUT|DELETE|PATCH) [^"]*"')
|
|
src=$(echo "$line" | grep -oE '^\[[A-Z]+\]')
|
|
case "$code" in
|
|
2*) [ "$MODE" = "--all" ] && echo "${DIM}${ts} ${src} ${G}${code}${N}${DIM} ${req}${N}" ;;
|
|
4*) echo "${ts} ${src} ${Y}${code} ⚠ 客户端错误${N} ${req}" ;;
|
|
5*) echo "${ts} ${src} ${R}${code} ✖ 服务端错误${N} ${req}" ;;
|
|
*) [ "$MODE" = "--all" ] && echo "${ts} ${src} ${code} ${req}" ;;
|
|
esac
|
|
continue
|
|
fi
|
|
|
|
# 2) 异常/报错/堆栈: 永远显示并标红
|
|
if echo "$line" | grep -qiE "error|exception|traceback|critical|失败|拒绝|unauthorized|forbidden|raise"; then
|
|
echo "${ts} ${R}${line}${N}"
|
|
continue
|
|
fi
|
|
|
|
# 3) WARNING 级: 黄色提示
|
|
if echo "$line" | grep -qE "WARNING|warn"; then
|
|
echo "${ts} ${Y}${line}${N}"
|
|
continue
|
|
fi
|
|
|
|
# 4) 其余行仅在 --all 模式显示
|
|
[ "$MODE" = "--all" ] && echo "${DIM}${ts} ${line}${N}"
|
|
done
|