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

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. 启动统计监控

  1. 访问 /Statistics/Index 页面
  2. 点击"启动SSE"按钮开始实时监控
  3. 统计数据会自动更新显示

2. 查看小区详情

  1. 在统计表格中点击"查看小区"按钮
  2. 系统会显示该客户端的所有小区详细信息

3. 测试功能

  1. 访问 /Home/StatisticsTest 页面
  2. 使用各种测试按钮验证功能

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. 线程安全

  • 使用ConcurrentDictionaryConcurrentQueue
  • 所有数据操作都是线程安全的

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等格式。

注意事项

  1. 性能考虑: 大量数据时注意内存使用
  2. 网络带宽: SSE推送会占用一定带宽
  3. 浏览器兼容性: 确保浏览器支持SSE
  4. 数据准确性: 统计数据可能有延迟,注意时间同步

故障排除

1. SSE连接失败

  • 检查浏览器是否支持SSE
  • 检查网络连接
  • 查看服务器日志

2. 数据不更新

  • 检查WebSocket连接状态
  • 确认客户端正在发送统计数据
  • 查看浏览器控制台错误

3. 内存使用过高

  • 调整队列大小限制
  • 检查是否有内存泄漏
  • 重启应用程序

更新日志

  • v1.0: 初始版本,实现基本统计功能
  • 支持多客户端数据管理
  • 实现SSE实时推送
  • 添加完整的API接口