mirror of
https://codeberg.org/icewind/shelve.git
synced 2026-06-03 20:14:08 +02:00
factor out expire thread
This commit is contained in:
parent
4637bf1dd9
commit
ec4e51c83d
1 changed files with 14 additions and 18 deletions
56
src/main.rs
56
src/main.rs
|
|
@ -13,7 +13,7 @@ use std::env::current_dir;
|
||||||
use std::fs::{create_dir, read_dir, remove_dir_all};
|
use std::fs::{create_dir, read_dir, remove_dir_all};
|
||||||
use std::io;
|
use std::io;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::thread::{sleep, spawn};
|
use std::thread::{sleep, spawn, JoinHandle};
|
||||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
mod expire_queue;
|
mod expire_queue;
|
||||||
|
|
@ -91,35 +91,7 @@ fn main() {
|
||||||
.map(PathBuf::from)
|
.map(PathBuf::from)
|
||||||
.unwrap_or_else(|| current_dir().unwrap_or_default().join("data"));
|
.unwrap_or_else(|| current_dir().unwrap_or_default().join("data"));
|
||||||
|
|
||||||
let expire_basedir = basedir.clone();
|
expire_job(basedir.clone(), expire_queue.clone());
|
||||||
let expire_queue_clone = expire_queue.clone();
|
|
||||||
|
|
||||||
spawn(move || {
|
|
||||||
for dir_entry in read_dir(&expire_basedir).expect("Failed to list base directory") {
|
|
||||||
if let Ok(entry) = dir_entry {
|
|
||||||
if let Some(upload_id) = entry
|
|
||||||
.file_name()
|
|
||||||
.to_str()
|
|
||||||
.and_then(|s| UploadId::new(s).ok())
|
|
||||||
{
|
|
||||||
expire_queue_clone.push(upload_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
println!(
|
|
||||||
"Loaded {} existing uploads for expiry",
|
|
||||||
expire_queue_clone.len()
|
|
||||||
);
|
|
||||||
|
|
||||||
loop {
|
|
||||||
for expired in expire_queue_clone.get_expired(now()) {
|
|
||||||
let _ = remove_dir_all(expire_basedir.join(expired.as_string()));
|
|
||||||
}
|
|
||||||
|
|
||||||
sleep(Duration::from_secs(5 * 60));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
rocket::ignite()
|
rocket::ignite()
|
||||||
.manage(tokens)
|
.manage(tokens)
|
||||||
|
|
@ -128,3 +100,27 @@ fn main() {
|
||||||
.mount("/", routes![home, upload, download])
|
.mount("/", routes![home, upload, download])
|
||||||
.launch();
|
.launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn expire_job(expire_basedir: PathBuf, expire_queue: ExpireQueue) -> JoinHandle<()> {
|
||||||
|
spawn(move || {
|
||||||
|
for dir_entry in read_dir(&expire_basedir).expect("Failed to list base directory") {
|
||||||
|
if let Ok(entry) = dir_entry {
|
||||||
|
if let Some(upload_id) = entry
|
||||||
|
.file_name()
|
||||||
|
.to_str()
|
||||||
|
.and_then(|s| UploadId::new(s).ok())
|
||||||
|
{
|
||||||
|
expire_queue.push(upload_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loop {
|
||||||
|
for expired in expire_queue.get_expired(now()) {
|
||||||
|
let _ = remove_dir_all(expire_basedir.join(expired.as_string()));
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(Duration::from_secs(5 * 60));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue