2.8 KiB
2.8 KiB
Bug修复:前端量级显示依赖双业务数据
问题描述
在使用【网易大神实时审核数据监控系统】时发现一个 Bug:当前系统要求必须同时输入清风审核和大神 CMS 的 Cookie 才能登录。然而,当用户实际只负责其中一项业务(例如,只做清风审核,不做大神 CMS 的内容处理),并且在统计周期内(如当前小时)只有该项业务产生数据量时,系统前端的【当前小时量级】和【全天量级】等指标会一直显示"加载中",无法正常展示数据。
问题原因
通过代码分析,我们发现以下几个关键问题:
-
前端数据处理逻辑中的强依赖:
- 在
updateDashboard
和updateStats
函数中,使用了类似if (data.breeze && data.breeze.hourly)
和if (data.cms && data.cms.hourly)
的条件判断 - 这导致当某个业务系统无数据时,整个数据更新逻辑会跳过,而不是用默认值(如0)处理
- 结果是只要有一个业务系统无数据,前端就无法正确显示总量级
- 在
-
后端总量级计算逻辑中的安全性不足:
- 后端在计算总量级时没有充分处理数据为空或格式不一致的情况
- 没有使用
try-except
捕获可能的异常,如类型转换错误 - 没有考虑所有可能的数据结构情况,如某个数据源完全缺失
解决方案
我们进行了以下修改来解决这些问题:
-
优化前端数据处理逻辑:
- 修改
updateDashboard
和updateStats
函数,使用默认值处理潜在的空数据 - 使用析构与默认值模式:
const breezeHourly = data.breeze && data.breeze.hourly ? data.breeze.hourly : { total: 0, weighted_total: 0, categories: {} };
- 确保即使某个业务数据不存在,也会使用默认值(0)而不是跳过显示
- 修改
-
增强后端总量级计算的健壮性:
- 添加类型检查:
isinstance(breeze_hourly['stats'], dict)
确保数据为正确类型 - 添加空值处理:
float(breeze_hourly['stats']['weighted_total'] or 0)
确保数值可以转换 - 添加异常处理:用
try-except
包裹整个计算逻辑,确保即使计算出错也不会中断API响应
- 添加类型检查:
测试方法
修复后,以下场景均应正常工作:
- 用户同时使用清风审核和大神CMS(原先也正常)
- 用户只使用清风审核,大神CMS无数据(修复后可正常显示)
- 用户只使用大神CMS,清风审核无数据(修复后可正常显示)
- 某业务暂无量级,另一业务有量级(修复后可正常显示)
改进总结
这些更改大大提高了系统的健壮性和用户体验,特别是对于那些只负责单一业务线的审核人员。系统现在可以在各种数据场景下正确显示量级信息,无论数据源是否完整。