docs: Task11 增加共享 daily_counts 实现约束(Task8 审查结论)
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1143,7 +1143,7 @@ def test_overview_shape(db, client, django_user_model):
|
||||
assert r.json()["data"]["sources"][0]["source"] == "google.com"
|
||||
assert r.json()["data"]["top_pages"][0]["path"] == "/pricing"
|
||||
```
|
||||
- [ ] **Step 2: 实现**:`today` 用事件/会话表实时聚合(当天 Asia/Shanghai 边界);`trend` 取 DailyStat 近 30 天(缺日补零;今天用实时值覆盖最后一位);`sources` = 当天 VisitSession group by `referrer_domain`(空→"直接访问")top8;`top_pages` = 当天 page_view group by path top8;`active_now` = `Visitor.last_seen_at > now-5min` 计数(**不要用** `Event.received_at`——无索引会全表扫;last_seen_at 每批刷新且已有索引,语义等价)。认证 + 成员权限。**所有聚合排除 `is_bot=True`(爬虫不进 Dashboard)。**
|
||||
- [ ] **Step 2: 实现**:`today` 用事件/会话表实时聚合(当天 Asia/Shanghai 边界);`trend` 取 DailyStat 近 30 天(缺日补零;今天用实时值覆盖最后一位);`sources` = 当天 VisitSession group by `referrer_domain`(空→"直接访问")top8;`top_pages` = 当天 page_view group by path top8;`active_now` = `Visitor.last_seen_at > now-5min` 计数(**不要用** `Event.received_at`——无索引会全表扫;last_seen_at 每批刷新且已有索引,语义等价)。认证 + 成员权限。**所有聚合排除 `is_bot=True`(爬虫不进 Dashboard)**。**实现约束(Task 8 审查结论):pv/uv/sessions/new_visitors 提取为 stats.py 共享 `daily_counts(site, date)`,refresh_daily 与 dashboard today 共用,防两处口径漂移(Task 8 的 new_visitors 爬虫口径问题正是反例)。**
|
||||
- [ ] **Step 3: 测试通过,Commit** `feat: 总览聚合接口`
|
||||
|
||||
### Task 12: 访客列表/详情/时间线/会话 API
|
||||
|
||||
Reference in New Issue
Block a user