pub struct AgentClientV2 { /* private fields */ }Expand description
v2 agent client with connection multiplexing.
This client maintains a single bidirectional stream and multiplexes multiple requests over it using correlation IDs.
§Features
- Connection multiplexing: Multiple concurrent requests over one connection
- Cancellation support: Cancel in-flight requests
- Flow control: Backpressure handling when agent is overloaded
- Health tracking: Monitor agent health status
- Metrics collection: Receive and forward agent metrics
Implementations§
Source§impl AgentClientV2
impl AgentClientV2
Sourcepub async fn new(
agent_id: impl Into<String>,
endpoint: impl Into<String>,
timeout: Duration,
) -> Result<Self, AgentProtocolError>
pub async fn new( agent_id: impl Into<String>, endpoint: impl Into<String>, timeout: Duration, ) -> Result<Self, AgentProtocolError>
Create a new v2 client.
Sourcepub fn set_metrics_callback(&mut self, callback: MetricsCallback)
pub fn set_metrics_callback(&mut self, callback: MetricsCallback)
Set the metrics callback for receiving agent metrics reports.
This callback is invoked whenever the agent sends a metrics report through the control stream. The callback should be fast and non-blocking.
Sourcepub fn set_config_update_callback(&mut self, callback: ConfigUpdateCallback)
pub fn set_config_update_callback(&mut self, callback: ConfigUpdateCallback)
Set the config update callback for handling agent config requests.
This callback is invoked whenever the agent sends a config update request through the control stream (e.g., requesting a reload, reporting errors).
Sourcepub async fn connect(&self) -> Result<(), AgentProtocolError>
pub async fn connect(&self) -> Result<(), AgentProtocolError>
Connect and perform handshake.
Sourcepub async fn send_request_headers(
&self,
correlation_id: &str,
event: &RequestHeadersEvent,
) -> Result<AgentResponse, AgentProtocolError>
pub async fn send_request_headers( &self, correlation_id: &str, event: &RequestHeadersEvent, ) -> Result<AgentResponse, AgentProtocolError>
Send a request headers event and wait for response.
Sourcepub async fn send_request_body_chunk(
&self,
correlation_id: &str,
event: &RequestBodyChunkEvent,
) -> Result<AgentResponse, AgentProtocolError>
pub async fn send_request_body_chunk( &self, correlation_id: &str, event: &RequestBodyChunkEvent, ) -> Result<AgentResponse, AgentProtocolError>
Send a request body chunk event and wait for response.
For streaming body inspection, chunks are sent sequentially with
increasing chunk_index. The agent responds after processing each chunk.
Sourcepub async fn send_response_headers(
&self,
correlation_id: &str,
event: &ResponseHeadersEvent,
) -> Result<AgentResponse, AgentProtocolError>
pub async fn send_response_headers( &self, correlation_id: &str, event: &ResponseHeadersEvent, ) -> Result<AgentResponse, AgentProtocolError>
Send a response headers event and wait for response.
Called when upstream response headers are received, allowing the agent to inspect/modify response headers before they’re sent to the client.
Sourcepub async fn send_response_body_chunk(
&self,
correlation_id: &str,
event: &ResponseBodyChunkEvent,
) -> Result<AgentResponse, AgentProtocolError>
pub async fn send_response_body_chunk( &self, correlation_id: &str, event: &ResponseBodyChunkEvent, ) -> Result<AgentResponse, AgentProtocolError>
Send a response body chunk event and wait for response.
For streaming response body inspection, chunks are sent sequentially. The agent can inspect and optionally modify response body data.
Sourcepub async fn send_event<T: Serialize>(
&self,
event_type: EventType,
event: &T,
) -> Result<AgentResponse, AgentProtocolError>
pub async fn send_event<T: Serialize>( &self, event_type: EventType, event: &T, ) -> Result<AgentResponse, AgentProtocolError>
Send any event type and wait for response.
Sourcepub async fn ping(&self) -> Result<Duration, AgentProtocolError>
pub async fn ping(&self) -> Result<Duration, AgentProtocolError>
Send a ping and measure latency.
Sourcepub fn protocol_version(&self) -> u32
pub fn protocol_version(&self) -> u32
Get negotiated protocol version.
Sourcepub async fn capabilities(&self) -> Option<AgentCapabilities>
pub async fn capabilities(&self) -> Option<AgentCapabilities>
Get agent capabilities.
Sourcepub async fn is_connected(&self) -> bool
pub async fn is_connected(&self) -> bool
Check if client is connected.
Sourcepub async fn close(&self) -> Result<(), AgentProtocolError>
pub async fn close(&self) -> Result<(), AgentProtocolError>
Close the connection.
Sourcepub async fn cancel_request(
&self,
correlation_id: &str,
reason: CancelReason,
) -> Result<(), AgentProtocolError>
pub async fn cancel_request( &self, correlation_id: &str, reason: CancelReason, ) -> Result<(), AgentProtocolError>
Cancel an in-flight request.
Sends a cancellation message to the agent and removes the request from the pending map. The agent should stop processing and clean up resources.
Sourcepub async fn cancel_all(
&self,
reason: CancelReason,
) -> Result<usize, AgentProtocolError>
pub async fn cancel_all( &self, reason: CancelReason, ) -> Result<usize, AgentProtocolError>
Cancel all in-flight requests.
Used during shutdown or when the upstream connection fails.
Sourcepub async fn flow_state(&self) -> FlowState
pub async fn flow_state(&self) -> FlowState
Get current flow control state.
Sourcepub async fn can_accept_requests(&self) -> bool
pub async fn can_accept_requests(&self) -> bool
Check if the agent is accepting new requests.
Returns false if the agent has requested a pause or is draining.
Sourcepub async fn wait_for_flow_control(
&self,
timeout: Duration,
) -> Result<(), AgentProtocolError>
pub async fn wait_for_flow_control( &self, timeout: Duration, ) -> Result<(), AgentProtocolError>
Wait for flow control to allow new requests.
If the agent has requested a pause, this will wait until it resumes or the timeout expires.
Sourcepub async fn health_state(&self) -> i32
pub async fn health_state(&self) -> i32
Get current health state.
Returns the numeric health state:
- 1: Healthy
- 2: Degraded
- 3: Draining
- 4: Unhealthy
Sourcepub async fn is_healthy(&self) -> bool
pub async fn is_healthy(&self) -> bool
Check if the agent is healthy.
Sourcepub fn in_flight_count(&self) -> u64
pub fn in_flight_count(&self) -> u64
Get the number of in-flight requests.
Sourcepub async fn send_configure(
&self,
config: Value,
version: Option<String>,
) -> Result<(), AgentProtocolError>
pub async fn send_configure( &self, config: Value, version: Option<String>, ) -> Result<(), AgentProtocolError>
Send a configuration update to the agent.
Sourcepub async fn send_shutdown(
&self,
reason: ShutdownReason,
grace_period_ms: u64,
) -> Result<(), AgentProtocolError>
pub async fn send_shutdown( &self, reason: ShutdownReason, grace_period_ms: u64, ) -> Result<(), AgentProtocolError>
Request the agent to shut down.
Sourcepub async fn send_drain(
&self,
duration_ms: u64,
reason: DrainReason,
) -> Result<(), AgentProtocolError>
pub async fn send_drain( &self, duration_ms: u64, reason: DrainReason, ) -> Result<(), AgentProtocolError>
Request the agent to drain (stop accepting new requests).
Auto Trait Implementations§
impl !Freeze for AgentClientV2
impl !RefUnwindSafe for AgentClientV2
impl Send for AgentClientV2
impl Sync for AgentClientV2
impl Unpin for AgentClientV2
impl !UnwindSafe for AgentClientV2
Blanket Implementations§
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::Request