Files
monitor/backend/static/network_data_analysis.md
2025-12-04 16:29:05 +08:00

3.8 KiB
Raw Permalink Blame History

网络流量数据来源分析

数据来源

1. API调用

  • 函数loadMetrics()
  • 调用方式fetchMetric('network')
  • API路径${API_BASE_URL}/metrics/network
  • 参数
    • start_time: 起始时间
    • end_time: 结束时间
    • aggregation: 聚合方式默认为average
    • interval: 时间区间固定为10m

2. WebSocket实时更新

  • 函数handleMetricsUpdate(message)
  • 消息类型metrics_update
  • 数据结构
    {
      "type": "metrics_update",
      "device_id": "device_id",
      "metrics": {
        "network": {...}
      }
    }
    

数据处理流程

1. 数据格式化

  • 函数formatNetworkDataForCards(networkData)
  • 作用将API或WebSocket返回的原始网络数据格式化为状态卡片可用的格式
  • 处理逻辑
    • 初始化返回数据结构,包含发送速率、接收速率、发送总量、接收总量
    • 根据数据类型(数组或对象)进行不同处理
    • 遍历所有网卡,累加所有网卡的流量数据
    • 支持多种数据格式包括数组格式、WebSocket消息格式、按网卡分组的数据格式
    • 支持旧格式的总量数据bytes_sent_total, bytes_received_total

2. 数据更新

  • 函数_updateStatusCards(metrics)
  • 作用:更新状态卡片的显示内容
  • 网络流量卡片更新逻辑
    • 解析网络数据,获取发送速率、接收速率、发送总量、接收总量
    • 计算接收速率/发送速率的比值,根据比值显示箭头
    • 使用formatBytes函数格式化速率和总量自动处理MB和GB的转换
    • 更新DOM元素显示比值、速率和总量

显示内容

1. 大数字显示

  • 内容:接收速率/发送速率的比值
  • 逻辑
    • 如果接收速率和发送速率都为0显示无穷符号
    • 如果发送速率为0接收速率不为0显示无穷符号和↓
    • 如果接收速率为0发送速率不为0显示0和↑
    • 正常情况:计算比值,显示比值和箭头(比值>1显示↓否则显示↑

2. 速率显示

  • 格式:接收速率 MB/s | 发送速率 MB/s
  • 处理:使用formatBytes函数格式化自动处理MB/s和GB/s的转换

3. 总量显示

  • 格式:接收总量 MB | 发送总量 MB
  • 处理:使用formatBytes函数格式化自动处理MB和GB的转换

正确性验证

1. 网卡总流量

  • formatNetworkDataForCards函数会遍历所有网卡,累加所有网卡的流量数据
  • 这样显示的是所有网卡的总流量信息,符合用户需求

2. 数据类型转换

  • formatBytes函数会根据数据大小自动转换为合适的单位MB或GB
  • 速率显示带有正确的单位MB/s或GB/s
  • 总量显示带有正确的单位MB或GB

3. 边界情况处理

  • 处理了接收速率和发送速率都为0的情况
  • 处理了发送速率为0接收速率不为0的情况
  • 处理了接收速率为0发送速率不为0的情况

代码优化

1. 已完成的优化

  • 使用formatBytes函数格式化流量数据自动处理MB和GB的转换
  • 确保显示的是所有网卡的总流量信息
  • 处理了各种边界情况

2. 优化效果

  • 显示内容更准确,带有正确的单位
  • 自动适应数据大小,提高可读性
  • 处理了各种边界情况,避免显示错误

结论

网络流量卡片的数据来源是可靠的通过API调用或WebSocket实时更新获取原始数据经过formatNetworkDataForCards函数格式化处理后,显示的是所有网卡的总流量信息。使用formatBytes函数格式化后显示内容带有正确的单位并且会根据数据大小自动转换为合适的单位MB或GB提高了数据的可读性。