aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMroik <mroik@delayed.space>2025-06-24 06:39:31 +0200
committerMroik <mroik@delayed.space>2025-06-24 06:55:37 +0200
commita8f704ef1b11b923ad9c1b72e739920a8b783b27 (patch)
tree0c82ce6a4baab17a8f8e4b354c031ebb8731dac5
parent8b9f41e3ac27284cf8b211ea3350d9eaf3cc0d13 (diff)
Add scheduling on an hourly basis
-rw-r--r--Cargo.lock10
-rw-r--r--Cargo.toml1
-rw-r--r--docker-compose.yml1
-rw-r--r--src/main.rs25
4 files changed, 35 insertions, 2 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 062e477..dbc2025 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -386,6 +386,15 @@ dependencies = [
]
[[package]]
+name = "clokwerk"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd108d365fcb6d7eddf17a6718eb6a33db18ba4178f8cc6b667f480710f10d76"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
name = "cmac"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1838,6 +1847,7 @@ name = "orange-whale"
version = "0.1.0"
dependencies = [
"anyhow",
+ "clokwerk",
"env_logger",
"log",
"rpgpie",
diff --git a/Cargo.toml b/Cargo.toml
index de07710..49b2288 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,6 +5,7 @@ edition = "2024"
[dependencies]
anyhow = "1.0.98"
+clokwerk = "0.4.0"
env_logger = "0.11.8"
log = "0.4.27"
rpgpie = "0.6.2"
diff --git a/docker-compose.yml b/docker-compose.yml
index 2730048..02c6534 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,6 +7,7 @@ services:
- TELOXIDE_TOKEN=
- CHAT_ID=
- LOCATIONS=
+ - INTERVAL=
- RUST_LOG=
volumes:
#- ./folder:/app/folder
diff --git a/src/main.rs b/src/main.rs
index 287f43f..e51cd03 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -6,7 +6,8 @@ use std::{
};
use anyhow::Result;
-use log::error;
+use clokwerk::{AsyncScheduler, Interval};
+use log::{error, info};
use rpgpie::{
certificate::Certificate,
message::{SignatureMode, encrypt},
@@ -21,6 +22,27 @@ const MAX_FILE_SIZE: usize = 50000000;
#[tokio::main]
async fn main() -> Result<()> {
env_logger::init();
+ let mut scheduler = AsyncScheduler::new();
+ let interval = var("INTERVAL")?.parse::<u32>()?;
+
+ scheduler.every(Interval::Hours(interval)).run(|| async {
+ info!("Running a backup");
+ backup().await.unwrap();
+ info!("Backup terminated");
+ });
+
+ info!("Program set to backup every {} hours", interval);
+
+ info!("Running first backup out of schedule");
+ backup().await?;
+
+ loop {
+ scheduler.run_pending().await;
+ sleep(Duration::from_secs(30)).await;
+ }
+}
+
+async fn backup() -> Result<()> {
let chat_id = var("CHAT_ID").unwrap();
let locations: Vec<String> = var("LOCATIONS")
.unwrap()
@@ -60,7 +82,6 @@ async fn main() -> Result<()> {
}
}
}
-
Ok(())
}