Skip to main content

mecha10_cli/services/process/
mod.rs

1#![allow(dead_code)]
2
3//! Process service for managing child processes
4//!
5//! Provides process lifecycle management for CLI commands, particularly for the `dev` and
6//! `run` commands that need to manage multiple node processes. Thin wrapper around
7//! mecha10-runtime's ProcessManager.
8
9mod build;
10mod control;
11mod resolve;
12mod spawn;
13mod spawn_node;
14
15use mecha10_runtime::ProcessManager;
16
17pub struct ProcessService {
18    manager: ProcessManager,
19}
20
21impl ProcessService {
22    /// Create a new process service
23    pub fn new() -> Self {
24        Self {
25            manager: ProcessManager::new(),
26        }
27    }
28
29    /// Track dependency relationship for a node. `dependencies` is the list of nodes `node`
30    /// depends on.
31    pub fn track_dependency(&mut self, node: &str, dependencies: Vec<String>) {
32        for dep in dependencies {
33            self.manager.add_dependency(node.to_string(), dep);
34        }
35    }
36
37    /// Get shutdown order (reverse dependency order): nodes with dependents first, then their
38    /// dependencies, so we never stop a node while others still depend on it.
39    pub fn get_shutdown_order(&self) -> Vec<String> {
40        self.manager.shutdown_order()
41    }
42
43    /// Get the number of tracked processes
44    pub fn count(&self) -> usize {
45        self.manager.len()
46    }
47
48    /// Check if any processes are being tracked
49    pub fn is_empty(&self) -> bool {
50        self.manager.is_empty()
51    }
52
53    /// Get access to the underlying ProcessManager, for advanced operations.
54    pub fn manager(&mut self) -> &mut ProcessManager {
55        &mut self.manager
56    }
57}
58
59impl Default for ProcessService {
60    fn default() -> Self {
61        Self::new()
62    }
63}
64
65impl Drop for ProcessService {
66    fn drop(&mut self) {}
67}