diff --git a/src/howl.rs b/src/howl.rs index 76589cd..d4a9cff 100644 --- a/src/howl.rs +++ b/src/howl.rs @@ -133,7 +133,12 @@ fn produce_messages( match producer.send( BaseRecord::to(conf.event_topic) .key("") - .payload(generate_fake_metadata(fbb, now_nanos)) + .payload(generate_fake_metadata( + rng, + fbb, + now_nanos, + conf.veto_probability, + )) .timestamp(now_nanos / 1_000_000), ) { Ok(_) => {} @@ -238,14 +243,20 @@ fn generate_fake_events<'a>( fbb.finished_data() } -fn generate_fake_metadata<'a>(fbb: &'a mut FlatBufferBuilder<'_>, timestamp_ns: i64) -> &'a [u8] { +fn generate_fake_metadata<'a>( + rng: &mut ThreadRng, + fbb: &'a mut FlatBufferBuilder<'_>, + timestamp_ns: i64, + veto_probability: f64, +) -> &'a [u8] { fbb.reset(); + let is_vetoed = rng.random_range(0.0..1.0) < veto_probability; let args = Pu00MessageArgs { reference_time: timestamp_ns, message_id: 0, source_name: Some(fbb.create_string("saluki")), period_number: Some(0), - vetos: Some(0), + vetos: Some(if is_vetoed { 1 } else { 0 }), proton_charge: Some(0.1), }; let pu00 = Pu00Message::create(fbb, &args); @@ -260,6 +271,7 @@ pub struct HowlConfig<'a> { pub messages_per_frame: u32, pub frames_per_second: u32, pub frames_per_run: u32, + pub veto_probability: f64, // 1 = always vetoed, 0 = never vetoed pub event_message_config: &'a EventMessageConfig, pub kafka_config: Option>, } @@ -281,7 +293,8 @@ pub fn howl(conf: &HowlConfig) { as u32; debug!("ev44 size is {ev44_size} bytes"); - let pu00_size = generate_fake_metadata(&mut fbb, now_nanos).len() as u32; + let pu00_size = + generate_fake_metadata(&mut rng, &mut fbb, now_nanos, conf.veto_probability).len() as u32; debug!("pu00 size is {pu00_size} bytes"); // calculate overall rate (with both ev44 and pu00) diff --git a/src/main.rs b/src/main.rs index a79973c..9d30b17 100644 --- a/src/main.rs +++ b/src/main.rs @@ -87,6 +87,9 @@ enum Commands { /// Maximum detector ID #[arg(long, default_value = "1000")] det_max: i32, + /// Veto probability (0 = never vetoed; 1 = always vetoed) + #[arg(long, default_value = "0.0")] + veto_probability: f64, // Additonal command line arguments #[arg(short = 'X', long)] kafka_config: Option>, @@ -147,6 +150,7 @@ async fn main() { tof_sigma, det_min, det_max, + veto_probability, kafka_config, } => howl(&HowlConfig { kafka_config, @@ -163,6 +167,7 @@ async fn main() { det_min, det_max, }, + veto_probability, }), Commands::Count { topic,