diff options
| author | diogo464 <[email protected]> | 2025-09-18 14:13:44 +0100 |
|---|---|---|
| committer | diogo464 <[email protected]> | 2025-09-18 14:13:44 +0100 |
| commit | 2801900ddb6f9e67d132670ebf976adf8313822c (patch) | |
| tree | 01123cbcafddf772fd1497780965c073d44c49dd | |
| parent | 8a03983281894866e25ac71774fd71d025185b3f (diff) | |
feat: write timestamp to signal file
| -rw-r--r-- | src/main.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index 46e660a..3bd5497 100644 --- a/src/main.rs +++ b/src/main.rs | |||
| @@ -4,7 +4,7 @@ use std::{ | |||
| 4 | net::Ipv4Addr, | 4 | net::Ipv4Addr, |
| 5 | path::{Path, PathBuf}, | 5 | path::{Path, PathBuf}, |
| 6 | process::Output, | 6 | process::Output, |
| 7 | time::{Duration, Instant}, | 7 | time::{Duration, Instant, SystemTime}, |
| 8 | }; | 8 | }; |
| 9 | 9 | ||
| 10 | use clap::{Args, Parser, Subcommand}; | 10 | use clap::{Args, Parser, Subcommand}; |
| @@ -436,11 +436,12 @@ async fn cmd_run(args: RunArgs) -> Result<()> { | |||
| 436 | tokio::time::sleep_until(expire.into()).await; | 436 | tokio::time::sleep_until(expire.into()).await; |
| 437 | 437 | ||
| 438 | tracing::info!("triggering signal {}", spec.signal); | 438 | tracing::info!("triggering signal {}", spec.signal); |
| 439 | let signal_timestamp = unix_timestamp(); | ||
| 439 | machine::for_each( | 440 | machine::for_each( |
| 440 | machines | 441 | machines |
| 441 | .iter() | 442 | .iter() |
| 442 | .filter(|&machine| containers.iter().any(|c| c.machine == *machine)), | 443 | .filter(|&machine| containers.iter().any(|c| c.machine == *machine)), |
| 443 | |machine| machine_signal_containers(&ctx, machine, &spec.signal), | 444 | |machine| machine_signal_containers(&ctx, machine, &spec.signal, signal_timestamp), |
| 444 | ) | 445 | ) |
| 445 | .await?; | 446 | .await?; |
| 446 | } | 447 | } |
| @@ -569,9 +570,19 @@ async fn machine_start_containers(ctx: &Context, machine: Machine) -> Result<()> | |||
| 569 | } | 570 | } |
| 570 | 571 | ||
| 571 | #[tracing::instrument(ret, err, skip(ctx))] | 572 | #[tracing::instrument(ret, err, skip(ctx))] |
| 572 | async fn machine_signal_containers(ctx: &Context, machine: Machine, signal: &Signal) -> Result<()> { | 573 | async fn machine_signal_containers( |
| 574 | ctx: &Context, | ||
| 575 | machine: Machine, | ||
| 576 | signal: &Signal, | ||
| 577 | timestamp: u64, | ||
| 578 | ) -> Result<()> { | ||
| 573 | tracing::info!("signaling containers"); | 579 | tracing::info!("signaling containers"); |
| 574 | machine_run_script(ctx, machine, &format!("touch /tmp/oar-p2p-signal/{signal}")).await?; | 580 | machine_run_script( |
| 581 | ctx, | ||
| 582 | machine, | ||
| 583 | &format!("echo -n {timestamp} > /tmp/oar-p2p-signal/{signal}.tmp ; mv /tmp/oar-p2p-signal/{signal}.tmp /tmp/oar-p2p-signal/{signal}"), | ||
| 584 | ) | ||
| 585 | .await?; | ||
| 575 | tracing::info!("containers signaled"); | 586 | tracing::info!("containers signaled"); |
| 576 | Ok(()) | 587 | Ok(()) |
| 577 | } | 588 | } |
| @@ -1153,3 +1164,10 @@ fn machine_generate_configs( | |||
| 1153 | } | 1164 | } |
| 1154 | Ok(configs) | 1165 | Ok(configs) |
| 1155 | } | 1166 | } |
| 1167 | |||
| 1168 | fn unix_timestamp() -> u64 { | ||
| 1169 | SystemTime::now() | ||
| 1170 | .duration_since(SystemTime::UNIX_EPOCH) | ||
| 1171 | .unwrap() | ||
| 1172 | .as_secs() | ||
| 1173 | } | ||
