diff --git a/Cargo.lock b/Cargo.lock index 6a24bbc..bc7b713 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -260,6 +260,27 @@ dependencies = [ "windows-link", ] +[[package]] +name = "chrono-tz" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efdce149c370f133a071ca8ef6ea340b7b88748ab0810097a9e2976eaa34b4f3" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f10f8c9340e31fc120ff885fcdb54a0b48e474bbd77cab557f0c30a3e569402" +dependencies = [ + "parse-zoneinfo", + "phf_codegen", +] + [[package]] name = "clap" version = "4.5.31" @@ -359,6 +380,7 @@ version = "3.3.0" dependencies = [ "bollard", "chrono", + "chrono-tz", "clap", "envy", "futures", @@ -1202,6 +1224,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -1253,6 +1284,44 @@ dependencies = [ "sha2", ] +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -1698,6 +1767,12 @@ dependencies = [ "libc", ] +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + [[package]] name = "slab" version = "0.4.9" diff --git a/Cargo.toml b/Cargo.toml index db2a2fa..22e7c15 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ serde_json = "1.0.133" serde = "1.0.215" tokio-cron-scheduler = { version = "0.13.0", default-features = false, optional = true } envy = "0.4.2" +chrono-tz = "0.10.3" [features] default = ["server", "cli"] diff --git a/src/server.rs b/src/server.rs index afb6773..03d2063 100644 --- a/src/server.rs +++ b/src/server.rs @@ -1,6 +1,7 @@ -use std::sync::Arc; +use std::{env, sync::Arc}; use chrono::Local; +use chrono_tz::Tz; use liquid::{object, Object, ValueView}; use rustc_hash::FxHashMap; use serde_json::Value; @@ -54,15 +55,22 @@ pub async fn serve(port: &u16, ctx: &Context) -> std::io::Result<()> { let scheduler = JobScheduler::new().await.unwrap(); let data = Arc::new(Mutex::new(data)); let data_copy = data.clone(); + let tz = env::var("TZ") + .map(|tz| tz.parse().unwrap_or(Tz::UTC)) + .unwrap_or(Tz::UTC); if let Some(interval) = &ctx.config.refresh_interval { scheduler .add( - match Job::new_async(interval, move |_uuid, _lock| { - let data_copy = data_copy.clone(); - Box::pin(async move { - data_copy.lock().await.refresh().await; - }) - }) { + match Job::new_async_tz( + interval, + tz, + move |_uuid, _lock| { + let data_copy = data_copy.clone(); + Box::pin(async move { + data_copy.lock().await.refresh().await; + }) + }, + ) { Ok(job) => job, Err(e) => match e { tokio_cron_scheduler::JobSchedulerError::ParseSchedule => error!(