pub struct AgentManager { /* private fields */ }Expand description
Agent manager handling all external agents.
Supports both v1 and v2 protocol agents. V1 agents use simple request/response, while v2 agents support bidirectional streaming with capabilities, health reporting, metrics export, and flow control.
Implementations§
Source§impl AgentManager
impl AgentManager
Sourcepub async fn new(agents: Vec<AgentConfig>) -> SentinelResult<Self>
pub async fn new(agents: Vec<AgentConfig>) -> SentinelResult<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.
Supports both v1 and v2 protocol agents based on the protocol_version field.
Sourcepub async fn process_request_headers(
&self,
ctx: &AgentCallContext,
headers: &HashMap<String, Vec<String>>,
route_agents: &[(String, FailureMode)],
) -> SentinelResult<AgentDecision>
pub async fn process_request_headers( &self, ctx: &AgentCallContext, headers: &HashMap<String, Vec<String>>, route_agents: &[(String, FailureMode)], ) -> SentinelResult<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],
) -> SentinelResult<AgentDecision>
pub async fn process_request_body( &self, ctx: &AgentCallContext, data: &[u8], is_last: bool, route_agents: &[String], ) -> SentinelResult<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],
) -> SentinelResult<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], ) -> SentinelResult<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],
) -> SentinelResult<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], ) -> SentinelResult<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],
) -> SentinelResult<AgentDecision>
pub async fn process_response_headers( &self, ctx: &AgentCallContext, status: u16, headers: &HashMap<String, Vec<String>>, route_agents: &[String], ) -> SentinelResult<AgentDecision>
Process response headers through agents.
Sourcepub async fn process_websocket_frame(
&self,
route_id: &str,
event: WebSocketFrameEvent,
) -> SentinelResult<AgentResponse>
pub async fn process_websocket_frame( &self, route_id: &str, event: WebSocketFrameEvent, ) -> SentinelResult<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 initialize(&self) -> SentinelResult<()>
pub async fn initialize(&self) -> SentinelResult<()>
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 v2 agents.
Returns a vector of (agent_id, MetricsCollector) pairs for all v2 agents. 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 v2 agent pools.
Returns the combined prometheus-formatted metrics from all v2 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 a v2 agent’s metrics collector by ID.
Returns None if the agent doesn’t exist or is not a v2 agent.
Auto Trait Implementations§
impl Freeze for AgentManager
impl !RefUnwindSafe for AgentManager
impl Send for AgentManager
impl Sync for AgentManager
impl Unpin 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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§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