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