AgentClientV2

Struct AgentClientV2 

Source
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

Source

pub async fn new( agent_id: impl Into<String>, endpoint: impl Into<String>, timeout: Duration, ) -> Result<Self, AgentProtocolError>

Create a new v2 client.

Source

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.

Source

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).

Source

pub async fn connect(&self) -> Result<(), AgentProtocolError>

Connect and perform handshake.

Source

pub async fn send_request_headers( &self, correlation_id: &str, event: &RequestHeadersEvent, ) -> Result<AgentResponse, AgentProtocolError>

Send a request headers event and wait for response.

Source

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.

Source

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.

Source

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.

Source

pub async fn send_event<T: Serialize>( &self, event_type: EventType, event: &T, ) -> Result<AgentResponse, AgentProtocolError>

Send any event type and wait for response.

Source

pub async fn ping(&self) -> Result<Duration, AgentProtocolError>

Send a ping and measure latency.

Source

pub fn protocol_version(&self) -> u32

Get negotiated protocol version.

Source

pub async fn capabilities(&self) -> Option<AgentCapabilities>

Get agent capabilities.

Source

pub async fn is_connected(&self) -> bool

Check if client is connected.

Source

pub async fn close(&self) -> Result<(), AgentProtocolError>

Close the connection.

Source

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.

Source

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.

Source

pub async fn flow_state(&self) -> FlowState

Get current flow control state.

Source

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.

Source

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.

Source

pub async fn health_state(&self) -> i32

Get current health state.

Returns the numeric health state:

  • 1: Healthy
  • 2: Degraded
  • 3: Draining
  • 4: Unhealthy
Source

pub async fn is_healthy(&self) -> bool

Check if the agent is healthy.

Source

pub fn in_flight_count(&self) -> u64

Get the number of in-flight requests.

Source

pub async fn send_configure( &self, config: Value, version: Option<String>, ) -> Result<(), AgentProtocolError>

Send a configuration update to the agent.

Source

pub async fn send_shutdown( &self, reason: ShutdownReason, grace_period_ms: u64, ) -> Result<(), AgentProtocolError>

Request the agent to shut down.

Source

pub async fn send_drain( &self, duration_ms: u64, reason: DrainReason, ) -> Result<(), AgentProtocolError>

Request the agent to drain (stop accepting new requests).

Source

pub fn agent_id(&self) -> &str

Get agent identifier.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more