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

7.0 KiB
Raw Blame History

插件使用统计功能设计思路

为了实现对用户触发的指令进行统计,我需要设计一个完整的数据收集和分析系统。以下是我的思路整理:

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. 统计看板实时更新数据

这种实现方式可以最小化对现有代码的修改,同时提供全面的统计功能。