5 Commits

Author SHA1 Message Date
9c39c0daa2 chore(release): v0.3.3 (#22)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
chore(release): 0.3.3

Co-authored-by: cuddle-please <bot@cuddle.sh>
Reviewed-on: https://git.front.kjuulh.io/kjuulh/drift/pulls/22
2025-03-27 14:11:17 +01:00
ca233208e2 feat: don't stop on error
All checks were successful
continuous-integration/drone/push Build is passing
2025-03-27 14:10:11 +01:00
3c9d15779d feat: redo main part
All checks were successful
continuous-integration/drone/push Build is passing
2025-03-27 14:08:26 +01:00
805889b3d9 chore(release): v0.3.2 (#21)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
chore(release): 0.3.2

Co-authored-by: cuddle-please <bot@cuddle.sh>
Reviewed-on: https://git.front.kjuulh.io/kjuulh/drift/pulls/21
2025-03-27 13:32:39 +01:00
ad0081846e fix: time formatting
All checks were successful
continuous-integration/drone/push Build is passing
2025-03-27 13:31:45 +01:00
4 changed files with 36 additions and 23 deletions

View File

@@ -6,6 +6,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.3.3] - 2025-03-27
### Added
- don't stop on error
- redo main part
## [0.3.2] - 2025-03-27
### Fixed
- time formatting
## [0.3.1] - 2025-03-27
### Added

2
Cargo.lock generated
View File

@@ -249,7 +249,7 @@ dependencies = [
[[package]]
name = "nodrift"
version = "0.3.0"
version = "0.3.2"
dependencies = [
"anyhow",
"async-trait",

View File

@@ -3,7 +3,7 @@ members = ["crates/*"]
resolver = "2"
[workspace.package]
version = "0.3.1"
version = "0.3.3"
[workspace.dependencies]
drift = { path = "crates/drift" }

View File

@@ -1,7 +1,8 @@
use std::{sync::Arc, time::Duration};
use anyhow::Context;
use async_trait::async_trait;
use chrono::{DateTime, Local};
use chrono::{DateTime, Local, TimeDelta};
use std::future::Future;
use tokio::time;
use tokio_util::sync::CancellationToken;
@@ -34,22 +35,7 @@ where
let drifter = drifter.clone();
async move {
let start = std::time::Instant::now();
tracing::debug!("running job");
let child_token = cancellation_token.child_token();
if let Err(e) = drifter.execute(child_token).await {
tracing::error!("drift job failed with error: {}, stopping routine", e);
cancellation_token.cancel();
}
let elapsed = start.elapsed();
let mut wait = interval.saturating_sub(elapsed);
tracing::debug!(
"job took: {}ms, waiting: {}ms for next run",
elapsed.as_millis(),
wait.as_millis()
);
let mut wait = Duration::default();
loop {
let child_token = cancellation_token.child_token();
@@ -67,8 +53,7 @@ where
tracing::debug!("running job");
if let Err(e) = drifter.execute(child_token).await {
tracing::error!("drift job failed with error: {}, stopping routine", e);
cancellation_token.cancel();
tracing::error!("drift job failed with error: {}", e);
continue
}
@@ -76,9 +61,9 @@ where
wait = interval.saturating_sub(elapsed);
let now: DateTime<Local> = Local::now();
let next: Option<DateTime<Local>> = std::time::SystemTime::now().checked_add(wait).map(|next| next.into());
let next: Option<DateTime<Local>> = now.checked_add_signed(TimeDelta::from_std(wait).expect("to be able to convert duration into time delta"));
tracing::debug!(?now, ?next, "job took: {}ms, waiting: {}ms for next run", elapsed.as_millis(), wait.as_millis() );
tracing::debug!(now=now.to_string(), next=next.map(|n| n.to_string()), "job took: {}ms, waiting: {}ms for next run", elapsed.as_millis(), wait.as_millis() );
}
}
@@ -227,6 +212,23 @@ mod tests {
assert!(logs_contain("running job"));
assert!(logs_contain("job took:"));
Ok(())
}
#[tokio::test]
#[traced_test]
async fn test_calls_trace_on_start_and_end_long() -> anyhow::Result<()> {
let token = schedule(Duration::from_millis(100), || async {
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
Ok(())
});
tokio::time::sleep(Duration::from_millis(500)).await;
assert!(!token.is_cancelled());
assert!(logs_contain("running job"));
assert!(logs_contain("job took:"));
Ok(())
}
}