From 1080ad5ac1ea531248392ed03ecba77f77044f97 Mon Sep 17 00:00:00 2001 From: Jedrzej Stuczynski Date: Tue, 4 Feb 2020 15:08:13 +0000 Subject: [PATCH] Two debug directory servers - presence and metrics --- mixnode/src/commands/run.rs | 10 ++++++- mixnode/src/config/mod.rs | 54 ++++++++++++++++++++++++------------- mixnode/src/node/mod.rs | 12 ++++----- 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/mixnode/src/commands/run.rs b/mixnode/src/commands/run.rs index c026bb4e65..c00033a61a 100644 --- a/mixnode/src/commands/run.rs +++ b/mixnode/src/commands/run.rs @@ -93,7 +93,15 @@ pub fn execute(matches: &ArgMatches) { show_binding_warning(listening_ip_string); } - println!("Directory server: {}", config.get_directory_server()); + println!( + "Directory server [presence]: {}", + config.get_presence_directory_server() + ); + println!( + "Directory server [metrics]: {}", + config.get_metrics_directory_server() + ); + println!( "Listening for incoming packets on {}", config.get_listening_address() diff --git a/mixnode/src/config/mod.rs b/mixnode/src/config/mod.rs index 135551f7a7..16974def01 100644 --- a/mixnode/src/config/mod.rs +++ b/mixnode/src/config/mod.rs @@ -83,8 +83,12 @@ impl Config { self } + // if you want to use distinct servers for metrics and presence + // you need to do so in the config.toml file. pub fn with_custom_directory>(mut self, directory_server: S) -> Self { - self.mixnode.directory_server = directory_server.into(); + let directory_server_string = directory_server.into(); + self.debug.presence_directory_server = directory_server_string.clone(); + self.debug.metrics_directory_server = directory_server_string; self } @@ -171,8 +175,15 @@ impl Config { self.mixnode.public_sphinx_key_file.clone() } - pub fn get_directory_server(&self) -> String { - self.mixnode.directory_server.clone() + pub fn get_presence_directory_server(&self) -> String { + self.debug.presence_directory_server.clone() + } + + + pub fn get_metrics_directory_server(&self) -> String { + self.debug.metrics_directory_server.clone() + } + } pub fn get_layer(&self) -> u64 { @@ -194,9 +205,6 @@ pub struct MixNode { /// ID specifies the human readable ID of this particular mixnode. id: String, - /// URL to the directory server. - directory_server: String, - /// Layer of this particular mixnode determining its position in the network. layer: u64, @@ -223,15 +231,6 @@ pub struct MixNode { } impl MixNode { - fn default_directory_server() -> String { - #[cfg(feature = "qa")] - return "https://qa-directory.nymtech.net".to_string(); - #[cfg(feature = "local")] - return "http://localhost:8080".to_string(); - - "https://directory.nymtech.net".to_string() - } - fn default_private_sphinx_key_file(id: &str) -> PathBuf { Config::default_data_directory(Some(id)).join("private_sphinx.pem") } @@ -245,7 +244,6 @@ impl Default for MixNode { fn default() -> Self { MixNode { id: "".to_string(), - directory_server: Self::default_directory_server(), layer: 0, listening_address: format!("0.0.0.0:{}", DEFAULT_LISTENING_PORT) .parse() @@ -270,11 +268,31 @@ impl Default for Logging { #[derive(Debug, Deserialize, PartialEq, Serialize)] #[serde(deny_unknown_fields)] -pub struct Debug {} +pub struct Debug { + // The idea of additional 'directory servers' is to let mixes report their presence + // and metrics to separate places + /// Directory server to which the server will be reporting their presence data. + presence_directory_server: String, + + /// Directory server to which the server will be reporting their metrics data. + metrics_directory_server: String, + +impl Debug { + fn default_directory_server() -> String { + #[cfg(feature = "qa")] + return "https://qa-directory.nymtech.net".to_string(); + #[cfg(feature = "local")] + return "http://localhost:8080".to_string(); + + "https://directory.nymtech.net".to_string() + } +} impl Default for Debug { fn default() -> Self { - Debug {} + Debug { + presence_directory_server: Self::default_directory_server(), + metrics_directory_server: Self::default_directory_server(), } } diff --git a/mixnode/src/node/mod.rs b/mixnode/src/node/mod.rs index 1eaa2e8d37..60a7c5e4f5 100644 --- a/mixnode/src/node/mod.rs +++ b/mixnode/src/node/mod.rs @@ -235,11 +235,6 @@ impl MixNode { } pub fn start(&self) -> Result<(), Box> { - // Set up config and public key for this node - let directory_cfg = directory_client::Config { - base_url: self.config.get_directory_server(), - }; - // Set up channels let (received_tx, received_rx) = mpsc::channel(1024); let (sent_tx, sent_rx) = mpsc::channel(1024); @@ -249,7 +244,7 @@ impl MixNode { // Spawn Tokio tasks as necessary for node functionality let notifier_config = presence::NotifierConfig::new( - self.config.get_directory_server(), + self.config.get_presence_directory_server(), self.config.get_announce_address(), self.sphinx_keypair.public_key().to_base58_string(), self.config.get_layer(), @@ -268,6 +263,11 @@ impl MixNode { metrics.clone(), sent_rx, )); + + let directory_cfg = directory_client::Config { + base_url: self.config.get_metrics_directory_server(), + }; + rt.spawn(MetricsReporter::run_metrics_sender( metrics, directory_cfg,