You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.3 KiB
5.3 KiB
LTE统计数据监控系统实现
概述
本系统实现了对LTE客户端统计数据的完整监控功能,包括数据队列管理、实时显示和SSE推送。
功能特性
1. 数据结构模型
- StatisticsData: 主要统计数据模型
- CellInfo: 小区信息模型
- CpuInfo: CPU信息模型
- RfPortInfo: RF端口信息模型
- CountersInfo: 计数器信息模型
2. 数据队列管理
- StatisticsQueueManager: 线程安全的统计数据队列
- 支持最大队列大小限制(默认1000条)
- 自动维护队列大小,防止内存溢出
3. 统计服务
- StatisticsService: 核心统计服务
- 处理WebSocket接收的统计数据
- 管理客户端历史记录
- 提供SSE格式数据推送
4. WebSocket集成
- 在WebSocketManagerService中集成统计服务
- 自动处理
OnStatsReceived
事件 - 支持多客户端统计数据管理
5. API接口
- StatisticsController: 提供完整的REST API
- 支持获取所有统计数据
- 支持获取指定客户端数据
- 支持清空统计数据
- 支持SSE实时推送
6. 前端界面
- 响应式统计数据显示页面
- 实时数据更新
- 小区详细信息查看
- SSE连接状态监控
数据结构说明
统计数据格式
{
"message": "stats",
"instance_id": "685f9485",
"cpu": {
"global": 328.32038445519004
},
"cells": {
"1": {
"dl_bitrate": 0,
"ul_bitrate": 0,
"dl_use_avg": 0.003762019146681548,
"ul_use_avg": 0.08999999798834324,
"ue_count_avg": 0,
"erab_count_avg": 0,
"counters": {
"messages": {},
"errors": {}
}
}
},
"rf_ports": {
"0": {
"rxtx_delay": {}
}
},
"counters": {
"messages": {
"s1_setup_request": 2,
"ng_setup_request": 2
},
"errors": {}
},
"duration": 1.04,
"message_id": 33,
"time": 146.155
}
API接口说明
1. 获取所有统计数据
GET /Statistics/GetAllStats
2. 获取最新统计数据
GET /Statistics/GetLatestStats
3. 获取指定客户端统计数据
GET /Statistics/GetClientStats?clientName={clientName}
4. 获取客户端历史数据
GET /Statistics/GetClientStatsHistory?clientName={clientName}
5. 获取所有客户端最新数据
GET /Statistics/GetAllClientStats
6. 清空统计数据
POST /Statistics/ClearStats
7. 获取统计摘要
GET /Statistics/GetSummary
8. SSE实时推送
GET /Statistics/SSEStats
9. 指定客户端SSE推送
GET /Statistics/SSEClientStats?clientName={clientName}
使用说明
1. 启动统计监控
- 访问
/Statistics/Index
页面 - 点击"启动SSE"按钮开始实时监控
- 统计数据会自动更新显示
2. 查看小区详情
- 在统计表格中点击"查看小区"按钮
- 系统会显示该客户端的所有小区详细信息
3. 测试功能
- 访问
/Home/StatisticsTest
页面 - 使用各种测试按钮验证功能
4. API测试
可以使用Postman或其他工具测试API接口:
# 获取统计摘要
curl http://localhost:15001/Statistics/GetSummary
# 获取所有统计数据
curl http://localhost:15001/Statistics/GetAllStats
# 清空统计数据
curl -X POST http://localhost:15001/Statistics/ClearStats
技术实现
1. 线程安全
- 使用
ConcurrentDictionary
和ConcurrentQueue
- 所有数据操作都是线程安全的
2. 内存管理
- 自动限制队列大小
- 定期清理历史数据
- 防止内存泄漏
3. 实时推送
- 使用Server-Sent Events (SSE)
- 支持多客户端同时连接
- 自动重连机制
4. 错误处理
- 完整的异常捕获和日志记录
- 优雅的错误恢复机制
配置说明
1. 队列大小配置
在StatisticsQueueManager
中可以调整:
private readonly int _maxQueueSize = 1000; // 最大队列大小
2. 历史记录大小
在StatisticsService
中可以调整:
private readonly int _maxHistorySize = 100; // 每个客户端最多保存100条历史记录
3. SSE推送间隔
在StatisticsController
中可以调整:
await Task.Delay(1000); // 每秒推送一次
扩展功能
1. 数据持久化
可以添加数据库存储功能,将统计数据保存到数据库。
2. 图表显示
可以集成Chart.js等图表库,显示统计数据的趋势图。
3. 告警功能
可以添加阈值告警功能,当某些指标超过阈值时发送通知。
4. 数据导出
可以添加数据导出功能,支持CSV、Excel等格式。
注意事项
- 性能考虑: 大量数据时注意内存使用
- 网络带宽: SSE推送会占用一定带宽
- 浏览器兼容性: 确保浏览器支持SSE
- 数据准确性: 统计数据可能有延迟,注意时间同步
故障排除
1. SSE连接失败
- 检查浏览器是否支持SSE
- 检查网络连接
- 查看服务器日志
2. 数据不更新
- 检查WebSocket连接状态
- 确认客户端正在发送统计数据
- 查看浏览器控制台错误
3. 内存使用过高
- 调整队列大小限制
- 检查是否有内存泄漏
- 重启应用程序
更新日志
- v1.0: 初始版本,实现基本统计功能
- 支持多客户端数据管理
- 实现SSE实时推送
- 添加完整的API接口