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