Skip to main content

JanusSupervisor

Struct JanusSupervisor 

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

The central supervisor for the Janus system.

Manages the lifecycle of all JanusService 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.

Implementations§

Source§

impl JanusSupervisor

Source

pub fn new(config: SupervisorConfig) -> Self

Create a new supervisor with the given configuration.

Source

pub fn with_defaults() -> Self

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>

Get a snapshot of all service lifecycles.

Source

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

Get the 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.

This cancels the root cancellation token, which propagates to all child tokens held by running services. The supervisor’s run_until_shutdown (or wait_for_drain) will then wait for tasks to complete up to the configured timeout.

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

Spawn a service into the supervisor with default options.

The service will be wrapped in a restart loop governed by its RestartPolicy and the supervisor’s default BackoffConfig.

Source

pub fn spawn_service_with_options( &self, service: Box<dyn JanusService>, 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 this after triggering shutdown (or after run_until_shutdown returns) to ensure all tasks have drained.

Source

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

Run the supervisor until a shutdown signal is received.

If install_signal_handler is true in the config (the default), this will listen for Ctrl+C / SIGTERM and trigger 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> 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<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