浅念
|
5e024b814b
|
fix(server): v2入口加固——page_id孤代理/NaN区间值拒绝,共享ISO解析
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 11:53:02 +08:00 |
|
浅念
|
8459e6fa13
|
feat(server): ingest v2事件级归属+session_resume+stay区间并集重算+响应明细契约
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-18 11:14:06 +08:00 |
|
浅念
|
35f7b55946
|
fix: 趋势改实时聚合+DailyStat自愈回写,摆脱cron依赖
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 14:17:08 +08:00 |
|
浅念
|
8f20d8d9a2
|
feat(admin): 数据总览按客迹视觉V1重做(周期卡/趋势双线/渠道条形/最近访问)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-17 12:18:37 +08:00 |
|
浅念
|
22d89a3f42
|
feat: 移动端设备信息最大化采集(型号/UA-CH/视口/方向/触点/内存/网络/深浅色)
SDK:buildEnvContext 同步扩展 12 键(dpr/viewport/orientation/maxTouchPoints/
deviceMemory/languages/colorScheme/standalone/network downlink·rtt·saveData/
微信版本),逐键 try/catch 静默缺则不挂;新增 collectHighEntropyHints(UA-CH
model/platformVersion/architecture/bitness),init 后 Promise.race 2s 超时
异步并入 __ctk_ctx——批次 context flush 时读取,不阻塞首屏。
后端:Visitor 加 device_model/env_extra(迁移 0005);ingest 首批快照
EXTENDED_ENV_KEYS 白名单(值截 100),非首批不覆盖、唯 device_model 空且
本批有值时补填一次(晚到 hints);列表/详情 API 随行输出。
前端:详情访问环境卡设备行升级显示型号(手机 · Pixel 7),追加像素比/
视口/屏幕方向/触点/内存/网络质量/深浅色/微信版本行(env_extra 逐键判空,
旧数据整块不显示);列表设备列主行拼型号(手机·Pixel 7)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 19:12:20 +08:00 |
|
浅念
|
50faa73cf9
|
feat(admin): 访客详情页按客迹视觉V1重设计(头部卡/统计卡/时间线/来源证据三口径/访问环境)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 18:19:31 +08:00 |
|
浅念
|
008d9277d8
|
feat: 来源组合显示——徽章/识别卡拼装落地页·国家·语言(搜索意图线索)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 17:43:37 +08:00 |
|
浅念
|
59de51c062
|
feat: 来源归因规则引擎(渠道/AI/搜索词/诚实状态/历史重算)
- constants 规则库 v1:AI/引擎/社交域名表、搜索词参数白名单、付费点击参数、
应用内 UA 标记、CHANNELS 枚举;page_view 白名单开 nav_type/prerendering
- services/attribution.classify 纯函数:付费>AI>引擎>社交>referral 分层,
UTM 证据叠加(combined/conflict/label_only),应用内 UA 叠加/兜底,
引擎 TLD 国家 variant,搜索词白名单提取(Google 恒空不虚构)
- SourceClassification 派生表(迁移 0004):first_touch/session_entry 双 scope,
rule_version 可追溯
- ingest 增量 best-effort:首访客/新会话时分类落库(savepoint+静默,
失败不影响采集);validation 对 page_view referrer 完整 URL 参数清洗+截500
- recompute_attribution 命令:全量/按站幂等重算
- API:访客列表归因五字段+channel 筛选、详情 attribution 块(含最近5会话入口)、
dashboard channels 聚合(sources 原口径保留);TS VisitorListParams 加 channel
- 测试 97 → 124(引擎20 + 集成/接口7)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 17:03:15 +08:00 |
|
浅念
|
21ca43248a
|
feat: 原始上报数据存储(raw_batch 表/脱敏/访客关联/详情页 Tab/30天清理)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 15:42:06 +08:00 |
|
浅念
|
58659b0ec9
|
feat: 访客列表站点归属显示与筛选
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-16 14:33:39 +08:00 |
|
浅念
|
5b3297337e
|
fix: 总览筛选竞态守卫 + 时间戳统一上海时间序列化
- dashboard loadOverview 加请求令牌:快速切换站点时丢弃过期响应,
防旧数据覆盖与旧 finally 提前清 loading
- 后端序列化统一 timezone.localtime:sites.created_at 与 visitors 的
first/last_seen_at、会话 started/ended_at、时间线事件 time——
USE_TZ 下 isoformat() 是 UTC,与上海自然日口径同屏矛盾(差 8 小时)
- 站点弹窗域名加轻量主机名正则校验与实时提示(拦含空格等垃圾输入)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 18:57:41 +08:00 |
|
浅念
|
fa90835ffa
|
fix: 访客API 微收口(duration_ms 移除/truncated 标记/锁定测试/source 收敛)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 15:38:58 +08:00 |
|
浅念
|
9a2cd76e99
|
feat: 访客列表/详情/时间线/会话接口
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 15:20:06 +08:00 |
|
浅念
|
0b93814261
|
chore: dashboard 确定性排序与注释修正
- sources/top_pages Top8 加平局次序键(referrer_domain/path),
平局时跨请求顺序稳定
- test_dashboard 修正过时注释(b 站数据同为 refresh_daily 真实落行)
pytest 79 passed 无回归。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 15:06:21 +08:00 |
|
浅念
|
a0f7bdb87e
|
feat: 总览聚合接口
GET /api/admin/dashboard/overview?site=<site_id>(site 可选,缺省聚合全部站点):
- today:daily_counts 实时四指标(与 refresh_daily 共享口径)+ active_now
(Visitor.last_seen_at 5 分钟窗口,走 site,-last_seen_at 索引)
- trend:DailyStat 近 30 天 values(date).annotate(Sum) 跨站点求和,
缺日补零,今天一位用实时值覆盖(聚合作业未跑也不缺当日)
- sources/top_pages:当天上海自然日窗口 Top8,空来源归"直接访问"
- ?site= 不存在 → 404 信封 site_not_found;未认证 401(默认权限)
测试 4 个(认证/数值与形态/DailyStat 历史/站点过滤与 404),全套 79 passed。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 14:53:01 +08:00 |
|
浅念
|
eb27bc830b
|
fix: sites 标量 domains 防御/_to_bool/403 锁定/注释
- _norm_domains 入口类型守卫:domains 传数字曾 500、字符串曾逐字符
迭代成单字符域名静默落库,统一走 invalid_domains 400
- bool() 强转换 _to_bool:"false" 字符串曾是 True,对 allow_no_origin
这类放宽开关方向不利,改按字面解析(其余未知值仍 False)
- 补 member DELETE 不存在 pk → 403(先于 404)锁定测试
- SiteDetailView 注释删去 GET 字样(无 detail GET,前端走列表+Dialog)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 14:43:26 +08:00 |
|
浅念
|
16207ae309
|
feat: 站点管理接口
GET/POST /api/admin/sites、PATCH /api/admin/sites/<pk> 登录成员可用;
DELETE 仅 admin,走软删(is_active=False),物理清除留待未来管理命令
分批删(防大站级联删除锁表),CASCADE 仅完整性兜底。域名归一去协议/
端口/路径、小写、去空去重;错误响应统一信封(EnvelopeMixin)。
软删后 collect 上报 403 not_allowed(Task7 联动,测试锁定)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 14:29:18 +08:00 |
|
浅念
|
f22786d746
|
refactor: 提取共享信封模块 EnvelopeMixin/ok
auth.py 的 _EnvelopeMixin/_ok 提取到 tracker/api/envelope.py(去下划线前缀),
auth.py 改为 import 使用;collect.py 的 finalize_response 含 ACAO 回显逻辑
保留在自身视图,仅注释指向未来收敛。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 14:25:14 +08:00 |
|
浅念
|
7ff1536fbf
|
fix: auth 畸形body防御/字段校验信封/用户名校验/429 测试
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 14:18:37 +08:00 |
|
浅念
|
754ae1d39d
|
feat: JWT 登录与用户接口
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 14:01:59 +08:00 |
|
浅念
|
678d215b31
|
fix: 采集接口 origin urlsplit/finalize_response 信封/CL 防御
审查三项必修:
1. Origin host 提取改 urlsplit(封堵 https://evil.com/?x=https://www.a.com
类查询串绕过);"null" Origin 视为无 host 走 allow_no_origin;
Referer 回显死逻辑一并清理,ACAO 只回显真正的 Origin 头。
2. finalize_response 统一钩子:429/ParseError 等 DRF 异常响应补 ACAO +
{code,data,message} 信封(浏览器 SDK 需读错误体,误判网络错误重试会
打爆限流器);删 post/_deny/options 三处临时加头代码。
3. Content-Length isdecimal 防御("abc" → 400 非 500;isdigit 放过 "²"
而 int("²") 仍崩,isdecimal 与 int() 可解析集精确对齐)。
锁定测试 ×4:429 信封+ACAO / 坏 JSON 信封+ACAO / 查询串绕过 403 / 畸形 CL 400。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 13:24:31 +08:00 |
|
浅念
|
cf04db794b
|
feat: 采集接口(域名白名单/限流/textplain解析/幂等)
POST /api/collect/batch:text/plain JSON 解析(ParseError 400 防 500)、
域名白名单/站点停用/未知站点统一 403 not_allowed 防枚举、
Anon 限流(collect scope,get_rate 读实时 api_settings 修 import 固化)、
occurred_at ISO 归一(naive 补 UTC)、XFF 末段取 IP + ::ffff: 归一、
成功/拒绝分支均回显 ACAO 供 SDK 读响应。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-15 13:07:56 +08:00 |
|