From 3856d94661bd5605a839983805ec8ad962c4d307 Mon Sep 17 00:00:00 2001 From: Jesper Jensen Date: Mon, 9 Feb 2026 23:04:07 +0100 Subject: Remove chrono dependency Removing that dependency didn't take a lot of code, and fewer dependencies are better --- src/main.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index c4366ca..c1888ea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,19 +4,23 @@ mod docker; mod manifest; mod dockerfile; mod metrics; +mod time; mod db; mod registry; mod updater; +mod refresher; use crate::docker::DockerRef; use crate::manifest::ManifestFile; use crate::dockerfile::DockerfileFile; use crate::db::{Db, SqliteDb}; +use crate::time::Timestamp; use crate::registry::{Registries, HttpRegistry, Config, Credentials}; use crate::updater::{FileInput, FilePatch, update_images}; use rand::distr::{Alphanumeric, SampleString}; use std::io::Write; +use std::time::Duration; struct Repository { url: String, @@ -56,7 +60,7 @@ fn is_yaml(path: &std::path::Path) -> bool { return false; } -fn run_tool(db: &dyn Db, reg: &dyn Registries, repos: &Vec, mut infile_paths: Vec) -> chrono::DateTime { +fn run_tool(db: &dyn Db, reg: &dyn Registries, repos: &Vec, mut infile_paths: Vec) -> Timestamp { for repo in repos { if repo.dest.exists() { let mut gitcmd = std::process::Command::new("git"); @@ -166,9 +170,9 @@ fn run_tool(db: &dyn Db, reg: &dyn Registries, repos: &Vec, mut infi file_inputs.push(FileInput { path, content, images }); } - let now = chrono::offset::Utc::now(); + let now = Timestamp::now(); let mut outcomes: Vec, String>> = Vec::with_capacity(file_inputs.len()); - update_images(&now, db, reg, &file_inputs, &mut outcomes); + update_images(now, db, reg, &file_inputs, &mut outcomes); for i in 0..file_inputs.len() { let file = &file_inputs[i]; @@ -245,8 +249,8 @@ fn run_tool(db: &dyn Db, reg: &dyn Registries, repos: &Vec, mut infi metrics::get().git_operations.with_label_values(&["push", "success"]).inc(); } - let now = chrono::offset::Utc::now(); - let mut min_expiry = now + chrono::Duration::hours(24); + let now = Timestamp::now(); + let mut min_expiry = now + Duration::from_secs(86400); for file in &file_inputs { for image_range in &file.images { let img = DockerRef::parse(&file.content, image_range); @@ -279,7 +283,7 @@ fn main() { let mut repos = vec![]; let mut auths = vec![]; let mut docker_auths: Vec<(String, Credentials)> = vec![]; - let mut registry_ttls: Vec<(String, chrono::Duration)> = vec![]; + let mut registry_ttls: Vec<(String, Duration)> = vec![]; let workdir = std::env::current_dir().unwrap(); if config_path.is_dir() { @@ -479,8 +483,8 @@ fn main() { match reader.parse_next() { Ok(json_event_parser::JsonEvent::Number(n)) => { - let minutes: i64 = n.parse().unwrap(); - registry_ttls.push((host, chrono::Duration::minutes(minutes))); + let minutes: u64 = n.parse().unwrap(); + registry_ttls.push((host, Duration::from_secs(minutes * 60))); }, _ => panic!("Invalid registry config json"), } @@ -512,7 +516,7 @@ fn main() { // Merge docker_auths and registry_ttls into final configs for (host, creds) in docker_auths { - let mut ttl = chrono::Duration::minutes(1440); + let mut ttl = Duration::from_secs(86400); for (h, t) in ®istry_ttls { if h == &host { ttl = *t; @@ -554,11 +558,11 @@ fn main() { let run_duration = run_start.elapsed().as_secs_f64(); metrics::get().run_duration.set(run_duration); - metrics::get().next_wakeup.set(next_wakeup.timestamp() as f64); + metrics::get().next_wakeup.set(next_wakeup.duration_since(Timestamp::ZERO).unwrap().as_secs() as f64); metrics::get().state.set(metrics::STATE_IDLE); - let sleep_duration = next_wakeup - chrono::offset::Utc::now(); - println!("Waiting {} seconds for next run", sleep_duration.num_seconds()); - std::thread::sleep(sleep_duration.to_std().unwrap()); + let sleep_duration = next_wakeup.duration_since(Timestamp::now()).unwrap_or(Duration::ZERO); + println!("Waiting {} seconds for next run", sleep_duration.as_secs()); + std::thread::sleep(sleep_duration); } } -- cgit v1.2.3