pub struct HotReloadAgentCardHandler { /* private fields */ }Expand description
An agent card handler that supports hot-reloading.
The current AgentCard is stored behind an Arc<RwLock<_>> so that it
can be atomically swapped while the server continues to serve requests.
This type implements AgentCardProducer, so it can be plugged directly
into a DynamicAgentCardHandler for
full HTTP caching support.
Implementations§
Source§impl HotReloadAgentCardHandler
impl HotReloadAgentCardHandler
Sourcepub fn new(card: AgentCard) -> HotReloadAgentCardHandler
pub fn new(card: AgentCard) -> HotReloadAgentCardHandler
Creates a new handler with the given initial AgentCard.
Sourcepub fn update(&self, card: AgentCard)
pub fn update(&self, card: AgentCard)
Replaces the current agent card with card.
All subsequent requests will see the new card immediately.
§Panics
Panics if the internal RwLock is poisoned.
Sourcepub fn reload_from_file(&self, path: &Path) -> Result<(), ServerError>
pub fn reload_from_file(&self, path: &Path) -> Result<(), ServerError>
Reloads the agent card from a JSON file at path.
The file is read synchronously (agent card files are expected to be small). On success the internal card is replaced atomically.
§Errors
Returns ServerError::Internal if the file cannot be read or parsed.
Sourcepub fn reload_from_json(&self, json: &str) -> Result<(), ServerError>
pub fn reload_from_json(&self, json: &str) -> Result<(), ServerError>
Reloads the agent card from a JSON string.
On success the internal card is replaced atomically.
§Errors
Returns ServerError::Serialization if json is not valid agent card JSON.
Sourcepub fn spawn_poll_watcher(
&self,
path: &Path,
interval: Duration,
) -> JoinHandle<()>
pub fn spawn_poll_watcher( &self, path: &Path, interval: Duration, ) -> JoinHandle<()>
Spawns a background task that periodically checks whether the file at
path has been modified and reloads the agent card when it has.
The watcher compares the file’s modification time on each tick and only re-reads the file when the timestamp changes. This is cross-platform and requires no OS-specific file notification APIs.
Returns a tokio::task::JoinHandle that can be used to abort the
watcher (via JoinHandle::abort).
Sourcepub fn spawn_signal_watcher(&self, path: &Path) -> JoinHandle<()>
pub fn spawn_signal_watcher(&self, path: &Path) -> JoinHandle<()>
Spawns a background task that reloads the agent card from path
whenever the process receives SIGHUP.
This is the traditional Unix mechanism for configuration reload and integrates well with process managers (systemd, supervisord, etc.).
Returns a tokio::task::JoinHandle that can be used to abort the
watcher (via JoinHandle::abort).
§Panics
Panics if the tokio signal handler cannot be registered (e.g. if the
runtime was built without the signal feature).
Trait Implementations§
Source§impl Clone for HotReloadAgentCardHandler
impl Clone for HotReloadAgentCardHandler
Source§fn clone(&self) -> HotReloadAgentCardHandler
fn clone(&self) -> HotReloadAgentCardHandler
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for HotReloadAgentCardHandler
impl RefUnwindSafe for HotReloadAgentCardHandler
impl Send for HotReloadAgentCardHandler
impl Sync for HotReloadAgentCardHandler
impl Unpin for HotReloadAgentCardHandler
impl UnsafeUnpin for HotReloadAgentCardHandler
impl UnwindSafe for HotReloadAgentCardHandler
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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::Request