Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 184-gva-rename-commontime-field-to-blockchaintime
  • Kiss/XXX-personal-difficulty
  • dev
  • dvermd/200-keypairs-dewif
  • elois/191-sled
  • elois/195
  • elois/195-bcdbwriteop
  • elois/deps-crypto
  • elois/exemple-gva-global-context
  • elois/gva-monetary-mass
  • elois/kv-parts-db
  • elois/use-rule-engine-example
  • elois/wot
  • elois/ws2pv2
  • hugo/151-ws2pv2-sync
  • jawaka/155-dbex-add-dump-fork-tree-command
  • ji_emme/181-gva-implement-identity-request
  • ji_emme/182-gva-implement-block-meta-data
  • ji_emme/89-implement-client-api-gva-graphql-verification-api
  • ji_emme/gva-humantimefield
  • ji_emme/rml14
  • jonas/141-durs-core-load-conf-from-environment-variables-as-a-priority
  • jonas/dev-gva
  • jonas/wip
  • logo
  • release/0.2
  • test-juniper-from-schema
  • tp/personal-diffi
  • tuxmain/84-add-block-checking-checking-all-rules-of-the-unit-protocol
  • vainamoinen197-transactiondocument-replace-vec-fields-by-smallvec-2
  • vindarel/feat/add-dbex-human-option
  • 0.1.0-a0.1
  • crypto/v0.1.0
  • crypto/v0.1.1
  • crypto/v0.1.2
  • crypto/v0.3.0-b1
  • crypto/v0.3.0-b2
  • crypto/v0.3.0-b3
  • crypto/v0.4.0-b1
  • documents/v0.1.1
  • documents/v0.10.0-b1
  • documents/v0.7.0
  • documents/v0.7.1
  • keys/v0.1.0
  • keys/v0.2.0
  • keys/v0.3.0
  • keys/v0.3.1-deprecated
  • protocol/v0.2.0
  • protocol/v0.3.0
  • protocol/v0.4.0
  • protocol/v0.4.1
  • v0.0.1
  • v0.0.1-a0.1
  • v0.0.1-a0.10
  • v0.0.1-a0.11
  • v0.0.1-a0.12
  • v0.0.1-a0.2
  • v0.0.1-a0.3
  • v0.0.1-a0.4
  • v0.0.1-a0.5
  • v0.0.1-a0.6
  • v0.0.1-a0.7
  • v0.0.1-a0.8
  • v0.0.1-a0.9
  • v0.1.1-a1
  • v0.2.0-a
  • v0.2.0-a2
  • v0.2.0-a4
  • wot/v0.8.0-a0.8
  • wot/v0.8.0-a0.9
  • wotb/0.7.0
  • wotb/0.7.1
  • wotb/v0.4.0
  • wotb/v0.4.1
  • wotb/v0.5.0
  • wotb/v0.6.0
  • wotb/v0.6.1
  • wotb/v0.8.0-a0.2
  • wotb/v0.8.0-a0.3
  • wotb/v0.8.0-a0.4
  • wotb/v0.8.0-a0.5
81 results

Target

Select target project
  • librelois/duniter-rs
  • ji_emme/duniter-rs
  • vindarel/duniter-rs
  • Hiroty1er/duniter-rs
  • dvermd/duniter-rs
  • 666titi999/duniter-rs
6 results
Select Git revision
  • 184-gva-rename-commontime-field-to-blockchaintime
  • Kiss/XXX-personal-difficulty
  • dev
  • dvermd/200-keypairs-dewif
  • elois/191-sled
  • elois/195
  • elois/195-bcdbwriteop
  • elois/deps-crypto
  • elois/exemple-gva-global-context
  • elois/gva-monetary-mass
  • elois/kv-parts-db
  • elois/use-rule-engine-example
  • elois/wot
  • elois/ws2pv2
  • hugo/151-ws2pv2-sync
  • jawaka/155-dbex-add-dump-fork-tree-command
  • ji_emme/181-gva-implement-identity-request
  • ji_emme/182-gva-implement-block-meta-data
  • ji_emme/89-implement-client-api-gva-graphql-verification-api
  • ji_emme/gva-humantimefield
  • ji_emme/rml14
  • jonas/141-durs-core-load-conf-from-environment-variables-as-a-priority
  • jonas/dev-gva
  • jonas/wip
  • logo
  • release/0.2
  • test-juniper-from-schema
  • tp/personal-diffi
  • tuxmain/84-add-block-checking-checking-all-rules-of-the-unit-protocol
  • vainamoinen197-transactiondocument-replace-vec-fields-by-smallvec-2
  • vindarel/feat/add-dbex-human-option
  • 0.1.0-a0.1
  • crypto/v0.1.0
  • crypto/v0.1.1
  • crypto/v0.1.2
  • crypto/v0.3.0-b1
  • crypto/v0.3.0-b2
  • crypto/v0.3.0-b3
  • crypto/v0.4.0-b1
  • documents/v0.1.1
  • documents/v0.10.0-b1
  • documents/v0.7.0
  • documents/v0.7.1
  • keys/v0.1.0
  • keys/v0.2.0
  • keys/v0.3.0
  • keys/v0.3.1-deprecated
  • protocol/v0.2.0
  • protocol/v0.3.0
  • protocol/v0.4.0
  • protocol/v0.4.1
  • v0.0.1
  • v0.0.1-a0.1
  • v0.0.1-a0.10
  • v0.0.1-a0.11
  • v0.0.1-a0.12
  • v0.0.1-a0.2
  • v0.0.1-a0.3
  • v0.0.1-a0.4
  • v0.0.1-a0.5
  • v0.0.1-a0.6
  • v0.0.1-a0.7
  • v0.0.1-a0.8
  • v0.0.1-a0.9
  • v0.1.1-a1
  • v0.2.0-a
  • v0.2.0-a2
  • v0.2.0-a4
  • wot/v0.8.0-a0.8
  • wot/v0.8.0-a0.9
  • wotb/0.7.0
  • wotb/0.7.1
  • wotb/v0.4.0
  • wotb/v0.4.1
  • wotb/v0.5.0
  • wotb/v0.6.0
  • wotb/v0.6.1
  • wotb/v0.8.0-a0.2
  • wotb/v0.8.0-a0.3
  • wotb/v0.8.0-a0.4
  • wotb/v0.8.0-a0.5
