Replies: 1 comment 1 reply
-
Results of ai analysis 这些日志显示 后端 API 正常工作,没有错误:
后端日志分析
✅ Authorization successful
✅ Fetching error alerts from DB → Fetched error alerts from DB
✅ Request finished: GET /alerts/event/error 200 in 0.01s
所有请求都是 200 成功状态,数据库查询也正常完成。
---
问题确认
问题不在后端数据获取,而在前端数据处理。
前端 JavaScript 报错发生在这里:
// alerts-rules-builder.tsx:300-305
✅ Fetching error alerts from DB → Fetched error alerts from DB
✅ Request finished: GET /alerts/event/error 200 in 0.01s
所有请求都是 200 成功状态,数据库查询也正常完成。
---
问题确认
问题不在后端数据获取,而在前端数据处理。
前端 JavaScript 报错发生在这里:
// alerts-rules-builder.tsx:300-305
后端日志分析
✅ Authorization successful
✅ Fetching error alerts from DB → Fetched error alerts from DB
✅ Request finished: GET /alerts/event/error 200 in 0.01s
所有请求都是 200 成功状态,数据库查询也正常完成。
---
问题确认
问题不在后端数据获取,而在前端数据处理。
前端 JavaScript 报错发生在这里:
// alerts-rules-builder.tsx:300-305
getAllColumns()
.filter(({ getIsPinned }) => getIsPinned() === false)
.map(({ id, columnDef }) => ({ // 💥 解构时出错
name: id,
label: columnDef.header as string,
...
}))
当某个 column 对象的 columnDef 属性不存在时,解构 { id, columnDef } 会导致后续访问 columnDef.header 报错。
---
修复方案
需要我帮你修复前端代码吗?修改 alerts-rules-builder.tsx 添加安全检查:
.map((column) => ({
name: column.id,
label: column.columnDef?.header
? (typeof column.columnDef.header === 'function'
? column.id
: column.columnDef.header)
: column.id,
operators: getOperators(column.id),
}))
|
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
version info
error logs
Front end log
Backend log
{"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,365", "message": "Authorization successful", "levelname": "DEBUG", "name": "keep.identitymanager.authverifierbase", "filename": "authverifierbase.py", "otelTraceID": "f99ef3bfb12078f4ea17fa456fd5ea56", "otelSpanID": "8d42477900cfce88", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "AnyIO worker thread", "process": 798, "module": "authverifierbase", "taskName": null} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,365", "message": "Fetching error alerts from DB", "levelname": "INFO", "name": "keep.api.routes.alerts", "filename": "alerts.py", "otelTraceID": "f99ef3bfb12078f4ea17fa456fd5ea56", "otelSpanID": "8d42477900cfce88", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "AnyIO worker thread", "process": 798, "module": "alerts", "taskName": null, "tenant_id": "keep"} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,369", "message": "Fetched error alerts from DB", "levelname": "INFO", "name": "keep.api.routes.alerts", "filename": "alerts.py", "otelTraceID": "f99ef3bfb12078f4ea17fa456fd5ea56", "otelSpanID": "8d42477900cfce88", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "AnyIO worker thread", "process": 798, "module": "alerts", "taskName": null, "tenant_id": "keep"} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,373", "message": "Parsing body as json", "levelname": "DEBUG", "name": "keep.api.core.dependencies", "filename": "dependencies.py", "otelTraceID": "6966fa216bfa40c6a80302467f09035d", "otelSpanID": "ba5ce84a3037798e", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "MainThread", "process": 798, "module": "dependencies", "taskName": "starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro"} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,374", "message": "Request finished: GET /alerts/event/error 200 in 0.01s", "levelname": "INFO", "name": "keep.api.middlewares", "filename": "middlewares.py", "otelTraceID": "f99ef3bfb12078f4ea17fa456fd5ea56", "otelSpanID": "8d42477900cfce88", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "MainThread", "process": 798, "module": "middlewares", "taskName": "starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro", "tenant_id": null, "status_code": 200} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,375", "message": "Failed to parse body as json, returning raw body", "levelname": "DEBUG", "name": "keep.api.core.dependencies", "filename": "dependencies.py", "otelTraceID": "6966fa216bfa40c6a80302467f09035d", "otelSpanID": "ba5ce84a3037798e", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "MainThread", "process": 798, "module": "dependencies", "taskName": "starlette.middleware.base.BaseHTTPMiddleware.__call__.<locals>.call_next.<locals>.coro"} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,376", "message": "Starting authentication process", "levelname": "DEBUG", "name": "keep.identitymanager.authverifierbase", "filename": "authverifierbase.py", "otelTraceID": "6966fa216bfa40c6a80302467f09035d", "otelSpanID": "ba5ce84a3037798e", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "AnyIO worker thread", "process": 798, "module": "authverifierbase", "taskName": null} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,377", "message": "Attempting authentication", "levelname": "DEBUG", "name": "keep.identitymanager.authverifierbase", "filename": "authverifierbase.py", "otelTraceID": "6966fa216bfa40c6a80302467f09035d", "otelSpanID": "ba5ce84a3037798e", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "AnyIO worker thread", "process": 798, "module": "authverifierbase", "taskName": null} {"worker_type": "uvicorn", "asctime": "2026-06-23 17:15:25,377", "message": "Attempting to authenticate with bearer token", "levelname": "DEBUG", "name": "keep.identitymanager.authverifierbase", "filename": "authverifierbase.py", "otelTraceID": "6966fa216bfa40c6a80302467f09035d", "otelSpanID": "ba5ce84a3037798e", "otelTraceSampled": true, "otelServiceName": "keep-api", "threadName": "AnyIO worker thread", "process": 798, "module": "authverifierbase", "taskName": null}Beta Was this translation helpful? Give feedback.
All reactions