fix: 兼容 Sub2API 0.1.147 故障查询

This commit is contained in:
Codex
2026-07-14 12:42:05 +02:00
parent bdbbaada28
commit 0affaa4827
@@ -397,6 +397,19 @@ def items_of(data):
def total_of(data):
return int(data.get("total", len(items_of(data)))) if isinstance(data, dict) else len(items_of(data))
def all_items(token, path, params, label):
page = 1
page_size = 500
rows = []
while True:
data = get(token, path, {**params, "page": page, "page_size": page_size}, label)
batch = items_of(data)
rows.extend(batch)
total = total_of(data)
if not batch or len(rows) >= total:
return rows
page += 1
def percent(value):
if not isinstance(value, (int, float)):
return None
@@ -417,8 +430,6 @@ def filters_for(group_id=None):
result["stream"] = "true" if filters["stream"] == "stream" else "false"
if filters.get("endpoint"):
result["inbound_endpoint"] = filters["endpoint"]
if filters.get("requestId"):
result["request_id"] = filters["requestId"]
return result
def selected_groups(groups):
@@ -510,14 +521,30 @@ def execute():
for group, metrics in group_data:
group_id = group.get("id")
endpoint = "/api/v1/admin/ops/request-errors" if level == "P0" else "/api/v1/admin/ops/upstream-errors"
data = get(token, endpoint, {**filters_for(group_id), "page": page, "page_size": PAYLOAD["pageSize"], "view": "all", "include_detail": 1}, level + " details")
total += total_of(data)
request_id = PAYLOAD["filters"].get("requestId")
if request_id:
rows = [
item for item in all_items(token, endpoint, {**filters_for(group_id), "view": "all", "include_detail": 1}, level + " request lookup")
if item.get("request_id") == request_id or item.get("client_request_id") == request_id
]
total += len(rows)
rows = rows[offset:offset + PAYLOAD["pageSize"]]
else:
data = get(token, endpoint, {**filters_for(group_id), "page": page, "page_size": PAYLOAD["pageSize"], "view": "all", "include_detail": 1}, level + " details")
total += total_of(data)
rows = items_of(data)
availability = availability_by_account(token, group_id) if level == "P2" else {}
for item in items_of(data):
customer_request_ids = set()
if level == "P2":
customer_request_ids = {
item.get("request_id") or item.get("client_request_id")
for item in all_items(token, "/api/v1/admin/ops/request-errors", {**filters_for(group_id), "view": "all"}, "customer error correlation")
if item.get("request_id") or item.get("client_request_id")
}
for item in rows:
absorbed = None
if level == "P2" and item.get("request_id"):
correlated = get(token, "/api/v1/admin/ops/request-errors", {"time_range": "24h", "request_id": item.get("request_id"), "page": 1, "page_size": 1, "view": "all"}, "correlated request error")
absorbed = total_of(correlated) == 0
absorbed = item.get("request_id") not in customer_request_ids
details.append(detail_row(item, metrics, availability, level, absorbed))
detail_columns = ["GROUP", "ACCOUNT", "MODEL", "MODE", "ENDPOINT", "STATUS", "CUSTOMER_ERR%", "ABSORBED", "REQUEST_ID"] if level == "P0" else ["GROUP", "ACCOUNT", "MODEL", "MODE", "ENDPOINT", "STATUS", "ROOT", "TEMP_UNSCHED", "ABSORBED", "REQUEST_ID"]
elif level == "P1":