a69b7d777d
Reviewed-on: #212
30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
"""trace_id 签发(全后端唯一签发口径, 2026-07 起替代裸 uuid4)。
|
|
|
|
格式: "YYYYMMDD_HHMMSS_" + 12 位小写 hex 随机, 共 28 字符, 如
|
|
20260731_162254_a1b2c3d4e5f6
|
|
|
|
Why 带时间前缀: pricebot 落盘目录名/trace_url 尾段**直接用 trace_id 本身**
|
|
(见 pricebot app/utils/trace_ids.py), id/目录/URL 三者合一——此前 uuid trace_id
|
|
与 {首帧时刻}_{uuid[:16]} 目录名是两套标识, URL 只有 pricebot 能拼、按前缀反查
|
|
还有同秒歧义。时间用北京时间(CN_TZ)——不依赖各机器 TZ 配置, 与业务时区一致。
|
|
|
|
唯一性: 秒级前缀 + 48bit 随机(hex12), 同一秒内碰撞概率可忽略(比价/领券发起 QPS
|
|
远低于产生生日碰撞的量级); pricebot 侧同秒多 trace 靠随机段区分(目录精确匹配、
|
|
llm jsonl 按尾 12 分文件, 不做前缀模糊匹配)。
|
|
|
|
兼容: 三个签发点(compare/start、coupon/session started、compare.py _forward mint)
|
|
统一走这里; 客户端自带 trace_id(老客户端/重试幂等)仍原样沿用——pricebot 对老
|
|
uuid 格式保持既有目录/短标识行为, 两代 id 并行不冲突。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
from app.core.rewards import CN_TZ
|
|
|
|
|
|
def new_trace_id() -> str:
|
|
"""签发一个自描述 trace_id: 北京时间前缀 + 12 位 hex 随机。"""
|
|
return f"{datetime.now(CN_TZ):%Y%m%d_%H%M%S}_{uuid.uuid4().hex[:12]}"
|