liftof_cc/threads/
monitoring.rs1use std::time::{
7 Instant,
8 Duration
9};
10use std::thread::sleep;
11use std::sync::{
12 Arc,
13 Mutex
14};
15
16use crossbeam_channel::Sender;
17
18use gondola_core::prelude::*;
19
20#[cfg(feature="tof-ctrl")]
21use tof_control::helper::cpu_type::{
22 CPUTempDebug,
23 CPUInfoDebug,
24};
25
26#[cfg(feature="tof-ctrl")]
40pub fn monitor_cpu(tp_sender : Sender<TofPacket>,
41 moni_interval : u64,
42 thread_control : Arc<Mutex<ThreadControl>>,
43 verbose : bool) {
44 let mut moni_data = CPUMoniData::new();
45 let mut timer = Instant::now();
46 let sleep_time = Duration::from_secs(moni_interval);
47 'main: loop {
48 let cpu_info = CPUInfoDebug::new();
49 let cpu_temp = CPUTempDebug::new();
50 if timer.elapsed().as_secs() >= moni_interval {
51 moni_data.add_temps(&cpu_temp);
52 moni_data.add_info(&cpu_info);
53 let tp = moni_data.pack();
55 match tp_sender.send(tp) {
56 Err(err) => error!("Can't send CPUMoniData over channel1 {err}"),
57 Ok(_) => ()
58 }
59 timer = Instant::now();
60 if verbose {
61 println!("{}", moni_data);
62 }
63 }
64 sleep(sleep_time);
65 match thread_control.try_lock() {
69 Err(err) => error!("Unable to lock shared memory! {err}"),
70 Ok(tc) => {
71 if tc.stop_flag {
73 println!("==> Stopping monitoring thread, stop signal received!");
74 break 'main;
75 }
76 }
77 }
78 }
79}