feat: wire scheduler into GatewayState startup and message processing
This commit is contained in:
parent
3a94b9718f
commit
205b814933
@ -11,12 +11,15 @@ use crate::channels::base::{Channel, ChannelError};
|
||||
use crate::config::{Config, expand_path, ensure_workspace_dir};
|
||||
use crate::logging;
|
||||
use crate::session::SessionManager;
|
||||
use crate::scheduler::Scheduler;
|
||||
use crate::scheduler::store as scheduler_store;
|
||||
|
||||
pub struct GatewayState {
|
||||
pub config: Config,
|
||||
pub workspace_dir: std::path::PathBuf,
|
||||
pub session_manager: Arc<SessionManager>,
|
||||
pub channel_manager: ChannelManager,
|
||||
pub pool: sqlx::SqlitePool,
|
||||
}
|
||||
|
||||
impl GatewayState {
|
||||
@ -53,6 +56,8 @@ impl GatewayState {
|
||||
);
|
||||
tracing::info!("Session storage: {}", db_path.display());
|
||||
|
||||
let pool = storage.pool().clone();
|
||||
|
||||
// Create MessageBus first (shared by SessionManager and ChannelManager)
|
||||
let bus = MessageBus::new(100);
|
||||
|
||||
@ -75,11 +80,21 @@ impl GatewayState {
|
||||
let available_channels = channel_manager.list_channel_names().await;
|
||||
session_manager.register_outbound_tool(available_channels);
|
||||
|
||||
// Initialize scheduler if enabled in config
|
||||
let scheduler_config = config.gateway.scheduler.clone().unwrap_or_default();
|
||||
if scheduler_config.enabled {
|
||||
scheduler_store::SchedulerStore::init(&pool)
|
||||
.await
|
||||
.map_err(|e| format!("failed to initialize scheduler store: {}", e))?;
|
||||
tracing::info!("Scheduler store initialized");
|
||||
}
|
||||
|
||||
Ok(Self {
|
||||
config,
|
||||
workspace_dir: workspace_path,
|
||||
session_manager: session_manager.clone(),
|
||||
channel_manager,
|
||||
pool,
|
||||
})
|
||||
}
|
||||
|
||||
@ -168,6 +183,20 @@ impl GatewayState {
|
||||
tracing::info!("Outbound dispatcher started");
|
||||
dispatcher.run().await;
|
||||
});
|
||||
|
||||
// Spawn scheduler background task if enabled
|
||||
let scheduler_config = self.config.gateway.scheduler.clone().unwrap_or_default();
|
||||
if scheduler_config.enabled {
|
||||
let sched = Arc::new(Scheduler::new(
|
||||
self.pool.clone(),
|
||||
self.session_manager.clone(),
|
||||
scheduler_config,
|
||||
));
|
||||
tokio::spawn(async move {
|
||||
sched.run().await;
|
||||
});
|
||||
tracing::info!("Scheduler background task spawned");
|
||||
}
|
||||
}
|
||||
|
||||
/// Handle control messages (session management operations)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user