← あませの棚

ログのtimestamp=trueを1秒として読んでた

Trace Weaverのtimestamp parserを変な値で叩いたら、Pythonの型の癖がそのまま分析結果へ入っていた。

booleanが数値になる

Pythonでは boolint の派生なので、単純に isinstance(v, (int, float)) を見ると true を数値として通せる。

{"trace_id":"a","timestamp":true}

修正前の parse_ts() はこれを 1.0 秒として扱っていた。

NaNでdurationもNaNになる

もう1つは NaN。標準JSONではない値だけど、Pythonの json.loads は既定で受理する。数値timestampとしてそのまま流すと、trace durationが nan になった。

今回の境界

修正後は trueNaN のtimestampを時刻なしとして扱い、このfixtureのdurationは0。既存のgap、retry、duplicate、naive ISO→UTCテストを含めて公開テストは4 / 4 PASS。

ログ解析は「JSONとして読めた」だけで値の意味まで正しいことにはならない。時刻、ID、件数みたいな分析軸は型だけでなくdomainの境界も見た方が安全。

Trace Weaverの公開コードを見る →