feat: 原始上报数据存储(raw_batch 表/脱敏/访客关联/详情页 Tab/30天清理)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-16 15:42:06 +08:00
parent 1cadee16bd
commit 21ca43248a
10 changed files with 534 additions and 6 deletions
+13
View File
@@ -51,6 +51,19 @@ def _walk_props(v, depth=0):
return True, False, True
return True, False, False
def sanitize_payload(obj):
"""原始批次快照脱敏:递归遍历 dict/list,键名命中 SENSITIVE_KEY_PATTERNS(大小写不敏感)
→ 值替换为字符串 "[FILTERED]"(结构保留,便于排查时仍看清字段形态)。
返回新对象(容器全部重建,叶值原样共享)——调用方在 ingest 之前对 payload 深拷贝后传入,
与 ingest/validate_event 的就地改写互不影响。"""
if isinstance(obj, dict):
return {k: ("[FILTERED]" if _SENSITIVE.search(str(k)) else sanitize_payload(v))
for k, v in obj.items()}
if isinstance(obj, list):
return [sanitize_payload(x) for x in obj]
return obj
def validate_event(ev) -> str | None:
"""返回 None 表示通过;否则返回拒绝原因码。类型/白名单/体积/深度全在此守门。
通过时会就地截断/清洗并写回 ev(path 先 sanitize_url 再截 MAX_PATH_LEN,title 截