This repository has been archived on 2023-11-08. You can view files and clone it, but cannot push or open issues or pull requests.
fiddle/src/lib.rs

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);
}
}