mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-11 11:49:50 +08:00
feat(usage): enrich audit metadata and detail views
This commit is contained in:
@@ -30,6 +30,25 @@ struct ResolvedAdminMonitoringTrace {
|
||||
usage: Option<StoredRequestUsageAudit>,
|
||||
}
|
||||
|
||||
async fn hydrate_admin_monitoring_trace_response_body(
|
||||
state: &AdminAppState<'_>,
|
||||
mut usage: StoredRequestUsageAudit,
|
||||
) -> Result<StoredRequestUsageAudit, GatewayError> {
|
||||
let is_error_node = !usage.status.eq_ignore_ascii_case("completed")
|
||||
|| usage
|
||||
.status_code
|
||||
.is_some_and(|status| !(200..300).contains(&status));
|
||||
let response_body_ref = if is_error_node && usage.response_body.is_none() {
|
||||
usage.response_body_ref.clone()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
if let Some(body_ref) = response_body_ref.as_deref() {
|
||||
usage.response_body = state.resolve_request_usage_body_ref(body_ref).await?;
|
||||
}
|
||||
Ok(usage)
|
||||
}
|
||||
|
||||
pub(super) async fn build_admin_monitoring_trace_request_response(
|
||||
state: &AdminAppState<'_>,
|
||||
request_context: &AdminRequestContext<'_>,
|
||||
@@ -92,6 +111,10 @@ async fn resolve_admin_monitoring_trace(
|
||||
.read_request_usage_audit_shallow(request_id)
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))?;
|
||||
let usage = match usage {
|
||||
Some(usage) => Some(hydrate_admin_monitoring_trace_response_body(state, usage).await?),
|
||||
None => None,
|
||||
};
|
||||
return Ok(Some(ResolvedAdminMonitoringTrace { trace, usage }));
|
||||
}
|
||||
|
||||
@@ -102,9 +125,10 @@ async fn resolve_admin_monitoring_trace(
|
||||
.await
|
||||
.map_err(|err| GatewayError::Internal(err.to_string()))?
|
||||
{
|
||||
usage_candidates.push(usage);
|
||||
usage_candidates.push(hydrate_admin_monitoring_trace_response_body(state, usage).await?);
|
||||
}
|
||||
if let Some(usage) = state.find_request_usage_by_id(request_id).await? {
|
||||
let usage = hydrate_admin_monitoring_trace_response_body(state, usage).await?;
|
||||
if !usage_candidates.iter().any(|item| item.id == usage.id) {
|
||||
usage_candidates.push(usage);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user