Skip to main content

Supervisor

Struct Supervisor 

Source
pub struct Supervisor { /* private fields */ }
Expand description

The central supervisor.

Manages the lifecycle of all TradingService implementations using TaskTracker for structured concurrency and CancellationToken for graceful shutdown propagation.

§Memory safety

Unlike JoinSet, TaskTracker does not accumulate task return values. Completed task memory is reclaimed immediately, making this safe for long-running processes that may restart services hundreds of times over weeks of operation.

§Example

let supervisor = Supervisor::new(SupervisorConfig::default());
supervisor.spawn_service(Box::new(MyService));
supervisor.run_until_shutdown().await?;

Implementations§

Source§

impl Supervisor

Source

pub fn new(config: SupervisorConfig) -> Supervisor

Create a new supervisor with the given configuration.

Source

pub fn with_defaults() -> Supervisor

Create a new supervisor with default configuration.

Source

pub fn cancel_token(&self) -> &CancellationToken

Get a reference to the supervisor’s cancellation token.

Useful for external code that needs to observe or trigger shutdown.

Source

pub fn metrics(&self) -> &Arc<SupervisorMetrics>

Get a reference to the supervisor’s metrics.

Source

pub async fn lifecycle_snapshots(&self) -> Vec<ServiceLifecycleSnapshot>

Snapshot all service lifecycles.

Source

pub async fn service_lifecycle( &self, name: &str, ) -> Option<ServiceLifecycleSnapshot>

Lifecycle snapshot for a specific service by name.

Source

pub async fn service_count(&self) -> usize

Number of services currently tracked (alive + terminated).

Source

pub fn trigger_shutdown(&self)

Trigger a graceful shutdown of all managed services.

Source

pub fn is_shutting_down(&self) -> bool

Returns true if the supervisor’s shutdown has been triggered.

Source

pub fn spawn_service(&self, service: Box<dyn TradingService>)

Spawn a service with default options.

Source

pub fn spawn_service_with_options( &self, service: Box<dyn TradingService>, options: SpawnOptions, )

Spawn a service with custom per-service options.

Source

pub async fn wait_for_drain(&self)

Close the tracker and wait for all tasks to complete, with timeout.

Call after triggering shutdown (or after run_until_shutdown returns) to ensure all tasks have drained.

Source

pub async fn run_until_shutdown(&self) -> Result<(), Error>

Run the supervisor until a shutdown signal is received.

If install_signal_handler is true (the default), listens for Ctrl-C / SIGTERM and triggers shutdown. Returns after all services have drained (or the shutdown timeout has elapsed).

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, 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<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