Commit 66730035 authored by Jonas SPRENGER's avatar Jonas SPRENGER

WIP

parent c7537c3f
Pipeline #5600 waiting for manual action with stage
...@@ -397,6 +397,7 @@ dependencies = [ ...@@ -397,6 +397,7 @@ dependencies = [
"dup-crypto 0.6.0", "dup-crypto 0.6.0",
"durs-common-tools 0.1.0", "durs-common-tools 0.1.0",
"durs-module 0.1.0-a0.1", "durs-module 0.1.0-a0.1",
"envy 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
...@@ -619,6 +620,14 @@ name = "either" ...@@ -619,6 +620,14 @@ name = "either"
version = "1.5.0" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "envy"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"serde 1.0.86 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "failure" name = "failure"
version = "0.1.5" version = "0.1.5"
...@@ -1627,6 +1636,7 @@ dependencies = [ ...@@ -1627,6 +1636,7 @@ dependencies = [
"checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90" "checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90"
"checksum dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "88972de891f6118092b643d85a0b28e0678e0f948d7f879aa32f2d5aafe97d2a" "checksum dirs 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "88972de891f6118092b643d85a0b28e0678e0f948d7f879aa32f2d5aafe97d2a"
"checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0" "checksum either 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3be565ca5c557d7f59e7cfcf1844f9e3033650c929c6566f511e8005f205c1d0"
"checksum envy 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "261b836bcf13f42a01c70351f56bd7b66db6e6fb58352bd214cb77e9269a34b4"
"checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2" "checksum failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "795bd83d3abeb9220f257e597aa0080a508b27533824adf336529648f6abf7e2"
"checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1" "checksum failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea1063915fd7ef4309e222a5a07cf9c319fb9c7836b1f89b85458672dbb127e1"
"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" "checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
......
...@@ -22,5 +22,6 @@ serde = "1.0.*" ...@@ -22,5 +22,6 @@ serde = "1.0.*"
serde_derive = "1.0.*" serde_derive = "1.0.*"
serde_json = "1.0.*" serde_json = "1.0.*"
rpassword = "1.0.0" rpassword = "1.0.0"
envy = "0.4.*"
[features] [features]
...@@ -118,6 +118,20 @@ impl Default for DuRsConfV1 { ...@@ -118,6 +118,20 @@ impl Default for DuRsConfV1 {
} }
} }
#[derive(Debug, Copy, Clone, Deserialize, PartialEq)]
#[serde(field_identifier)]
/// Ressource usage
pub enum ResourceUsageConf { //TODO: Hack the serializer!!!
/// Minimal use of the resource, to the detriment of performance
Minimal,
/// Trade-off between resource use and performance
Medium,
/// A performance-oriented trade-off, the use of the resource is slightly limited
Large,
/// No restrictions on the use of the resource, maximizes performance
Infinite,
}
#[derive(Debug, Copy, Clone, Deserialize, PartialEq, Serialize)] #[derive(Debug, Copy, Clone, Deserialize, PartialEq, Serialize)]
/// Ressource usage /// Ressource usage
pub enum ResourceUsage { pub enum ResourceUsage {
...@@ -156,7 +170,7 @@ impl Default for ResourcesUsage { ...@@ -156,7 +170,7 @@ impl Default for ResourcesUsage {
#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)] #[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
/// Duniter configuration v2 /// Duniter configuration v2
pub struct DuRsConfV2 { pub struct DuRsConfV2 { //TODO: Only for V2, use ARG ENV
/// Currency name /// Currency name
pub currency: CurrencyName, pub currency: CurrencyName,
/// Duniter node unique identifier /// Duniter node unique identifier
...@@ -171,6 +185,32 @@ pub struct DuRsConfV2 { ...@@ -171,6 +185,32 @@ pub struct DuRsConfV2 {
pub enabled: HashSet<ModuleName>, pub enabled: HashSet<ModuleName>,
} }
// TODO: implem from DursConfV2
#[derive(Debug, Clone, Deserialize, PartialEq)]
/// Optional configs loaded by the user (from config file or environment variables)
pub struct DursUserConfV3 {
/// Currency name
pub currency: Option<CurrencyName>,
/// Duniter node unique identifier
pub my_node_id: Option<u32>,
/// Name of the module used by default for synchronization
pub default_sync_module: Option<ModuleName>,
/// Cpu usage
pub cpu_usage: Option<ResourceUsageConf>,
/// Network usage
pub network_usage: Option<ResourceUsageConf>,
/// Memory usage
pub memory_usage: Option<ResourceUsageConf>,
/// Disk space usage
pub disk_space_usage: Option<ResourceUsageConf>,
/// Disabled modules
pub disabled: Option<HashSet<ModuleName>>,
/// Enabled modules
pub enabled: Option<HashSet<ModuleName>>,
/// Config modules in Json
pub modules_conf: Option<ModulesConf>
}
impl Default for DuRsConfV2 { impl Default for DuRsConfV2 {
fn default() -> Self { fn default() -> Self {
DuRsConfV2 { DuRsConfV2 {
...@@ -197,9 +237,21 @@ impl From<DuRsConfV1> for DuRsConfV2 { ...@@ -197,9 +237,21 @@ impl From<DuRsConfV1> for DuRsConfV2 {
} }
} }
#[derive(Clone, Debug, Deserialize)]
/// For the moment use less, check if needed.
pub enum DursUserConf {
///
V3 {
///
global_conf: DursUserConfV3,
///
modules_conf: ModulesConf
}
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
/// Durs node configuration /// Durs node configuration
pub enum DuRsConf { pub enum DuRsConf { //TODO: Duplicate to DursUserConf (versioning)
/// Durs node configuration v1 /// Durs node configuration v1
V1(DuRsConfV1), V1(DuRsConfV1),
/// Durs node configuration v2 /// Durs node configuration v2
...@@ -209,6 +261,7 @@ pub enum DuRsConf { ...@@ -209,6 +261,7 @@ pub enum DuRsConf {
/// Modules configuration /// Modules configuration
modules_conf: ModulesConf, modules_conf: ModulesConf,
}, },
//TODO: Add V3
} }
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
...@@ -253,6 +306,8 @@ impl Default for DuRsConf { ...@@ -253,6 +306,8 @@ impl Default for DuRsConf {
} }
} }
// TODO: Add fn to (UserConfV3 from file , UserConfV3 from ENV) => DursConfV3 (computeRealConf)
impl DursConfTrait for DuRsConf { impl DursConfTrait for DuRsConf {
type GlobalConf = DuRsGlobalConf; type GlobalConf = DuRsGlobalConf;
...@@ -264,6 +319,7 @@ impl DursConfTrait for DuRsConf { ...@@ -264,6 +319,7 @@ impl DursConfTrait for DuRsConf {
} => DuRsGlobalConf::V2(global_conf.clone()), } => DuRsGlobalConf::V2(global_conf.clone()),
} }
} }
//TODO: Don't implem V1 => V3
fn upgrade(self) -> (Self, bool) { fn upgrade(self) -> (Self, bool) {
if let DuRsConf::V1(conf_v1) = self { if let DuRsConf::V1(conf_v1) = self {
let modules_conf = conf_v1.modules.clone(); let modules_conf = conf_v1.modules.clone();
...@@ -499,7 +555,7 @@ pub fn get_profile_path(profiles_path: &Option<PathBuf>, profile_name: &str) -> ...@@ -499,7 +555,7 @@ pub fn get_profile_path(profiles_path: &Option<PathBuf>, profile_name: &str) ->
} }
/// Get keypairs file path /// Get keypairs file path
pub fn keypairs_filepath(profiles_path: &Option<PathBuf>, profile: &str) -> PathBuf { pub fn keypairs_filepath(profiles_path: &Option<PathBuf>, profile: &str) -> PathBuf { //TODO: Is it used???
let profile_path = get_profile_path(profiles_path, profile); let profile_path = get_profile_path(profiles_path, profile);
let mut conf_keys_path = profile_path.clone(); let mut conf_keys_path = profile_path.clone();
conf_keys_path.push(constants::KEYPAIRS_FILENAME); conf_keys_path.push(constants::KEYPAIRS_FILENAME);
...@@ -631,20 +687,47 @@ pub fn load_conf_at_path( ...@@ -631,20 +687,47 @@ pub fn load_conf_at_path(
keypairs keypairs
}; };
// #[derive(Serialize, Deserialize, Debug)]
// struct TestConf {
// name:String
// }
// Open conf file // Open conf file
let mut conf_path = profile_path; let mut conf_path = profile_path;
conf_path.push(constants::CONF_FILENAME); conf_path.push(constants::CONF_FILENAME);
let conf = if conf_path.as_path().exists() { let conf = if conf_path.as_path().exists() {
match File::open(conf_path.as_path()) { match File::open(conf_path.as_path()) {
Ok(mut f) => { Ok(mut f) => {
let mut contents = String::new(); let mut contents = String::new();
f.read_to_string(&mut contents) f.read_to_string(&mut contents)
.map_err(DursConfFileError::ReadError)?; .map_err(DursConfFileError::ReadError)?;
println!("CONF.JSON: \n {}",&contents);
// Parse conf file // Parse conf file
let conf: DuRsConf = let file_conf: DursUserConfV3 =
serde_json::from_str(&contents).map_err(DursConfFileError::ParseError)?; serde_json::from_str(&contents).map_err(DursConfFileError::ParseError)?;
println!("Conf from file: {:?}",file_conf);
let env_conf = envy::from_env::<DursUserConfV3>().unwrap_or_else(|e| {
panic!(dbg!(format!("Fatal error : fail to parse environment variable : {}", e)));
});
println!("Conf from env: {:?}",env_conf);
let conf = generate_from_user_conf(file_conf);
println!("Final conf: {:?}", conf);
// Upgrade conf to latest version // Upgrade conf to latest version
let (conf, upgraded) = conf.upgrade(); let (conf, upgraded) = conf.upgrade();
//TODO: gen ENV conf
//TODO: merge
//Then compute the real conf from both
// If conf is upgraded, rewrite conf file // If conf is upgraded, rewrite conf file
if upgraded { if upgraded {
write_conf_file(conf_path.as_path(), &conf) write_conf_file(conf_path.as_path(), &conf)
...@@ -666,6 +749,10 @@ pub fn load_conf_at_path( ...@@ -666,6 +749,10 @@ pub fn load_conf_at_path(
Ok((conf, keypairs)) Ok((conf, keypairs))
} }
fn generate_from_user_conf(conf:DursUserConfV3) -> DuRsConf {
DuRsConf::default()
}
/// Save keypairs in profile folder /// Save keypairs in profile folder
// Warning: This function cannot use the macro fatal_error! because the logger is not yet initialized, so it must use panic ! // Warning: This function cannot use the macro fatal_error! because the logger is not yet initialized, so it must use panic !
pub fn write_keypairs_file( pub fn write_keypairs_file(
......
...@@ -45,6 +45,7 @@ pub struct DursCoreOptions { ...@@ -45,6 +45,7 @@ pub struct DursCoreOptions {
pub profile_name: Option<String>, pub profile_name: Option<String>,
/// Path where user profiles are persisted /// Path where user profiles are persisted
pub profiles_path: Option<PathBuf>, pub profiles_path: Option<PathBuf>,
//TODO: add env prefix
} }
/// Durs executable command /// Durs executable command
......
...@@ -56,6 +56,7 @@ use std::path::PathBuf; ...@@ -56,6 +56,7 @@ use std::path::PathBuf;
use std::sync::mpsc; use std::sync::mpsc;
use std::thread; use std::thread;
use unwrap::unwrap; use unwrap::unwrap;
use std::process::exit;
#[macro_export] #[macro_export]
/// Plug modules in durs core /// Plug modules in durs core
...@@ -238,6 +239,7 @@ impl DursCore<DuRsConf> { ...@@ -238,6 +239,7 @@ impl DursCore<DuRsConf> {
.map_err(DursCoreError::ConfFileError)?; .map_err(DursCoreError::ConfFileError)?;
info!("Success to load global conf."); info!("Success to load global conf.");
exit(42);
// Instanciate durs core // Instanciate durs core
Ok(DursCore { Ok(DursCore {
keypairs, keypairs,
...@@ -523,6 +525,7 @@ pub fn get_module_conf<M: DursModule<DuRsConf, DursMsg>>( ...@@ -523,6 +525,7 @@ pub fn get_module_conf<M: DursModule<DuRsConf, DursMsg>>(
if let Some(module_conf_json) = module_conf_json { if let Some(module_conf_json) = module_conf_json {
let module_user_conf: Option<M::ModuleUserConf> = let module_user_conf: Option<M::ModuleUserConf> =
serde_json::from_str(module_conf_json.to_string().as_str())?; serde_json::from_str(module_conf_json.to_string().as_str())?;
//TODO: Call fn merge of M::ModuleUserConf
M::generate_module_conf(global_conf, module_user_conf) M::generate_module_conf(global_conf, module_user_conf)
} else { } else {
M::generate_module_conf(global_conf, None) M::generate_module_conf(global_conf, None)
......
...@@ -400,7 +400,7 @@ pub trait DursModule<DC: DursConfTrait, M: ModuleMessage> { ...@@ -400,7 +400,7 @@ pub trait DursModule<DC: DursConfTrait, M: ModuleMessage> {
+ Debug + Debug
+ Default + Default
+ DeserializeOwned + DeserializeOwned
+ Merge + Merge //Note: Added trait Merge
+ Send + Send
+ Serialize + Serialize
+ Sync; + Sync;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment