feat(access-logs): 日志明细支持按状态码筛选并折叠次要搜索项,修复首页来源分布无数据

- 修复 PostgreSQL/SQLite 日志库下首页「来源分布」卡片无数据:RegionCounts 对空
  节点 ID 误拼 node_id = '' 恒空条件,改为空节点 ID 表示全节点聚合(对齐 CH 语义),
  并过滤空白归属地
- /access-logs?tab=list 新增状态码筛选:状态码下拉含常用 2xx/3xx/4xx/5xx 选项,
  校验 100-599,非法值返回 400;ClickHouse 与 PostgreSQL/SQLite 日志库均支持
- 搜索框折叠:默认仅显示来源 IP 与状态码,节点 ID/访问域名/请求路径折叠进
  「更多筛选」
This commit is contained in:
ryan
2026-08-13 09:59:32 +08:00
parent f1577bf092
commit 75d1fcf345
18 changed files with 322 additions and 75 deletions
+4
View File
@@ -18,7 +18,11 @@ sidebar: false
## [Unreleased]
### 新增
- 访问日志「日志明细」支持按 HTTP 状态码筛选:状态码下拉含常用 2xx/3xx/4xx/5xx 快捷选项,筛选条件贯穿 ClickHouse 与 PostgreSQL/SQLite 日志库。
### 🛠 修复
- 修复首页「来源分布」卡片在 PostgreSQL/SQLite 日志库下无数据:聚合查询对空节点 ID 误拼 `node_id = ''` 恒空条件,现改为空节点 ID 表示全节点聚合(与 ClickHouse 语义一致),并同步过滤空白归属地。
- 修复源站错误页「仅针对 GET 请求」未真正透传非 GET 响应:`proxy_intercept_errors` 会在 Lua 判断前丢弃源站错误响应体,POST/PUT 等请求收到 503 时被 OpenResty 自带错误页覆盖原始报错数据;现改为在代理层用 Lua 过滤器(`header_filter`/`body_filter`)仅对 GET 请求替换错误页,非 GET 请求完整透传源站原始状态码与响应体;非仅 GET 模式继续使用命名 location(`@__openflare_origin_error`)承载错误页,保留原始请求方法与错误状态码。
- 修复 PostgreSQL 作为日志库时节点访问日志/可观测指标/用户访问日志批量写入失败:GORM 对零值 `uint64` 主键会省略 `id` 列,而 PG 日志表 `id` 无默认值,导致持续报「null value in column id violates not-null constraint」;现于落库前为零 ID 行生成雪花 ID(与 ClickHouse 写入路径一致),并新增回归测试覆盖六张日志表。
+7 -1
View File
@@ -4809,7 +4809,7 @@ const docTemplate = `{
"SessionCookie": []
}
],
"description": "分页返回 OpenFlare 访问日志,支持按节点、IP、主机与路径筛选,需要管理员权限",
"description": "分页返回 OpenFlare 访问日志,支持按节点、IP、主机、路径与状态码筛选,需要管理员权限",
"produces": [
"application/json"
],
@@ -4842,6 +4842,12 @@ const docTemplate = `{
"name": "path",
"in": "query"
},
{
"type": "integer",
"description": "HTTP 状态码(100-599)",
"name": "status_code",
"in": "query"
},
{
"type": "integer",
"description": "页码",
+7 -1
View File
@@ -4802,7 +4802,7 @@
"SessionCookie": []
}
],
"description": "分页返回 OpenFlare 访问日志,支持按节点、IP、主机与路径筛选,需要管理员权限",
"description": "分页返回 OpenFlare 访问日志,支持按节点、IP、主机、路径与状态码筛选,需要管理员权限",
"produces": [
"application/json"
],
@@ -4835,6 +4835,12 @@
"name": "path",
"in": "query"
},
{
"type": "integer",
"description": "HTTP 状态码(100-599)",
"name": "status_code",
"in": "query"
},
{
"type": "integer",
"description": "页码",
+5 -1
View File
@@ -7194,7 +7194,7 @@ paths:
- config
/api/v1/d/access-logs:
get:
description: 分页返回 OpenFlare 访问日志,支持按节点、IP、主机与路径筛选,需要管理员权限
description: 分页返回 OpenFlare 访问日志,支持按节点、IP、主机、路径与状态码筛选,需要管理员权限
parameters:
- description: 节点 ID
in: query
@@ -7212,6 +7212,10 @@ paths:
in: query
name: path
type: string
- description: HTTP 状态码(100-599)
in: query
name: status_code
type: integer
- description: 页码
in: query
name: p