summaryrefslogtreecommitdiffstats
path: root/src/app/data_harvester/temperature/sysinfo.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/data_harvester/temperature/sysinfo.rs')
-rw-r--r--src/app/data_harvester/temperature/sysinfo.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/app/data_harvester/temperature/sysinfo.rs b/src/app/data_harvester/temperature/sysinfo.rs
new file mode 100644
index 00000000..f0f79b1a
--- /dev/null
+++ b/src/app/data_harvester/temperature/sysinfo.rs
@@ -0,0 +1,47 @@
+//! Gets temperature data via sysinfo.
+
+use super::{is_temp_filtered, temp_vec_sort, TempHarvest, TemperatureType};
+use crate::app::Filter;
+
+pub async fn get_temperature_data(
+ sys: &sysinfo::System, temp_type: &TemperatureType, actually_get: bool, filter: &Option<Filter>,
+) -> crate::utils::error::Result<Option<Vec<TempHarvest>>> {
+ use sysinfo::{ComponentExt, SystemExt};
+
+ if !actually_get {
+ return Ok(None);
+ }
+
+ fn convert_celsius_to_kelvin(celsius: f32) -> f32 {
+ celsius + 273.15
+ }
+
+ fn convert_celsius_to_fahrenheit(celsius: f32) -> f32 {
+ (celsius * (9.0 / 5.0)) + 32.0
+ }
+
+ let mut temperature_vec: Vec<TempHarvest> = Vec::new();
+
+ let sensor_data = sys.get_components();
+ for component in sensor_data {
+ let name = component.get_label().to_string();
+
+ if is_temp_filtered(filter, &name) {
+ temperature_vec.push(TempHarvest {
+ name,
+ temperature: match temp_type {
+ TemperatureType::Celsius => component.get_temperature(),
+ TemperatureType::Kelvin => {
+ convert_celsius_to_kelvin(component.get_temperature())
+ }
+ TemperatureType::Fahrenheit => {
+ convert_celsius_to_fahrenheit(component.get_temperature())
+ }
+ },
+ });
+ }
+ }
+
+ temp_vec_sort(&mut temperature_vec);
+ Ok(Some(temperature_vec))
+}