bronzeflow_core/manager/
mod.rs1use crate::prelude::{Executor, StorageType, Trigger};
2use crate::service::Service;
3use crate::store::Storage;
4
5use crate::task::RunnableHolder;
6use std::sync::{Arc, Mutex};
7
8pub struct ScheduleManager<SG: Storage + 'static, TG: Trigger + 'static, E: Executor + 'static> {
9 storage: StorageType<SG>,
10 trigger: Arc<Mutex<TG>>,
11 executor: Arc<Mutex<E>>,
12}
13
14impl<SG: Storage, TG: Trigger, E: Executor> ScheduleManager<SG, TG, E> {
15 pub fn new(storage: SG, trigger: TG, executor: E) -> Self {
16 ScheduleManager {
18 storage: Arc::new(Mutex::new(storage)),
19 executor: Arc::new(Mutex::new(executor)),
20 trigger: Arc::new(Mutex::new(trigger)),
21 }
22 }
23
24 pub fn add_runnable(&mut self, runnable: RunnableHolder) {
25 self.storage.lock().unwrap().save_runnable(runnable)
26 }
27
28 fn start_loader(&mut self) {
29 let storage = Arc::clone(&self.storage);
30 let trigger = Arc::clone(&self.executor);
31 self.trigger.lock().unwrap().trigger(storage, trigger);
32 }
33}
34
35impl<SG: Storage, TG: Trigger, E: Executor> Service for ScheduleManager<SG, TG, E> {
36 fn start(&mut self) {
37 self.start_loader();
38 }
39
40 fn stop(&mut self) {
41 self.trigger.lock().unwrap().stop();
42 }
43}