From b2963c78a6c41894eb594a1fa985d1631eb210d2 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Mon, 27 Jan 2020 20:37:38 +0100 Subject: [PATCH] [feat] conf: load nested struct resources_usage from env vars --- lib/core/conf/src/env.rs | 27 +++++++++++++++++++----- lib/core/conf/src/resources.rs | 24 ++++++++++----------- lib/core/conf/test/v1/conf-upgraded.json | 8 +++---- lib/core/conf/test/v1/conf.json | 8 +++---- lib/core/conf/test/v2/conf.json | 8 +++---- 5 files changed, 46 insertions(+), 29 deletions(-) diff --git a/lib/core/conf/src/env.rs b/lib/core/conf/src/env.rs index 27c2e099..8ca114ed 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 75a1e84c..5bcffbb5 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 1ac7a1f9..8b8be95f 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 1ac7a1f9..8b8be95f 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 c80ab0a9..e69d96e0 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": [] -- GitLab