diff --git a/lib/core/conf/src/env.rs b/lib/core/conf/src/env.rs index 27c2e099be4a710592c75754f05fcdc20fdbe51d..8ca114ed675f1e78b1a8148e4d92b334c098356a 100644 --- a/lib/core/conf/src/env.rs +++ b/lib/core/conf/src/env.rs @@ -19,6 +19,7 @@ use crate::constants; use crate::errors::DursConfEnvError; use crate::global_conf::v2::DuRsGlobalUserConfV2; use crate::global_conf::DuRsGlobalUserConf; +use crate::resources::ResourcesUsage; /// Load global user configuration from environment variables pub fn load_env_global_user_conf() -> Result<DuRsGlobalUserConf, DursConfEnvError> { @@ -27,11 +28,17 @@ pub fn load_env_global_user_conf() -> Result<DuRsGlobalUserConf, DursConfEnvErro .parse::<usize>() .map_err(DursConfEnvError::ConfVersionParseErr)? { - 2 => Ok(DuRsGlobalUserConf::V2( - envy::prefixed(constants::DURS_ENV_PREFIX) + 2 => { + let resources_usage = + envy::prefixed(&format!("{}RESOURCES_USAGE_", constants::DURS_ENV_PREFIX)) + .from_env::<ResourcesUsage>() + .map_err(DursConfEnvError::EnvyErr)?; + let mut global_user_conf_v2 = envy::prefixed(constants::DURS_ENV_PREFIX) .from_env::<DuRsGlobalUserConfV2>() - .map_err(DursConfEnvError::EnvyErr)?, - )), + .map_err(DursConfEnvError::EnvyErr)?; + global_user_conf_v2.resources_usage = Some(resources_usage); + Ok(DuRsGlobalUserConf::V2(global_user_conf_v2)) + } v => Err(DursConfEnvError::UnsupportedVersion { expected: vec![2], found: v, @@ -46,6 +53,7 @@ pub fn load_env_global_user_conf() -> Result<DuRsGlobalUserConf, DursConfEnvErro mod tests { use super::*; + use crate::resources::ResourceUsage; use dubp_currency_params::CurrencyName; use durs_module::ModuleName; use maplit::hashset; @@ -92,13 +100,22 @@ mod tests { &format!("{}DISABLED", constants::DURS_ENV_PREFIX), "tui,gva", ); + std::env::set_var( + &format!("{}RESOURCES_USAGE_MEMORY_USAGE", constants::DURS_ENV_PREFIX), + "medium", + ); assert_eq!( DuRsGlobalUserConf::V2(DuRsGlobalUserConfV2 { currency: Some(CurrencyName(String::from("g1"))), my_node_id: None, default_sync_module: None, - ressources_usage: None, + resources_usage: Some(ResourcesUsage { + cpu_usage: ResourceUsage::Large, + network_usage: ResourceUsage::Large, + memory_usage: ResourceUsage::Medium, + disk_space_usage: ResourceUsage::Large, + }), disabled: Some(hashset![ ModuleName("tui".to_owned()), ModuleName("gva".to_owned()) diff --git a/lib/core/conf/src/resources.rs b/lib/core/conf/src/resources.rs index 75a1e84cee32af4a5e3bdc8cb04a00fe6d79db35..5bcffbb5e8c1f75647331bfdf75d03ba79f01733 100644 --- a/lib/core/conf/src/resources.rs +++ b/lib/core/conf/src/resources.rs @@ -17,6 +17,7 @@ #[derive(Debug, Copy, Clone, Deserialize, PartialEq, Serialize)] /// Ressource usage +#[serde(rename_all = "lowercase")] pub enum ResourceUsage { /// Minimal use of the resource, to the detriment of performance Minimal, @@ -28,26 +29,25 @@ pub enum ResourceUsage { Infinite, } -#[derive(Debug, Copy, Clone, Deserialize, PartialEq, Serialize)] +impl Default for ResourceUsage { + fn default() -> Self { + ResourceUsage::Large + } +} + +#[derive(Debug, Default, Copy, Clone, Deserialize, PartialEq, Serialize)] /// Ressources usage pub struct ResourcesUsage { /// Cpu usage + #[serde(default)] pub cpu_usage: ResourceUsage, /// Network usage + #[serde(default)] pub network_usage: ResourceUsage, /// Memory usage + #[serde(default)] pub memory_usage: ResourceUsage, /// Disk space usage + #[serde(default)] pub disk_space_usage: ResourceUsage, } - -impl Default for ResourcesUsage { - fn default() -> Self { - ResourcesUsage { - cpu_usage: ResourceUsage::Large, - network_usage: ResourceUsage::Large, - memory_usage: ResourceUsage::Large, - disk_space_usage: ResourceUsage::Large, - } - } -} diff --git a/lib/core/conf/test/v1/conf-upgraded.json b/lib/core/conf/test/v1/conf-upgraded.json index 1ac7a1f9f8748d49f2fc00d6d9d98f26afc7b454..8b8be95fc4ec49a64b9e0e172e0a52cd9962efa2 100644 --- a/lib/core/conf/test/v1/conf-upgraded.json +++ b/lib/core/conf/test/v1/conf-upgraded.json @@ -5,10 +5,10 @@ "my_node_id": 1191678020, "default_sync_module": "ws2p1", "resources_usage": { - "cpu_usage": "Large", - "network_usage": "Large", - "memory_usage": "Large", - "disk_space_usage": "Large" + "cpu_usage": "large", + "network_usage": "large", + "memory_usage": "large", + "disk_space_usage": "large" }, "disabled": [], "enabled": [] diff --git a/lib/core/conf/test/v1/conf.json b/lib/core/conf/test/v1/conf.json index 1ac7a1f9f8748d49f2fc00d6d9d98f26afc7b454..8b8be95fc4ec49a64b9e0e172e0a52cd9962efa2 100644 --- a/lib/core/conf/test/v1/conf.json +++ b/lib/core/conf/test/v1/conf.json @@ -5,10 +5,10 @@ "my_node_id": 1191678020, "default_sync_module": "ws2p1", "resources_usage": { - "cpu_usage": "Large", - "network_usage": "Large", - "memory_usage": "Large", - "disk_space_usage": "Large" + "cpu_usage": "large", + "network_usage": "large", + "memory_usage": "large", + "disk_space_usage": "large" }, "disabled": [], "enabled": [] diff --git a/lib/core/conf/test/v2/conf.json b/lib/core/conf/test/v2/conf.json index c80ab0a9f2da2b96ba433f35d7fcc0cbea097ed7..e69d96e0fe94760f300d30b0efc787ee85175f48 100644 --- a/lib/core/conf/test/v2/conf.json +++ b/lib/core/conf/test/v2/conf.json @@ -5,10 +5,10 @@ "my_node_id": 1191678020, "default_sync_module": "ws2pv1", "resources_usage": { - "cpu_usage": "Large", - "network_usage": "Large", - "memory_usage": "Large", - "disk_space_usage": "Large" + "cpu_usage": "large", + "network_usage": "large", + "memory_usage": "large", + "disk_space_usage": "large" }, "disabled": [], "enabled": []