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#[cfg(feature="tof-ctrl")]
26use tof_control::helper::cpu_type::{
27 CPUTempDebug,
28 CPUInfoDebug,
29};
30
31#[cfg(feature="tof-ctrl")]
48pub fn monitor_cpu(tp_sender : Sender<TofPacket>,
49 moni_interval : u64,
50 thread_control : Arc<Mutex<ThreadControl>>,
51 verbose : bool) {
52 let mut moni_data = CPUMoniData::new();
53 let mut timer = Instant::now();
54 let sleep_time = Duration::from_secs(moni_interval);
55 'main: loop {
56 let cpu_info = CPUInfoDebug::new();
57 let cpu_temp = CPUTempDebug::new();
58 if timer.elapsed().as_secs() >= moni_interval {
59 moni_data.add_temps(&cpu_temp);
60 moni_data.add_info(&cpu_info);
61 let tp = moni_data.pack();
63 match tp_sender.send(tp) {
64 Err(err) => error!("Can't send CPUMoniData over channel1 {err}"),
65 Ok(_) => ()
66 }
67 timer = Instant::now();
68 if verbose {
69 println!("{}", moni_data);
70 }
71 }
72 sleep(sleep_time);
73 match thread_control.try_lock() {
77 Err(err) => error!("Unable to lock shared memory! {err}"),
78 Ok(tc) => {
79 if tc.stop_flag {
81 println!("==> Stopping monitoring thread, stop signal received!");
82 break 'main;
83 }
84 }
85 }
86 }
87}