pub struct Supervisor;Expand description
Supervisor runtime entry point.
Implementations§
Source§impl Supervisor
impl Supervisor
Sourcepub async fn start(
spec: SupervisorSpec,
) -> Result<SupervisorHandle, SupervisorError>
pub async fn start( spec: SupervisorSpec, ) -> Result<SupervisorHandle, SupervisorError>
Starts a supervisor runtime from an owned specification value.
§Arguments
spec: Supervisor specification owned by the caller.
§Returns
Returns a SupervisorHandle connected to the runtime control loop.
Examples found in repository?
15async fn main() -> ExampleResult {
16 // Load centralized YAML configuration.
17 let state = load_config_state("examples/config/supervisor.yaml")?;
18 // Derive the supervisor specification from configuration.
19 let spec = state.to_supervisor_spec()?;
20 // Start the supervisor runtime from the specification.
21 let handle = Supervisor::start(spec).await?;
22 // Query the current runtime state.
23 let current = handle.current_state().await?;
24 // Print the current state for the learner.
25 println!("{current:#?}");
26 // Use the runtime handle for the shutdown request.
27 handle
28 // Request tree shutdown with audit metadata.
29 .shutdown_tree("operator", "quickstart complete")
30 // Wait for the shutdown command result.
31 .await?;
32 // Finish the example successfully.
33 Ok(())
34 // End the quickstart example.
35}More examples
15async fn main() -> ExampleResult {
16 // Load centralized YAML configuration.
17 let state = load_config_state("examples/config/supervisor.yaml")?;
18 // Derive the supervisor specification from configuration.
19 let spec = state.to_supervisor_spec()?;
20 // Start the supervisor runtime from the specification.
21 let handle = Supervisor::start(spec).await?;
22 // Subscribe to runtime event text.
23 let mut events = handle.subscribe_events();
24 // Query the current runtime state.
25 let current = handle.current_state().await?;
26 // Print the current state for the learner.
27 println!("current={current:#?}");
28 // Read one emitted runtime event when it is available.
29 let received = events.recv().await;
30 // Continue only when an event was received.
31 if let Ok(event) = received {
32 // Print the observed runtime event.
33 println!("event={event:#?}");
34 // Finish the optional event display.
35 }
36 // Use the runtime handle for the shutdown request.
37 handle
38 // Request tree shutdown with audit metadata.
39 .shutdown_tree("operator", "observability probe complete")
40 // Wait for the shutdown command result.
41 .await?;
42 // Finish the example successfully.
43 Ok(())
44 // End the observability example.
45}17async fn main() -> ExampleResult {
18 // Load centralized YAML configuration.
19 let state = load_config_state("examples/config/supervisor.yaml")?;
20 // Derive the supervisor specification from configuration.
21 let spec = state.to_supervisor_spec()?;
22 // Start the supervisor runtime from the specification.
23 let handle = Supervisor::start(spec).await?;
24 // Build the visible shutdown phase list.
25 let phases = [
26 // Show the stop request phase.
27 ShutdownPhase::RequestStop,
28 // Show the graceful drain phase.
29 ShutdownPhase::GracefulDrain,
30 // Show the abort stragglers phase.
31 ShutdownPhase::AbortStragglers,
32 // Show the final reconcile phase.
33 ShutdownPhase::Reconcile,
34 // Finish the shutdown phase list.
35 ];
36 // Iterate over the visible shutdown phases.
37 for phase in phases {
38 // Print each planned phase.
39 println!("planned phase={phase:#?}");
40 // Finish the phase display loop.
41 }
42 // Use the runtime handle for the shutdown request.
43 handle
44 // Request tree shutdown with audit metadata.
45 .shutdown_tree("operator", "shutdown tree example")
46 // Wait for the shutdown command result.
47 .await?;
48 // Finish the example successfully.
49 Ok(())
50 // End the shutdown example.
51}19async fn main() -> ExampleResult {
20 // Load centralized YAML configuration.
21 let state = load_config_state("examples/config/supervisor.yaml")?;
22 // Derive the supervisor specification from configuration.
23 let spec = state.to_supervisor_spec()?;
24 // Start the supervisor runtime from the specification.
25 let handle = Supervisor::start(spec).await?;
26 // Subscribe to runtime event text.
27 let mut events = handle.subscribe_events();
28 // Build the child identifier used by operator commands.
29 let child_id = ChildId::new("market_feed");
30
31 // Send an add child command through the control handle.
32 let add = handle
33 // Add a manifest under the root supervisor.
34 .add_child(
35 // Target the root supervisor.
36 SupervisorPath::root(),
37 // Provide the child manifest text.
38 "id=market_feed kind=AsyncWorker readiness=Explicit",
39 // Provide the requesting actor.
40 "operator",
41 // Provide the audit reason.
42 "attach market feed during incident rehearsal",
43 // Finish the add child arguments.
44 )
45 // Wait for the add child command result.
46 .await?;
47 // Print the add child result.
48 print_result("add_child", add);
49
50 // Print the pause child result.
51 print_result(
52 // Label the pause result.
53 "pause_child",
54 // Send the pause child command.
55 handle
56 // Pause automatic governance.
57 .pause_child(child_id.clone(), "operator", "stop automatic restart")
58 // Wait for the pause result.
59 .await?,
60 // Finish the pause result print call.
61 );
62 // Print the resume child result.
63 print_result(
64 // Label the resume result.
65 "resume_child",
66 // Send the resume child command.
67 handle
68 // Resume lifecycle governance.
69 .resume_child(child_id.clone(), "operator", "resume lifecycle governance")
70 // Wait for the resume result.
71 .await?,
72 // Finish the resume result print call.
73 );
74 // Print the quarantine child result.
75 print_result(
76 // Label the quarantine result.
77 "quarantine_child",
78 // Send the quarantine child command.
79 handle
80 // Quarantine the child for manual investigation.
81 .quarantine_child(child_id, "operator", "manual investigation")
82 // Wait for the quarantine result.
83 .await?,
84 // Finish the quarantine result print call.
85 );
86 // Print the current state result.
87 print_result("current_state", handle.current_state().await?);
88
89 // Drain already available runtime events.
90 while let Ok(event) = events.try_recv() {
91 // Print one runtime event.
92 println!("event={event}");
93 // Finish the event drain loop.
94 }
95
96 // Print the shutdown result.
97 print_result(
98 // Label the shutdown result.
99 "shutdown_tree",
100 // Send the shutdown command.
101 handle
102 // Request tree shutdown.
103 .shutdown_tree("operator", "runtime control story complete")
104 // Wait for the shutdown result.
105 .await?,
106 // Finish the shutdown result print call.
107 );
108
109 // Finish the example successfully.
110 Ok(())
111 // End the runtime control example.
112}Sourcepub async fn start_from_config_state(
state: ConfigState,
) -> Result<SupervisorHandle, SupervisorError>
pub async fn start_from_config_state( state: ConfigState, ) -> Result<SupervisorHandle, SupervisorError>
Starts a supervisor runtime from validated configuration state.
§Arguments
state: Validated configuration state owned by the caller.
§Returns
Returns a SupervisorHandle only after configuration has produced a
valid supervisor specification.
Examples found in repository?
27pub(crate) async fn run_demo(
28 // Continue the demo expression.
29 config_path: PathBuf,
30 // Continue the demo expression.
31) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
32 // Load the full demo configuration.
33 let state = load_config_state(&config_path)?;
34 // Start the demo-owned dashboard IPC and registration runtime.
35 let demo_runtime = start_demo_dashboard_runtime(&state)?;
36 // Build a pure supervisor runtime configuration.
37 let supervisor_state = supervisor_runtime_state(state);
38 // Start the library supervisor without core demo state intrusion.
39 let handle = Supervisor::start_from_config_state(supervisor_state).await?;
40 // Query current state once to prove the runtime is live.
41 let current = handle.current_state().await?;
42 // Print the runtime state for operator inspection.
43 println!("{current:#?}");
44 // Print the demo startup summary.
45 print_startup_summary(&config_path, demo_runtime.as_ref());
46 // Wait until the operator stops the demo process.
47 tokio::signal::ctrl_c().await?;
48 // Shut down the supervisor tree before dropping resources.
49 shutdown_demo(&handle).await?;
50 // Drop the supervisor handle explicitly.
51 drop(handle);
52 // Drop the demo runtime explicitly so the IPC socket is cleaned up.
53 drop(demo_runtime);
54 // Finish the demo successfully.
55 Ok(())
56 // End demo runner.
57}Sourcepub async fn start_from_config_file(
path: impl AsRef<Path>,
) -> Result<SupervisorHandle, SupervisorError>
pub async fn start_from_config_file( path: impl AsRef<Path>, ) -> Result<SupervisorHandle, SupervisorError>
Starts a supervisor runtime from a YAML configuration file.
§Arguments
path: Path to the YAML configuration file.
§Returns
Returns a SupervisorHandle only after the configuration file has
loaded and validated successfully.
Sourcepub async fn start_with_policy(
spec: SupervisorSpec,
shutdown_policy: ShutdownPolicy,
) -> Result<SupervisorHandle, SupervisorError>
pub async fn start_with_policy( spec: SupervisorSpec, shutdown_policy: ShutdownPolicy, ) -> Result<SupervisorHandle, SupervisorError>
Starts a supervisor runtime with an explicit shutdown policy.
§Arguments
spec: Supervisor specification owned by the caller.shutdown_policy: Policy used by the control loop.
§Returns
Returns a SupervisorHandle connected to the runtime control loop.
Trait Implementations§
Source§impl Clone for Supervisor
impl Clone for Supervisor
Source§fn clone(&self) -> Supervisor
fn clone(&self) -> Supervisor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Supervisor
impl Debug for Supervisor
Source§impl Default for Supervisor
impl Default for Supervisor
Source§fn default() -> Supervisor
fn default() -> Supervisor
impl Copy for Supervisor
Auto Trait Implementations§
impl Freeze for Supervisor
impl RefUnwindSafe for Supervisor
impl Send for Supervisor
impl Sync for Supervisor
impl Unpin for Supervisor
impl UnsafeUnpin for Supervisor
impl UnwindSafe for Supervisor
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> 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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);