1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#![deny(warnings)]
#![deny(missing_docs)]
mod app;
mod error;
mod mode;
mod scheduler;
mod schema;
mod task;
mod task_list;
use crate::error::SchedulerError;
use kubos_service::{Config, Logger, Service};
use log::{error, info};
use scheduler::{Scheduler, DEFAULT_SCHEDULES_DIR};
use schema::{MutationRoot, QueryRoot};
fn main() -> Result<(), SchedulerError> {
Logger::init("kubos-scheduler-service").unwrap();
let config = Config::new("scheduler-service").map_err(|err| {
error!("Failed to load service config: {:?}", err);
SchedulerError::StartError {
err: format!("Failed to load service config: {}", err),
}
})?;
let scheduler_dir = if let Some(s_dir) = config.get("schedules_dir") {
String::from(s_dir.as_str().ok_or_else(|| SchedulerError::StartError {
err: "Error parsing scheduler dir path".to_owned(),
})?)
} else {
String::from(DEFAULT_SCHEDULES_DIR)
};
let apps_service_config =
Config::new("app-service").map_err(|err| SchedulerError::StartError {
err: format!("Failed to load app service config: {:?}", err),
})?;
let apps_service_url =
apps_service_config
.hosturl()
.ok_or_else(|| SchedulerError::StartError {
err: "Failed to fetch app service url".to_owned(),
})?;
let scheduler = Scheduler::new(&scheduler_dir, &apps_service_url)?;
info!("Starting scheduler-service - {:?}", scheduler.scheduler_dir);
scheduler.init()?;
if let Err(e) = scheduler.start() {
error!("Failed to schedule tasks: {:?}", e);
}
Service::new(config, scheduler, QueryRoot, MutationRoot).start();
Ok(())
}