diff options
| -rw-r--r-- | Cargo.lock | 10 | ||||
| -rw-r--r-- | Cargo.toml | 1 | ||||
| -rw-r--r-- | docker-compose.yml | 1 | ||||
| -rw-r--r-- | src/main.rs | 25 |
4 files changed, 35 insertions, 2 deletions
@@ -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", @@ -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(()) } |
