NetEaseDSMonitor/README.md

2.8 KiB
Raw Blame History

Bug修复前端量级显示依赖双业务数据

问题描述

在使用【网易大神实时审核数据监控系统】时发现一个 Bug当前系统要求必须同时输入清风审核和大神 CMS 的 Cookie 才能登录。然而,当用户实际只负责其中一项业务(例如,只做清风审核,不做大神 CMS 的内容处理),并且在统计周期内(如当前小时)只有该项业务产生数据量时,系统前端的【当前小时量级】和【全天量级】等指标会一直显示"加载中",无法正常展示数据。

问题原因

通过代码分析,我们发现以下几个关键问题:

  1. 前端数据处理逻辑中的强依赖

    • updateDashboardupdateStats函数中,使用了类似if (data.breeze && data.breeze.hourly)if (data.cms && data.cms.hourly)的条件判断
    • 这导致当某个业务系统无数据时整个数据更新逻辑会跳过而不是用默认值如0处理
    • 结果是只要有一个业务系统无数据,前端就无法正确显示总量级
  2. 后端总量级计算逻辑中的安全性不足

    • 后端在计算总量级时没有充分处理数据为空或格式不一致的情况
    • 没有使用try-except捕获可能的异常,如类型转换错误
    • 没有考虑所有可能的数据结构情况,如某个数据源完全缺失

解决方案

我们进行了以下修改来解决这些问题:

  1. 优化前端数据处理逻辑

    • 修改updateDashboardupdateStats函数,使用默认值处理潜在的空数据
    • 使用析构与默认值模式:const breezeHourly = data.breeze && data.breeze.hourly ? data.breeze.hourly : { total: 0, weighted_total: 0, categories: {} };
    • 确保即使某个业务数据不存在也会使用默认值0而不是跳过显示
  2. 增强后端总量级计算的健壮性

    • 添加类型检查:isinstance(breeze_hourly['stats'], dict)确保数据为正确类型
    • 添加空值处理:float(breeze_hourly['stats']['weighted_total'] or 0)确保数值可以转换
    • 添加异常处理:用try-except包裹整个计算逻辑确保即使计算出错也不会中断API响应

测试方法

修复后,以下场景均应正常工作:

  1. 用户同时使用清风审核和大神CMS原先也正常
  2. 用户只使用清风审核大神CMS无数据修复后可正常显示
  3. 用户只使用大神CMS清风审核无数据修复后可正常显示
  4. 某业务暂无量级,另一业务有量级(修复后可正常显示)

改进总结

这些更改大大提高了系统的健壮性和用户体验,特别是对于那些只负责单一业务线的审核人员。系统现在可以在各种数据场景下正确显示量级信息,无论数据源是否完整。