Files
abot/优化需求.md
2025-03-18 17:40:59 +08:00

198 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 插件使用统计功能设计思路
为了实现对用户触发的指令进行统计,我需要设计一个完整的数据收集和分析系统。以下是我的思路整理:
## 1. 数据收集层
### 核心需求
- 记录每次插件被调用的详细信息
- 包括调用者、调用时间、调用结果等
- 尽量不影响现有插件的性能
### 实现方式
1. **装饰器模式**:创建一个装饰器函数,包装插件的`process_message`方法
2. **钩子函数**:在消息处理前后添加钩子函数,记录调用信息
3. **中间件**:在消息处理流程中添加统计中间件
## 2. 数据存储层
### 表结构设计
- **插件使用记录表**:记录每次调用的原始数据
- **用户使用统计表**:按用户汇总的使用情况
- **群组使用统计表**:按群组汇总的使用情况
- **插件统计汇总表**:按插件和时间维度汇总的数据
- **错误日志表**:记录插件执行错误的详细信息
### 数据字段
- 基础信息插件名、命令、用户ID、群组ID等
- 时间信息:调用时间、处理耗时等
- 结果信息:成功/失败、返回消息等
- 统计信息:调用次数、成功率、平均响应时间等
## 3. 数据分析层
### 统计维度
- 时间维度:按小时、天、周、月统计
- 用户维度:用户活跃度、偏好插件等
- 群组维度:群组活跃度、特征插件等
- 插件维度:使用频率、成功率、响应时间等
### 分析指标
- 插件使用频率排行
- 用户活跃度排行
- 群组活跃度排行
- 命令成功率分析
- 响应时间分析
## 4. 实现方案
### 方案一:基于现有消息处理流程的改造
1.`MessagePluginInterface`中添加统计方法
2. 修改`Robot`类的消息处理流程,添加统计逻辑
3. 创建数据库操作类,处理统计数据的存储和查询
### 方案二:独立的统计模块
1. 创建独立的统计插件,通过事件系统监听消息处理事件
2. 实现数据收集、存储和分析功能
3. 提供API接口供Web管理界面调用
## 5. 数据可视化
### 看板设计
- 插件使用趋势图
- 用户活跃度热力图
- 群组活跃度排行榜
- 命令成功率饼图
- 响应时间分布图
### 报表功能
- 定期生成使用报告
- 异常监控报警
- 性能分析报告
这个设计思路全面考虑了数据收集、存储、分析和可视化的各个环节,可以为后期的看板数据分析提供丰富的数据支持。
# 方案二:独立统计模块实现方案
如果采用方案二(独立的统计模块),我们可以创建一个专门的插件来处理统计功能。这种方式的优点是与现有代码耦合度低,可以独立开发和部署。
## 项目目录结构
```
d:\learn\WeChatRobot\
├── plugins\
│ ├── stats_collector\ # 统计收集插件
│ │ ├── __init__.py # 插件初始化文件
│ │ ├── main.py # 插件主入口
│ │ ├── stats_collector.py # 统计收集核心逻辑
│ │ ├── event_handlers.py # 事件处理器
│ │ ├── config.yaml # 插件配置文件
│ │ └── README.md # 插件说明文档
│ │
│ └── stats_dashboard\ # 统计看板插件(可选)
│ ├── __init__.py # 插件初始化文件
│ ├── main.py # 插件主入口
│ ├── dashboard_server.py # 看板服务器
│ ├── templates\ # 前端模板
│ │ ├── index.html # 主页
│ │ ├── plugins.html # 插件统计页
│ │ ├── users.html # 用户统计页
│ │ └── groups.html # 群组统计页
│ ├── static\ # 静态资源
│ │ ├── css\ # 样式文件
│ │ ├── js\ # JavaScript文件
│ │ └── img\ # 图片资源
│ ├── config.yaml # 插件配置文件
│ └── README.md # 插件说明文档
├── db\
│ ├── stats_db.py # 统计数据库操作类
│ └── models\
│ ├── plugin_stats.py # 插件使用记录模型
│ ├── user_stats.py # 用户统计模型
│ ├── group_stats.py # 群组统计模型
│ └── error_log.py # 错误日志模型
├── event_system\
│ └── events\
│ ├── plugin_events.py # 添加插件相关事件定义
│ └── stats_events.py # 统计相关事件定义
└── web_manager\ # Web管理界面可选
├── api\
│ └── stats_api.py # 统计数据API
└── templates\
└── stats_dashboard.html # 统计看板页面
```
## 实现思路
### 1. 事件系统扩展
在现有的事件系统中添加以下事件类型:
- `PluginCallStartEvent`: 插件调用开始事件
- `PluginCallEndEvent`: 插件调用结束事件
- `PluginCallErrorEvent`: 插件调用错误事件
### 2. 统计收集插件
`stats_collector` 插件负责:
- 监听插件调用相关事件
- 收集调用信息(插件名、命令、用户、群组、时间等)
- 计算处理时间
- 将数据存储到数据库
### 3. 数据库模型
创建以下数据库表:
- `t_plugin_stats`: 记录每次插件调用的详细信息
- `t_user_stats`: 按用户汇总的统计信息
- `t_group_stats`: 按群组汇总的统计信息
- `t_plugin_stats`: 按插件汇总的统计信息
- `t_error_logs`: 记录插件执行错误的详细信息
### 4. 机器人核心修改
`Robot` 类的消息处理流程中添加事件触发点:
- 在调用插件前触发 `PluginCallStartEvent`
- 在调用插件后触发 `PluginCallEndEvent`
- 在捕获到异常时触发 `PluginCallErrorEvent`
### 5. 统计看板插件(可选)
`stats_dashboard` 插件负责:
- 启动一个轻量级Web服务器
- 提供统计数据的可视化界面
- 支持多种维度的数据查询和展示
### 6. Web管理界面集成可选
在现有的Web管理界面中添加统计看板页面展示
- 插件使用趋势图
- 用户活跃度排行
- 群组活跃度排行
- 命令成功率分析
- 响应时间分析
## 工作流程
1. 用户发送消息
2. 机器人处理消息,找到匹配的插件
3. 触发 `PluginCallStartEvent` 事件
4. `stats_collector` 插件记录开始时间和基本信息
5. 插件处理消息
6. 触发 `PluginCallEndEvent` 事件
7. `stats_collector` 插件计算处理时间,记录结果
8. 数据存储到数据库
9. 统计看板实时更新数据
这种实现方式可以最小化对现有代码的修改,同时提供全面的统计功能。