Mountain/Binary/Initialize/
RuntimeBuild.rs1#![allow(unused_imports)]
2
3use std::sync::Arc;
26
27use Echo::Scheduler::{Scheduler::Scheduler, SchedulerBuilder::SchedulerBuilder};
28
29use crate::dev_log;
30
31#[derive(Debug)]
35pub struct SchedulerConfig {
36 worker_count:Option<usize>,
37 enable_metrics:bool,
38 log_level:log::Level,
39}
40
41impl Default for SchedulerConfig {
42 fn default() -> Self {
43 Self {
45 worker_count:None, #[cfg(feature = "Telemetry")]
47 enable_metrics:true,
48 #[cfg(not(feature = "Telemetry"))]
49 enable_metrics:false,
50 #[cfg(feature = "Debug")]
51 log_level:log::Level::Debug,
52 #[cfg(feature = "Development")]
53 log_level:log::Level::Info,
54 #[cfg(not(any(feature = "Debug", feature = "Development")))]
55 log_level:log::Level::Warn,
56 }
57 }
58}
59
60pub fn CreateBuilder(config:SchedulerConfig) -> SchedulerBuilder {
62 let mut builder = SchedulerBuilder::Create();
63
64 if let Some(count) = config.worker_count {
65 let count = count.clamp(1, 256);
67 builder = builder.WithWorkerCount(count);
68 dev_log!("lifecycle", "[RuntimeBuild] Configuring {} worker threads", count);
69 }
70
71 builder
72}
73
74pub fn Build() -> Arc<Scheduler> { BuildWithConfig(SchedulerConfig::default()) }
94
95pub fn BuildWithConfig(config:SchedulerConfig) -> Arc<Scheduler> {
105 dev_log!("lifecycle", "[RuntimeBuild] Initializing scheduler with config: {:?}", config);
106
107 let builder = CreateBuilder(config);
108 let scheduler = builder.Build();
109
110 #[cfg(feature = "Telemetry")]
111 {
112 dev_log!("lifecycle", "[RuntimeBuild] Task metrics enabled");
114 }
115
116 #[cfg(feature = "Debug")]
117 {
118 dev_log!("lifecycle", "[RuntimeBuild] Scheduler debugging enabled");
119 }
120
121 dev_log!("lifecycle", "[RuntimeBuild] Scheduler initialized successfully");
122 Arc::new(scheduler)
123}
124
125#[cfg(feature = "Debug")]
130pub fn BuildDebug() -> Arc<Scheduler> {
131 dev_log!("lifecycle", "[RuntimeBuild] Creating debug scheduler (single-threaded)");
132 BuildWithConfig(SchedulerConfig { worker_count:Some(1), ..Default::default() })
133}
134
135#[cfg(test)]
136mod tests {
137 use super::*;
138
139 #[test]
140 fn test_default_build() {
141 let _scheduler = Build();
142 dev_log!("lifecycle", "[Test] Default scheduler created");
144 }
145
146 #[test]
147 fn test_custom_worker_count() {
148 let config = SchedulerConfig { worker_count:Some(2), ..Default::default() };
149 let _scheduler = BuildWithConfig(config);
150 dev_log!("lifecycle", "[Test] Custom scheduler created");
151 }
152}