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
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接口
|