feat(alerts): 添加微信告警、WebSocket实时推送和地图功能

- 新增微信告警服务(wechat_service)和告警任务(alert_tasks)
- 新增 WebSocket 实时推送端点
- 新增监控管理模块(monitor)
- 增强统计仪表板:趋势图、区域分布、光功率历史
- 设备管理:添加坐标信息、标签系统、复合索引优化
- 前端:重构Dashboard/Charts页面,新增业务组件
- 新增5个数据库迁移(坐标、复合索引、标签、光功率历史、显示名)
- 更新部署配置和脚本
- 新增测试框架基础结构
This commit is contained in:
2026-06-11 15:16:29 +08:00
parent 3453441754
commit b2c20ec43d
45 changed files with 2089 additions and 107 deletions
+9
View File
@@ -168,6 +168,15 @@ RATE_LIMIT_PER_HOUR=1000
# 数据库备份目录
BACKUP_DIR=/app/backups
# 企业微信告警配置
WECHAT_CORPID=
WECHAT_CORPSECRET=
WECHAT_AGENTID=
WECHAT_TOKEN=
WECHAT_ENCODING_AES_KEY=
WECHAT_USE_PROXY=True
WECHAT_PROXY_API_URL=https://api.v6ole.top
# 备份保留天数
BACKUP_RETENTION=30
+21
View File
@@ -18,6 +18,13 @@ services:
- CASDOOR_APP_NAME=${CASDOOR_APP_NAME}
- SECRET_KEY=${SECRET_KEY}
- DEBUG=${DEBUG:-false}
- WECHAT_CORPID=${WECHAT_CORPID:-}
- WECHAT_CORPSECRET=${WECHAT_CORPSECRET:-}
- WECHAT_AGENTID=${WECHAT_AGENTID:-}
- WECHAT_TOKEN=${WECHAT_TOKEN:-}
- WECHAT_ENCODING_AES_KEY=${WECHAT_ENCODING_AES_KEY:-}
- WECHAT_USE_PROXY=${WECHAT_USE_PROXY:-True}
- WECHAT_PROXY_API_URL=${WECHAT_PROXY_API_URL:-https://api.v6ole.top}
volumes:
- ../backend/logs:/app/logs
- ../backend/static:/app/static
@@ -46,6 +53,13 @@ services:
- CASDOOR_ORG_NAME=${CASDOOR_ORG_NAME}
- CASDOOR_APP_NAME=${CASDOOR_APP_NAME}
- SECRET_KEY=${SECRET_KEY}
- WECHAT_CORPID=${WECHAT_CORPID:-}
- WECHAT_CORPSECRET=${WECHAT_CORPSECRET:-}
- WECHAT_AGENTID=${WECHAT_AGENTID:-}
- WECHAT_TOKEN=${WECHAT_TOKEN:-}
- WECHAT_ENCODING_AES_KEY=${WECHAT_ENCODING_AES_KEY:-}
- WECHAT_USE_PROXY=${WECHAT_USE_PROXY:-True}
- WECHAT_PROXY_API_URL=${WECHAT_PROXY_API_URL:-https://api.v6ole.top}
volumes:
- ../backend/logs:/app/logs
depends_on:
@@ -69,6 +83,13 @@ services:
- CASDOOR_ORG_NAME=${CASDOOR_ORG_NAME}
- CASDOOR_APP_NAME=${CASDOOR_APP_NAME}
- SECRET_KEY=${SECRET_KEY}
- WECHAT_CORPID=${WECHAT_CORPID:-}
- WECHAT_CORPSECRET=${WECHAT_CORPSECRET:-}
- WECHAT_AGENTID=${WECHAT_AGENTID:-}
- WECHAT_TOKEN=${WECHAT_TOKEN:-}
- WECHAT_ENCODING_AES_KEY=${WECHAT_ENCODING_AES_KEY:-}
- WECHAT_USE_PROXY=${WECHAT_USE_PROXY:-True}
- WECHAT_PROXY_API_URL=${WECHAT_PROXY_API_URL:-https://api.v6ole.top}
volumes:
- ../backend/logs:/app/logs
depends_on:
+21 -2
View File
@@ -216,12 +216,31 @@ backup_data() {
echo "环境: $ENV" >> "$BACKUP_DIR/backup.info"
echo "版本: $(git describe --tags 2>/dev/null || echo '未知')" >> "$BACKUP_DIR/backup.info"
# 验证数据库备份
echo -e "${BLUE}验证数据库备份...${NC}"
if [ -f "$BACKUP_DIR/database.sql" ]; then
SQL_SIZE=$(wc -c < "$BACKUP_DIR/database.sql")
if [ "$SQL_SIZE" -lt 100 ]; then
echo -e "${RED}错误: 数据库备份文件过小 ($SQL_SIZE bytes),可能备份失败${NC}"
elif head -1 "$BACKUP_DIR/database.sql" | grep -qiE "^(--|SET|CREATE|COPY|INSERT|ALTER)"; then
echo -e "${GREEN}数据库备份验证通过 ($SQL_SIZE bytes)${NC}"
else
echo -e "${YELLOW}警告: 数据库备份格式异常,请检查${NC}"
fi
fi
# 压缩备份文件
echo -e "${BLUE}压缩备份文件...${NC}"
tar -czf "$BACKUP_DIR.tar.gz" "$BACKUP_DIR"
rm -rf "$BACKUP_DIR"
echo -e "${GREEN}备份完成: $BACKUP_DIR.tar.gz${NC}"
# 清理旧备份(保留最近 30 天)
echo -e "${BLUE}清理旧备份(保留30天)...${NC}"
find backups/ -name "*.tar.gz" -mtime +30 -delete 2>/dev/null
find backups/ -name "*.tar.gz" -mtime +30 -exec echo " 删除: {}" \; 2>/dev/null
BACKUP_COUNT=$(find backups/ -name "*.tar.gz" | wc -l)
echo -e "${GREEN}备份完成: $BACKUP_DIR.tar.gz (现存 ${BACKUP_COUNT} 个备份)${NC}"
}
# 函数:恢复数据