evobench_tools/run/
open_run_queues.rs1use std::{
5 thread::{self, JoinHandle},
6 time::Duration,
7};
8
9use anyhow::Result;
10use chj_unix_util::polling_signals::SharedPollingSignals;
11
12use crate::{
13 clone,
14 run::{
15 config::ShareableConfig, output_directory::html_files::regenerate_index_files,
16 run_queues::RunQueues, sub_command::wd::open_queue_change_signals,
17 },
18 utillib::arc::CloneArc,
19 warn,
20};
21
22#[must_use]
23pub struct RegenerateIndexFiles {
24 signal_change: SharedPollingSignals,
25 shareable_config: ShareableConfig,
26}
27
28impl RegenerateIndexFiles {
29 pub fn run_one(&self) {
30 if let Some(signal) = self.signal_change.get_latest_signal() {
31 if let Err(e) = regenerate_index_files(&self.shareable_config, None, None) {
32 signal.ignore();
33 warn!("error: regenerate_index_files: {e:#}");
35 } else {
36 signal.confirm();
37 }
38 }
39 }
40
41 pub fn spawn_runner_thread(self) -> std::io::Result<JoinHandle<()>> {
42 thread::Builder::new()
43 .name("regen-index-files".into())
44 .spawn({
45 move || {
46 loop {
47 self.run_one();
48 thread::sleep(Duration::from_millis(500));
49 }
50 }
51 })
52 }
53}
54
55pub fn open_run_queues(
56 shareable_config: &ShareableConfig,
57) -> Result<(RunQueues, RegenerateIndexFiles)> {
58 let signal_change = open_queue_change_signals(&shareable_config.global_app_state_dir)?;
61 let signal_change_sender = signal_change.sender();
62 clone!(shareable_config);
63 Ok((
64 RunQueues::open(
65 shareable_config.run_config.queues.clone_arc(),
66 true,
67 &shareable_config.global_app_state_dir,
68 Some(signal_change_sender),
69 )?,
70 RegenerateIndexFiles {
71 signal_change,
72 shareable_config,
73 },
74 ))
75}