81 results
Show changes
Commits on Source (1)
......@@ -397,6 +397,7 @@ dependencies = [
"dup-crypto 0.6.0",
"durs-common-tools 0.1.0",
"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)",
"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)",
......@@ -619,6 +620,14 @@ name = "either"
version = "1.5.0"
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]]
name = "failure"
version = "0.1.5"
......@@ -1627,6 +1636,7 @@ dependencies = [
"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 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_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"
......
......@@ -22,5 +22,6 @@ serde = "1.0.*"
serde_derive = "1.0.*"
serde_json = "1.0.*"
rpassword = "1.0.0"
envy = "0.4.*"
[features]
......@@ -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)]
/// Ressource usage
pub enum ResourceUsage {
......@@ -156,7 +170,7 @@ impl Default for ResourcesUsage {
#[derive(Debug, Clone, Deserialize, PartialEq, Serialize)]
/// Duniter configuration v2
pub struct DuRsConfV2 {
pub struct DuRsConfV2 { //TODO: Only for V2, use ARG ENV
/// Currency name
pub currency: CurrencyName,
/// Duniter node unique identifier
......@@ -171,6 +185,32 @@ pub struct DuRsConfV2 {
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 {
fn default() -> Self {
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)]
/// Durs node configuration
pub enum DuRsConf {
pub enum DuRsConf { //TODO: Duplicate to DursUserConf (versioning)
/// Durs node configuration v1
V1(DuRsConfV1),
/// Durs node configuration v2
......@@ -209,6 +261,7 @@ pub enum DuRsConf {
/// Modules configuration
modules_conf: ModulesConf,
},
//TODO: Add V3
}
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
......@@ -253,6 +306,8 @@ impl Default for DuRsConf {
}
}
// TODO: Add fn to (UserConfV3 from file , UserConfV3 from ENV) => DursConfV3 (computeRealConf)
impl DursConfTrait for DuRsConf {
type GlobalConf = DuRsGlobalConf;
......@@ -264,6 +319,7 @@ impl DursConfTrait for DuRsConf {
} => DuRsGlobalConf::V2(global_conf.clone()),
}
}
//TODO: Don't implem V1 => V3
fn upgrade(self) -> (Self, bool) {
if let DuRsConf::V1(conf_v1) = self {
let modules_conf = conf_v1.modules.clone();
......@@ -499,7 +555,7 @@ pub fn get_profile_path(profiles_path: &Option<PathBuf>, profile_name: &str) ->
}
/// 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 mut conf_keys_path = profile_path.clone();
conf_keys_path.push(constants::KEYPAIRS_FILENAME);
......@@ -631,20 +687,47 @@ pub fn load_conf_at_path(
keypairs
};
// #[derive(Serialize, Deserialize, Debug)]
// struct TestConf {
// name:String
// }
// Open conf file
let mut conf_path = profile_path;
conf_path.push(constants::CONF_FILENAME);
let conf = if conf_path.as_path().exists() {
match File::open(conf_path.as_path()) {
Ok(mut f) => {
let mut contents = String::new();
f.read_to_string(&mut contents)
.map_err(DursConfFileError::ReadError)?;
println!("CONF.JSON: \n {}",&contents);
// Parse conf file
let conf: DuRsConf =
let file_conf: DursUserConfV3 =
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
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 upgraded {
write_conf_file(conf_path.as_path(), &conf)
......@@ -666,6 +749,10 @@ pub fn load_conf_at_path(
Ok((conf, keypairs))
}
fn generate_from_user_conf(conf:DursUserConfV3) -> DuRsConf {
DuRsConf::default()
}
/// 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 !
pub fn write_keypairs_file(
......
......@@ -45,6 +45,7 @@ pub struct DursCoreOptions {
pub profile_name: Option<String>,
/// Path where user profiles are persisted
pub profiles_path: Option<PathBuf>,
//TODO: add env prefix
}
/// Durs executable command
......
......@@ -56,6 +56,7 @@ use std::path::PathBuf;
use std::sync::mpsc;
use std::thread;
use unwrap::unwrap;
use std::process::exit;
#[macro_export]
/// Plug modules in durs core
......@@ -238,6 +239,7 @@ impl DursCore<DuRsConf> {
.map_err(DursCoreError::ConfFileError)?;
info!("Success to load global conf.");
exit(42);
// Instanciate durs core
Ok(DursCore {
keypairs,
......@@ -523,6 +525,7 @@ pub fn get_module_conf<M: DursModule<DuRsConf, DursMsg>>(
if let Some(module_conf_json) = module_conf_json {
let module_user_conf: Option<M::ModuleUserConf> =
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)
} else {
M::generate_module_conf(global_conf, None)
......
......@@ -400,7 +400,7 @@ pub trait DursModule<DC: DursConfTrait, M: ModuleMessage> {
+ Debug
+ Default
+ DeserializeOwned
+ Merge
+ Merge //Note: Added trait Merge
+ Send
+ Serialize
+ Sync;
......