aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordiogo464 <[email protected]>2025-09-18 14:13:44 +0100
committerdiogo464 <[email protected]>2025-09-18 14:13:44 +0100
commit2801900ddb6f9e67d132670ebf976adf8313822c (patch)
tree01123cbcafddf772fd1497780965c073d44c49dd /src
parent8a03983281894866e25ac71774fd71d025185b3f (diff)
feat: write timestamp to signal file
Diffstat (limited to 'src')
-rw-r--r--src/main.rs26
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
10use clap::{Args, Parser, Subcommand}; 10use 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))]
572async fn machine_signal_containers(ctx: &Context, machine: Machine, signal: &Signal) -> Result<()> { 573async 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
1168fn unix_timestamp() -> u64 {
1169 SystemTime::now()
1170 .duration_since(SystemTime::UNIX_EPOCH)
1171 .unwrap()
1172 .as_secs()
1173}