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.

245 lines
5.3 KiB

1 month ago
# 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连接状态监控
## 数据结构说明
### 统计数据格式
```json
{
"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. 启动统计监控
1. 访问 `/Statistics/Index` 页面
2. 点击"启动SSE"按钮开始实时监控
3. 统计数据会自动更新显示
### 2. 查看小区详情
1. 在统计表格中点击"查看小区"按钮
2. 系统会显示该客户端的所有小区详细信息
### 3. 测试功能
1. 访问 `/Home/StatisticsTest` 页面
2. 使用各种测试按钮验证功能
### 4. API测试
可以使用Postman或其他工具测试API接口:
```bash
# 获取统计摘要
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`中可以调整:
```csharp
private readonly int _maxQueueSize = 1000; // 最大队列大小
```
### 2. 历史记录大小
在`StatisticsService`中可以调整:
```csharp
private readonly int _maxHistorySize = 100; // 每个客户端最多保存100条历史记录
```
### 3. SSE推送间隔
在`StatisticsController`中可以调整:
```csharp
await Task.Delay(1000); // 每秒推送一次
```
## 扩展功能
### 1. 数据持久化
可以添加数据库存储功能,将统计数据保存到数据库。
### 2. 图表显示
可以集成Chart.js等图表库,显示统计数据的趋势图。
### 3. 告警功能
可以添加阈值告警功能,当某些指标超过阈值时发送通知。
### 4. 数据导出
可以添加数据导出功能,支持CSV、Excel等格式。
## 注意事项
1. **性能考虑**: 大量数据时注意内存使用
2. **网络带宽**: SSE推送会占用一定带宽
3. **浏览器兼容性**: 确保浏览器支持SSE
4. **数据准确性**: 统计数据可能有延迟,注意时间同步
## 故障排除
### 1. SSE连接失败
- 检查浏览器是否支持SSE
- 检查网络连接
- 查看服务器日志
### 2. 数据不更新
- 检查WebSocket连接状态
- 确认客户端正在发送统计数据
- 查看浏览器控制台错误
### 3. 内存使用过高
- 调整队列大小限制
- 检查是否有内存泄漏
- 重启应用程序
## 更新日志
- **v1.0**: 初始版本,实现基本统计功能
- 支持多客户端数据管理
- 实现SSE实时推送
- 添加完整的API接口