7.0 KiB
7.0 KiB
插件使用统计功能设计思路
为了实现对用户触发的指令进行统计,我需要设计一个完整的数据收集和分析系统。以下是我的思路整理:
1. 数据收集层
核心需求
- 记录每次插件被调用的详细信息
- 包括调用者、调用时间、调用结果等
- 尽量不影响现有插件的性能
实现方式
- 装饰器模式:创建一个装饰器函数,包装插件的
process_message方法 - 钩子函数:在消息处理前后添加钩子函数,记录调用信息
- 中间件:在消息处理流程中添加统计中间件
2. 数据存储层
表结构设计
- 插件使用记录表:记录每次调用的原始数据
- 用户使用统计表:按用户汇总的使用情况
- 群组使用统计表:按群组汇总的使用情况
- 插件统计汇总表:按插件和时间维度汇总的数据
- 错误日志表:记录插件执行错误的详细信息
数据字段
- 基础信息:插件名、命令、用户ID、群组ID等
- 时间信息:调用时间、处理耗时等
- 结果信息:成功/失败、返回消息等
- 统计信息:调用次数、成功率、平均响应时间等
3. 数据分析层
统计维度
- 时间维度:按小时、天、周、月统计
- 用户维度:用户活跃度、偏好插件等
- 群组维度:群组活跃度、特征插件等
- 插件维度:使用频率、成功率、响应时间等
分析指标
- 插件使用频率排行
- 用户活跃度排行
- 群组活跃度排行
- 命令成功率分析
- 响应时间分析
4. 实现方案
方案一:基于现有消息处理流程的改造
- 在
MessagePluginInterface中添加统计方法 - 修改
Robot类的消息处理流程,添加统计逻辑 - 创建数据库操作类,处理统计数据的存储和查询
方案二:独立的统计模块
- 创建独立的统计插件,通过事件系统监听消息处理事件
- 实现数据收集、存储和分析功能
- 提供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管理界面中添加统计看板页面,展示:
- 插件使用趋势图
- 用户活跃度排行
- 群组活跃度排行
- 命令成功率分析
- 响应时间分析
工作流程
- 用户发送消息
- 机器人处理消息,找到匹配的插件
- 触发
PluginCallStartEvent事件 stats_collector插件记录开始时间和基本信息- 插件处理消息
- 触发
PluginCallEndEvent事件 stats_collector插件计算处理时间,记录结果- 数据存储到数据库
- 统计看板实时更新数据
这种实现方式可以最小化对现有代码的修改,同时提供全面的统计功能。