pub struct AgentManager { /* private fields */ }Expand description
Agent manager handling all external agents.
All agents use the v2 protocol with bidirectional streaming, capabilities, health reporting, metrics export, and flow control.
Implementations§
Source§impl AgentManager
impl AgentManager
Sourcepub async fn new(agents: Vec<AgentConfig>) -> GrapsusResult<Self>
pub async fn new(agents: Vec<AgentConfig>) -> GrapsusResult<Self>
Create new agent manager.
Each agent gets its own semaphore for queue isolation, preventing a slow
agent from affecting other agents (noisy neighbor problem). The concurrency
limit is configured per-agent via max_concurrent_calls in the agent config.
Sourcepub async fn any_agent_handles_event(
&self,
route_agents: &[String],
event_type: EventType,
) -> bool
pub async fn any_agent_handles_event( &self, route_agents: &[String], event_type: EventType, ) -> bool
Check if any of the given route agents handle a specific event type.
Sourcepub async fn process_request_headers(
&self,
ctx: &AgentCallContext,
headers: HashMap<String, Vec<String>>,
route_agents: &[(String, FailureMode)],
) -> GrapsusResult<AgentDecision>
pub async fn process_request_headers( &self, ctx: &AgentCallContext, headers: HashMap<String, Vec<String>>, route_agents: &[(String, FailureMode)], ) -> GrapsusResult<AgentDecision>
Process request headers through agents.
§Arguments
ctx- Agent call context with correlation ID and metadataheaders- Request headers to send to agentsroute_agents- List of (agent_id, failure_mode) tuples from filter chain
Sourcepub async fn process_request_body(
&self,
ctx: &AgentCallContext,
data: &[u8],
is_last: bool,
route_agents: &[String],
) -> GrapsusResult<AgentDecision>
pub async fn process_request_body( &self, ctx: &AgentCallContext, data: &[u8], is_last: bool, route_agents: &[String], ) -> GrapsusResult<AgentDecision>
Process request body chunk through agents.
Sourcepub async fn process_request_body_streaming(
&self,
ctx: &AgentCallContext,
data: &[u8],
is_last: bool,
chunk_index: u32,
bytes_received: usize,
total_size: Option<usize>,
route_agents: &[String],
) -> GrapsusResult<AgentDecision>
pub async fn process_request_body_streaming( &self, ctx: &AgentCallContext, data: &[u8], is_last: bool, chunk_index: u32, bytes_received: usize, total_size: Option<usize>, route_agents: &[String], ) -> GrapsusResult<AgentDecision>
Process a single request body chunk through agents (streaming mode).
Unlike process_request_body which is used for buffered mode, this method
is designed for streaming where chunks are sent individually as they arrive.
Sourcepub async fn process_response_body_streaming(
&self,
ctx: &AgentCallContext,
data: &[u8],
is_last: bool,
chunk_index: u32,
bytes_sent: usize,
total_size: Option<usize>,
route_agents: &[String],
) -> GrapsusResult<AgentDecision>
pub async fn process_response_body_streaming( &self, ctx: &AgentCallContext, data: &[u8], is_last: bool, chunk_index: u32, bytes_sent: usize, total_size: Option<usize>, route_agents: &[String], ) -> GrapsusResult<AgentDecision>
Process a single response body chunk through agents (streaming mode).
Sourcepub async fn process_response_headers(
&self,
ctx: &AgentCallContext,
status: u16,
headers: &HashMap<String, Vec<String>>,
route_agents: &[String],
) -> GrapsusResult<AgentDecision>
pub async fn process_response_headers( &self, ctx: &AgentCallContext, status: u16, headers: &HashMap<String, Vec<String>>, route_agents: &[String], ) -> GrapsusResult<AgentDecision>
Process response headers through agents.
Sourcepub async fn process_websocket_frame(
&self,
route_id: &str,
event: WebSocketFrameEvent,
) -> GrapsusResult<AgentResponse>
pub async fn process_websocket_frame( &self, route_id: &str, event: WebSocketFrameEvent, ) -> GrapsusResult<AgentResponse>
Process a WebSocket frame through agents.
This is used for WebSocket frame inspection after an upgrade. Returns the agent response directly to allow the caller to access the websocket_decision field.
Sourcepub async fn call_guardrail_agent(
&self,
agent_name: &str,
event: GuardrailInspectEvent,
) -> GrapsusResult<AgentResponse>
pub async fn call_guardrail_agent( &self, agent_name: &str, event: GuardrailInspectEvent, ) -> GrapsusResult<AgentResponse>
Call a named agent with a guardrail inspect event.
Looks up the agent by name, checks circuit breaker and timeout, then sends the event and returns the response.
Sourcepub async fn initialize(&self) -> GrapsusResult<()>
pub async fn initialize(&self) -> GrapsusResult<()>
Initialize agent connections.
Sourcepub fn metrics(&self) -> &AgentMetrics
pub fn metrics(&self) -> &AgentMetrics
Get agent metrics.
Sourcepub fn get_agents_for_event(&self, event_type: EventType) -> Vec<String>
pub fn get_agents_for_event(&self, event_type: EventType) -> Vec<String>
Get agent IDs that handle a specific event type.
This is useful for pre-filtering agents before making calls, e.g., to check if any agents handle WebSocket frames.
Sourcepub async fn get_v2_pool_metrics(&self) -> Vec<(String, Arc<MetricsCollector>)>
pub async fn get_v2_pool_metrics(&self) -> Vec<(String, Arc<MetricsCollector>)>
Get pool metrics collectors from all agents.
Returns a vector of (agent_id, MetricsCollector) pairs. These can be registered with the MetricsManager to include agent pool metrics in the /metrics endpoint output.
Sourcepub async fn export_v2_pool_metrics(&self) -> String
pub async fn export_v2_pool_metrics(&self) -> String
Export prometheus metrics from all agent pools.
Returns the combined prometheus-formatted metrics from all agent pools.
Sourcepub async fn get_v2_metrics_collector(
&self,
agent_id: &str,
) -> Option<Arc<MetricsCollector>>
pub async fn get_v2_metrics_collector( &self, agent_id: &str, ) -> Option<Arc<MetricsCollector>>
Get an agent’s metrics collector by ID.
Returns None if the agent doesn’t exist.
Auto Trait Implementations§
impl Freeze for AgentManager
impl !RefUnwindSafe for AgentManager
impl Send for AgentManager
impl Sync for AgentManager
impl Unpin for AgentManager
impl UnsafeUnpin for AgentManager
impl !UnwindSafe for AgentManager
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more