bfile/janitor/src/main.rs

81 lines
2.1 KiB
Rust
Raw Normal View History

2023-10-12 13:11:09 +02:00
use state::State;
2023-10-11 16:06:07 +02:00
mod clean;
mod state;
mod env;
2023-10-12 12:39:28 +02:00
mod file;
2023-10-11 16:06:07 +02:00
pub fn redis_conn(env: env::Env) -> Result<redis::Client, redis::RedisError> {
log::info!("Connecting to redis DB on {}", env.redis.host);
redis::Client::open(format!("redis://:{}@{}:{}/", env.redis.pass, env.redis.host, env.redis.port))
}
2023-10-12 13:11:09 +02:00
#[derive(Debug, Clone)]
enum CleanResult {
Skip,
#[allow(dead_code)]
Break,
Ok
}
async fn clean(env: env::Env, state: State) -> CleanResult {
#[cfg(debug_assertions)]
log::debug!("Initiating clean process");
let envy = env.clone();
let res = clean::clean(state.clone()).await;
if res.is_err() {
log::error!("Error while cleaning: {}", res.unwrap_err());
log::error!("Retrying in {}", std::env::var("CLEAN_ERRDEL").unwrap());
log::debug!("Next clean will run at {}", chrono::Local::now() + env.clean_errdel);
tokio::time::sleep(envy.clean_errdel).await;
return CleanResult::Skip;
}
#[cfg(debug_assertions)] {
log::debug!("Cleaned successfully");
log::debug!("Next clean is scheduled in {}", std::env::var("CLEAN_DEL").unwrap());
log::debug!("Next clean will run at {}", chrono::Local::now() + env.clean_del);
}
tokio::time::sleep(envy.clean_errdel).await;
CleanResult::Ok
}
2023-10-11 16:06:07 +02:00
#[tokio::main]
async fn main() {
2023-10-12 12:39:28 +02:00
#[cfg(debug_assertions)] {
femme::with_level(log::LevelFilter::Debug);
}
#[cfg(not(debug_assertions))] {
femme::with_level(log::LevelFilter::Info);
}
2023-10-11 16:06:07 +02:00
dotenvy::dotenv().unwrap();
let env = crate::env::Env::load().unwrap();
2023-10-12 13:11:09 +02:00
let state = crate::state::State {
2023-10-12 12:39:28 +02:00
redis: redis_conn(env.clone()).unwrap(),
env: env.clone()
2023-10-11 16:06:07 +02:00
};
2023-10-12 13:11:09 +02:00
log::info!("Initalizing initial clean");
let cl = clean(env.clone(), state.clone()).await;
log::info!("Initial clean exited with status {:?}", cl);
2023-10-12 12:39:28 +02:00
2023-10-12 13:11:09 +02:00
loop {
let res = clean(env.clone(), state.clone()).await;
match res {
CleanResult::Break => {
break
},
_ => {}
2023-10-11 16:06:07 +02:00
}
}
2023-10-12 13:11:09 +02:00
log::info!("Main loop broke");
2023-10-11 16:06:07 +02:00
}