75 lines
1.8 KiB
Rust
75 lines
1.8 KiB
Rust
use anyhow::Result;
|
|
use diesel::prelude::*;
|
|
use std::fs;
|
|
use uuidv7::Uuid;
|
|
|
|
pub mod api;
|
|
pub mod config;
|
|
pub mod db;
|
|
|
|
pub use config::CONFIG;
|
|
|
|
pub const ASCII_LOGO: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/logo.txt"));
|
|
|
|
pub fn init() {
|
|
println!("{}\n", ASCII_LOGO);
|
|
|
|
log::info!("Initializing config from environment variables");
|
|
let _ = *CONFIG;
|
|
log::info!("Config: {:?}", *CONFIG);
|
|
}
|
|
|
|
pub fn prune_single(entry: &str) -> Result<()> {
|
|
let path = format!("{}/{}", CONFIG.data_dir, entry);
|
|
log::info!("Pruning: {}", path);
|
|
|
|
if fs::metadata(&path).is_ok() {
|
|
fs::remove_file(&path).or_else(|_| fs::remove_dir_all(&path))?;
|
|
log::info!("File or directory deleted successfully: {}", path);
|
|
} else {
|
|
log::warn!("File or directory does not exist: {}", path);
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn prune_many(ids: &[String]) -> Result<()> {
|
|
ids.iter().try_for_each(|s| prune_single(s))?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn prune(db_conn: &mut db::Connection) -> Result<()> {
|
|
log::info!("Pruning deactivated directories");
|
|
|
|
let ids: Vec<Uuid> = db::schema::directories::table
|
|
.select(db::schema::directories::id)
|
|
.filter(db::schema::directories::active.eq(false))
|
|
.load(db_conn)?;
|
|
|
|
prune_many(&ids.iter().map(|id| id.to_string()).collect::<Vec<_>>())?;
|
|
diesel::delete(db::schema::directories::table.filter(db::schema::directories::id.eq_any(ids)))
|
|
.execute(db_conn)?;
|
|
|
|
log::info!("Pruning done");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
pub fn prune_job() {
|
|
const NAME: &str = "prune";
|
|
|
|
log::info!("Starting cron job: {}", NAME);
|
|
|
|
let db_conn = &mut match db::POOL.get() {
|
|
Ok(x) => x,
|
|
Err(e) => {
|
|
log::error!("{}: {:?}", NAME, e);
|
|
return;
|
|
}
|
|
};
|
|
if let Err(e) = prune(db_conn) {
|
|
log::error!("{}: {:?}", NAME, e);
|
|
}
|
|
}
|