auto delete automatically
All checks were successful
build docker container automatically / build (push) Successful in 4m47s

This commit is contained in:
2026-04-22 15:33:32 +02:00
parent a425bfbc67
commit 5ccaf9a385
7 changed files with 193 additions and 14 deletions

View File

@ -0,0 +1,86 @@
use async_std::task;
use std::time::{Duration, SystemTime};
use super::register::register_tasks;
// Usage :
//
// interval:
// - time interval between executions
// - 0 seconds to only execute on startup
//
// last_exec:
// - time of last execution, should be 0 by default
//
// name :
// - name of the task that will be displayed in the logs
//
// f :
// - function that will be executed
pub struct ScheduledTaskInfo {
interval: Duration,
last_exec: Option<SystemTime>,
name : String,
f: fn(bool)
}
#[allow(dead_code)]
impl ScheduledTaskInfo {
pub fn every_second(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_secs(1) , last_exec : None, name: name, f : function });
}
pub fn every_ten_seconds(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_secs(10) , last_exec : None, name: name, f : function });
}
pub fn every_half_minute(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_secs(30) , last_exec : None, name: name, f : function });
}
pub fn every_minute(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_mins(1) , last_exec : None, name: name, f : function });
}
pub fn every_fifteen_minutes(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_mins(15) , last_exec : None, name: name, f : function });
}
pub fn every_half_hour(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_mins(30) , last_exec : None, name: name, f : function });
}
pub fn every_hour(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_hours(1) , last_exec : None, name: name, f : function });
}
pub fn every_day(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_hours(24) , last_exec : None, name: name, f : function });
}
pub fn every_week(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_hours(24 * 7) , last_exec : None, name: name, f : function });
}
pub fn every_interval(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool), interval: Duration) {
task_list.push( ScheduledTaskInfo { interval: interval , last_exec : None, name: name, f : function });
}
pub fn on_load(task_list: &mut Vec<ScheduledTaskInfo>, name: String, function: fn(bool)) {
task_list.push( ScheduledTaskInfo { interval: Duration::from_secs(0), last_exec: None, name, f: function } );
}
}
pub async fn scheduled_tasks_loop() {
let mut tasks = register_tasks();
loop {
task::sleep(Duration::from_secs(1)).await;
for task in &mut tasks {
let mut first_exec = false;
let should_exec = match task.last_exec {
Some(time) => SystemTime::now().duration_since(time).expect("how ???") >= task.interval,
None => { first_exec = true; true }
};
if should_exec {
tracing::info!("running task {}", task.name);
(task.f)(first_exec);
task.last_exec = Some(SystemTime::now());
}
}
}
}