Files
Aether/apps/aether-gateway/src/routing/trace.rs
T

46 lines
1.5 KiB
Rust

use aether_routing_core::{ResolvedRoutingPolicy, RoutingDecisionTrace};
pub(crate) fn build_routing_trace_seed(
policy: &ResolvedRoutingPolicy,
client_api_format: &str,
) -> RoutingDecisionTrace {
RoutingDecisionTrace {
group_id: policy.group_id.clone(),
group_version: policy.group_version,
selection_source: policy.selection_source.clone(),
selected_rules: policy
.matched_rules
.iter()
.map(|rule| rule.id.clone())
.collect(),
original_model: policy.requested_model.clone(),
resolved_model: policy.resolved_model.clone(),
client_api_format: client_api_format.to_string(),
client_request_patch_summary: routing_patch_summary(&policy.mutation_plan),
runtime_facts: aether_routing_core::RoutingRuntimeFacts {
scheduler_mode: Some(policy.scheduling_mode),
priority_mode: Some(policy.priority_mode),
..Default::default()
},
..RoutingDecisionTrace::default()
}
}
fn routing_patch_summary(
plan: &aether_routing_core::MutationPlan,
) -> aether_routing_core::RoutingPatchSummary {
aether_routing_core::RoutingPatchSummary {
body_paths: plan
.body_patch
.iter()
.map(|operation| operation.path().to_string())
.collect(),
header_names: plan
.header_patch
.iter()
.map(|operation| operation.name().to_string())
.collect(),
failed_action: None,
}
}