mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
refactor: 移除 shadow results 相关模块和接口
This commit is contained in:
@@ -75,6 +75,83 @@ async fn admin_monitoring_trace_request_returns_local_payload() {
|
||||
assert_eq!(payload["candidates"][0]["status_code"], json!(502));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn admin_monitoring_trace_request_hides_format_conversion_disabled_candidates() {
|
||||
let mut hidden_candidate = sample_candidate(
|
||||
"cand-hidden",
|
||||
"request-1",
|
||||
0,
|
||||
RequestCandidateStatus::Skipped,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
hidden_candidate.skip_reason = Some("format_conversion_disabled".to_string());
|
||||
|
||||
let mut visible_skipped_candidate = sample_candidate(
|
||||
"cand-visible-skipped",
|
||||
"request-1",
|
||||
1,
|
||||
RequestCandidateStatus::Skipped,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
visible_skipped_candidate.skip_reason = Some("transport_unsupported".to_string());
|
||||
|
||||
let request_candidates = Arc::new(InMemoryRequestCandidateRepository::seed(vec![
|
||||
hidden_candidate,
|
||||
visible_skipped_candidate,
|
||||
sample_candidate(
|
||||
"cand-used",
|
||||
"request-1",
|
||||
2,
|
||||
RequestCandidateStatus::Failed,
|
||||
Some(101),
|
||||
Some(33),
|
||||
Some(502),
|
||||
),
|
||||
]));
|
||||
let provider_catalog = Arc::new(InMemoryProviderCatalogReadRepository::seed(
|
||||
vec![sample_provider()],
|
||||
vec![sample_endpoint()],
|
||||
vec![sample_key()],
|
||||
));
|
||||
let state = AppState::new()
|
||||
.expect("state should build")
|
||||
.with_decision_trace_data_readers_for_tests(request_candidates, provider_catalog);
|
||||
let context = request_context(
|
||||
http::Method::GET,
|
||||
"/api/admin/monitoring/trace/request-1?attempted_only=false",
|
||||
);
|
||||
|
||||
let response = local_monitoring_response(&state, &context)
|
||||
.await
|
||||
.expect("handler should not error")
|
||||
.expect("route should be handled locally");
|
||||
|
||||
assert_eq!(response.status(), http::StatusCode::OK);
|
||||
let body = to_bytes(response.into_body(), usize::MAX)
|
||||
.await
|
||||
.expect("body should read");
|
||||
let payload: serde_json::Value = serde_json::from_slice(&body).expect("json body should parse");
|
||||
|
||||
assert_eq!(payload["total_candidates"], json!(2));
|
||||
assert_eq!(
|
||||
payload["candidates"]
|
||||
.as_array()
|
||||
.expect("candidates should be an array")
|
||||
.iter()
|
||||
.map(|item| item["id"].as_str().unwrap_or_default())
|
||||
.collect::<Vec<_>>(),
|
||||
vec!["cand-visible-skipped", "cand-used"]
|
||||
);
|
||||
assert_eq!(
|
||||
payload["candidates"][0]["skip_reason"],
|
||||
json!("transport_unsupported")
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn admin_monitoring_trace_provider_stats_returns_local_payload() {
|
||||
let request_candidates = Arc::new(InMemoryRequestCandidateRepository::seed(vec![
|
||||
|
||||
@@ -8,13 +8,29 @@ use aether_admin::observability::monitoring::{
|
||||
build_admin_monitoring_trace_provider_stats_payload_response,
|
||||
build_admin_monitoring_trace_request_payload_response, parse_admin_monitoring_attempted_only,
|
||||
};
|
||||
use aether_data_contracts::repository::candidates::RequestCandidateStatus;
|
||||
use aether_data_contracts::repository::candidates::{DecisionTrace, RequestCandidateStatus};
|
||||
use axum::{
|
||||
body::Body,
|
||||
response::{IntoResponse, Response},
|
||||
};
|
||||
use tracing::debug;
|
||||
|
||||
const HIDDEN_TRACE_SKIP_REASONS: &[&str] = &["format_conversion_disabled"];
|
||||
|
||||
fn filter_admin_monitoring_trace_candidates(mut trace: DecisionTrace) -> DecisionTrace {
|
||||
trace.candidates.retain(|item| {
|
||||
let skip_reason = item
|
||||
.candidate
|
||||
.skip_reason
|
||||
.as_deref()
|
||||
.map(str::trim)
|
||||
.filter(|value| !value.is_empty());
|
||||
!skip_reason.is_some_and(|reason| HIDDEN_TRACE_SKIP_REASONS.contains(&reason))
|
||||
});
|
||||
trace.total_candidates = trace.candidates.len();
|
||||
trace
|
||||
}
|
||||
|
||||
pub(super) async fn build_admin_monitoring_trace_request_response(
|
||||
state: &AdminAppState<'_>,
|
||||
request_context: &AdminRequestContext<'_>,
|
||||
@@ -51,6 +67,7 @@ pub(super) async fn build_admin_monitoring_trace_request_response(
|
||||
attempted_only,
|
||||
));
|
||||
};
|
||||
let trace = filter_admin_monitoring_trace_candidates(trace);
|
||||
|
||||
Ok(build_admin_monitoring_trace_request_payload_response(
|
||||
&trace,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use crate::audit::{emit_admin_audit, record_shadow_result_non_blocking};
|
||||
use crate::audit::emit_admin_audit;
|
||||
use crate::constants::{
|
||||
CONTROL_ENDPOINT_SIGNATURE_HEADER, CONTROL_EXECUTION_RUNTIME_HEADER, CONTROL_REQUEST_ID_HEADER,
|
||||
CONTROL_ROUTE_CLASS_HEADER, CONTROL_ROUTE_FAMILY_HEADER, CONTROL_ROUTE_KIND_HEADER,
|
||||
@@ -165,16 +165,6 @@ pub(super) fn finalize_gateway_response(
|
||||
}
|
||||
response.extensions_mut().insert(RequestLogEmitted);
|
||||
|
||||
record_shadow_result_non_blocking(
|
||||
state.clone(),
|
||||
trace_id,
|
||||
method,
|
||||
path_and_query,
|
||||
control_decision,
|
||||
execution_path,
|
||||
&response,
|
||||
);
|
||||
|
||||
maybe_hold_axum_response_permit(response, request_permit)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user