From 52e9e49d89aedffdb948bd278ad0700646a5929e Mon Sep 17 00:00:00 2001 From: jstuczyn Date: Wed, 4 Nov 2020 11:14:10 +0000 Subject: [PATCH 1/4] Network monitor loading 'good' topology from files instead --- Cargo.lock | 3 + network-monitor/Cargo.toml | 3 + network-monitor/src/main.rs | 73 +++-- .../src/tested_network/good_topology.rs | 251 +----------------- network-monitor/src/tested_network/mod.rs | 16 +- 5 files changed, 83 insertions(+), 263 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d2f4f235cee..7281a6559f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1478,7 +1478,9 @@ dependencies = [ name = "network-monitor" version = "0.9.0-dev" dependencies = [ + "clap", "crypto", + "dotenv", "futures 0.3.5", "gateway-client", "log", @@ -1486,6 +1488,7 @@ dependencies = [ "pretty_env_logger", "rand", "serde", + "serde_json", "tokio", "topology", "validator-client", diff --git a/network-monitor/Cargo.toml b/network-monitor/Cargo.toml index 6d1c19e9eaa..3d1284ed2b3 100644 --- a/network-monitor/Cargo.toml +++ b/network-monitor/Cargo.toml @@ -7,11 +7,14 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +clap = "2.33.0" +dotenv = "0.15.0" futures = "0.3" log = "0.4" pretty_env_logger = "0.3" rand = "0.7" serde = "1.0" +serde_json = "1.0" tokio = { version = "0.2", features = ["signal", "rt-threaded", "macros"] } ## internal diff --git a/network-monitor/src/main.rs b/network-monitor/src/main.rs index c24f1bb74da..4f9e72abd30 100644 --- a/network-monitor/src/main.rs +++ b/network-monitor/src/main.rs @@ -14,10 +14,13 @@ use crate::monitor::MixnetReceiver; use crate::run_info::{TestRunUpdateReceiver, TestRunUpdateSender}; -use crate::tested_network::{good_topology, TestedNetwork}; +use crate::tested_network::good_topology::parse_topology_file; +use crate::tested_network::TestedNetwork; +use clap::{App, Arg, ArgMatches}; use crypto::asymmetric::{encryption, identity}; use futures::channel::mpsc; use gateway_client::GatewayClient; +use log::*; use monitor::{AckSender, MixnetSender, Monitor}; use notifications::Notifier; use nymsphinx::addressing::clients::Recipient; @@ -25,7 +28,7 @@ use packet_sender::PacketSender; use rand::rngs::OsRng; use std::sync::Arc; use std::time; -use topology::gateway; +use topology::{gateway, NymTopology}; mod chunker; mod monitor; @@ -38,6 +41,9 @@ mod tested_network; pub(crate) type DefRng = OsRng; pub(crate) const DEFAULT_RNG: DefRng = OsRng; +const V4_TOPOLOGY_ARG: &str = "v4-topology-filepath"; +const V6_TOPOLOGY_ARG: &str = "v6-topology-filepath"; + // CHANGE THIS TO GET COMPLETE LIST OF WHICH NODE IS WORKING OR BROKEN IN PARTICULAR WAY // || // \/ @@ -46,18 +52,48 @@ pub const PRINT_DETAILED_REPORT: bool = false; // || // CHANGE THIS TO GET COMPLETE LIST OF WHICH NODE IS WORKING OR BROKEN IN PARTICULAR WAY +fn parse_args<'a>() -> ArgMatches<'a> { + App::new("Nym Network Monitor") + .author("Nymtech") + .arg( + Arg::with_name(V4_TOPOLOGY_ARG) + .help("location of .json file containing IPv4 'good' network topology") + .takes_value(true) + .required(true), + ) + .arg( + Arg::with_name(V6_TOPOLOGY_ARG) + .help("location of .json file containing IPv6 'good' network topology") + .takes_value(true) + .required(true), + ) + .get_matches() +} + #[tokio::main] async fn main() { println!("Network monitor starting..."); - check_if_up_to_date(); + dotenv::dotenv().ok(); + let matches = parse_args(); + let v4_topology_path = matches.value_of(V4_TOPOLOGY_ARG).unwrap(); + let v6_topology_path = matches.value_of(V6_TOPOLOGY_ARG).unwrap(); + + let v4_topology = parse_topology_file(v4_topology_path); + let v6_topology = parse_topology_file(v6_topology_path); + + check_if_up_to_date(&v4_topology, &v6_topology); setup_logging(); - // Set up topology let validator_rest_uri = "https://qa-directory.nymtech.net"; println!("* validator server: {}", validator_rest_uri); + // TODO: THIS MUST BE UPDATED!! + // TODO: THIS MUST BE UPDATED!! + // TODO: THIS MUST BE UPDATED!! + warn!("using v4 gateway for both topologies!"); + let gateway = v4_topology.gateways()[0].clone(); + // TODO: this might change if it turns out we need both v4 and v6 gateway clients - let gateway = tested_network::v4_gateway(); println!("* gateway: {}", gateway.identity_key.to_base58_string()); // Channels for task communication @@ -89,7 +125,7 @@ async fn main() { ); let gateway_client = new_gateway_client(gateway, identity_keypair, ack_sender, mixnet_sender); - let tested_network = new_tested_network(gateway_client).await; + let tested_network = new_tested_network(gateway_client, v4_topology, v6_topology).await; let packet_sender = new_packet_sender( validator_client, @@ -101,9 +137,14 @@ async fn main() { network_monitor.run(notifier, packet_sender).await; } -async fn new_tested_network(gateway_client: GatewayClient) -> TestedNetwork { +async fn new_tested_network( + gateway_client: GatewayClient, + good_v4_topology: NymTopology, + good_v6_topology: NymTopology, +) -> TestedNetwork { // TODO: possibly change that if it turns out we need two clients (v4 and v6) - let mut tested_network = TestedNetwork::new_good(gateway_client); + let mut tested_network = + TestedNetwork::new_good(gateway_client, good_v4_topology, good_v6_topology); tested_network.start_gateway_client().await; tested_network } @@ -183,11 +224,10 @@ fn setup_logging() { .init(); } -fn check_if_up_to_date() { +fn check_if_up_to_date(v4_topology: &NymTopology, v6_topology: &NymTopology) { let monitor_version = env!("CARGO_PKG_VERSION"); - let good_v4_topology = good_topology::new_v4(); - for (_, layer_mixes) in good_v4_topology.mixes().into_iter() { - for mix in layer_mixes.into_iter() { + for (_, layer_mixes) in v4_topology.mixes().iter() { + for mix in layer_mixes.iter() { if !version_checker::is_minor_version_compatible(monitor_version, &*mix.version) { panic!( "Our good topology is not compatible with monitor! Mix runs {}, we have {}", @@ -197,7 +237,7 @@ fn check_if_up_to_date() { } } - for gateway in good_v4_topology.gateways().into_iter() { + for gateway in v4_topology.gateways().iter() { if !version_checker::is_minor_version_compatible(monitor_version, &*gateway.version) { panic!( "Our good topology is not compatible with monitor! Gateway runs {}, we have {}", @@ -206,9 +246,8 @@ fn check_if_up_to_date() { } } - let good_v6_topology = good_topology::new_v6(); - for (_, layer_mixes) in good_v6_topology.mixes().into_iter() { - for mix in layer_mixes.into_iter() { + for (_, layer_mixes) in v6_topology.mixes().iter() { + for mix in layer_mixes.iter() { if !version_checker::is_minor_version_compatible(monitor_version, &*mix.version) { panic!( "Our good topology is not compatible with monitor! Mix runs {}, we have {}", @@ -218,7 +257,7 @@ fn check_if_up_to_date() { } } - for gateway in good_v6_topology.gateways().into_iter() { + for gateway in v6_topology.gateways().iter() { if !version_checker::is_minor_version_compatible(monitor_version, &*gateway.version) { panic!( "Our good topology is not compatible with monitor! Gateway runs {}, we have {}", diff --git a/network-monitor/src/tested_network/good_topology.rs b/network-monitor/src/tested_network/good_topology.rs index 462bd715835..bcbcb44f823 100644 --- a/network-monitor/src/tested_network/good_topology.rs +++ b/network-monitor/src/tested_network/good_topology.rs @@ -12,245 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -use crypto::asymmetric::{ - encryption::{self, PublicKey}, - identity, -}; -use std::collections::HashMap; -use topology::{gateway, mix, NymTopology}; +use std::fs; +use topology::NymTopology; +use validator_client::models::topology::Topology; -pub(crate) fn v4_mixnodes() -> Vec { - todo!("this needs to be updated during 0.9.0 release when we deploy our 0.9.0 nodes"); - - let goodnode1 = mix::Node { - location: "London".to_string(), - host: "213.52.129.218:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string("TODO").unwrap(), - sphinx_key: encryption::PublicKey::from_base58_string( - "EJHwrLafqygqctkBCntVZfUkMSDErGUStJjZniQoRoJr", - ) - .unwrap(), - registration_time: 1600276206950298819, - layer: 1, - version: "0.9.0".to_string(), - reputation: 100, - }; - - let goodnode2 = mix::Node { - location: "Frankfurt".to_string(), - host: "172.104.244.117:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string("TODO").unwrap(), - sphinx_key: PublicKey::from_base58_string("BW7xskYvZyHt8rGFzsmG5bEQ9ViCYYxpFsEWDcNtSYvX") - .unwrap(), - registration_time: 1600276206950298819, - layer: 2, - version: "0.9.0".to_string(), - reputation: 100, - }; - - let goodnode3 = mix::Node { - location: "London".to_string(), - host: "178.79.136.231:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string("TODO").unwrap(), - sphinx_key: PublicKey::from_base58_string("BqBGpP4YDH5fRDVKB97Ru7aq2Wbarb3SNfZL5LGaH83e") - .unwrap(), - layer: 3, - registration_time: 1600276206950298819, - version: "0.9.0".to_string(), - reputation: 100, - }; - - vec![goodnode1, goodnode2, goodnode3] -} - -pub(crate) fn v6_mixnodes() -> Vec { - todo!("this needs to be updated during 0.9.0 release when we deploy our 0.9.0 nodes"); - - let goodnode1 = mix::Node { - location: "London".to_string(), - host: "[2a01:7e00::f03c:92ff:fe16:3dc2]:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string("TODO").unwrap(), - sphinx_key: encryption::PublicKey::from_base58_string( - "EJHwrLafqygqctkBCntVZfUkMSDErGUStJjZniQoRoJr", - ) - .unwrap(), - registration_time: 1600276206950298819, - layer: 1, - version: "0.9.0".to_string(), - reputation: 100, - }; - - let goodnode2 = mix::Node { - location: "Frankfurt".to_string(), - host: "[2a01:7e01::f03c:92ff:fe16:3d11]:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string("TODO").unwrap(), - sphinx_key: PublicKey::from_base58_string("BW7xskYvZyHt8rGFzsmG5bEQ9ViCYYxpFsEWDcNtSYvX") - .unwrap(), - registration_time: 1600276206950298819, - layer: 2, - version: "0.9.0".to_string(), - reputation: 100, - }; - - let goodnode3 = mix::Node { - location: "London".to_string(), - host: "[2a01:7e00::f03c:92ff:fe16:3d7b]:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string("TODO").unwrap(), - sphinx_key: PublicKey::from_base58_string("BqBGpP4YDH5fRDVKB97Ru7aq2Wbarb3SNfZL5LGaH83e") - .unwrap(), - layer: 3, - registration_time: 1600276206950298819, - version: "0.9.0".to_string(), - reputation: 100, - }; - - vec![goodnode1, goodnode2, goodnode3] -} - -pub(crate) fn v4_gateway() -> gateway::Node { - gateway::Node { - location: "unknown".to_string(), - client_listener: "ws://139.162.246.48:9000".to_string(), - mixnet_listener: "139.162.246.48:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string( - "D6YaMzLSY7mANtSQRKXsmMZpqgqiVkeiagKM4V4oFPFr", - ) - .unwrap(), - sphinx_key: encryption::PublicKey::from_base58_string( - "6snGVMCatcTnvjGPaf8Ye7kCnVn6ThEDdCs4TZ7DbDVj", - ) - .unwrap(), - registration_time: 1600424297774836793, - version: "0.9.0".to_string(), - reputation: 100, +pub(crate) fn parse_topology_file(file_path: &str) -> NymTopology { + let file_content = + fs::read_to_string(file_path).expect("specified topology file does not exist"); + let validator_topology = serde_json::from_str::(&file_content) + .expect("topology in specified file is malformed"); + let nym_topology: NymTopology = validator_topology.into(); + if nym_topology.mixes().len() != 3 { + panic!("topology has different than 3 number of layers") } -} - -pub(crate) fn v6_gateway() -> gateway::Node { - gateway::Node { - location: "unknown".to_string(), - client_listener: "ws://[2a01:7e00::f03c:92ff:fe16:49f1]:9000".to_string(), - mixnet_listener: "[2a01:7e00::f03c:92ff:fe16:49f1]:1789".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string( - "D6YaMzLSY7mANtSQRKXsmMZpqgqiVkeiagKM4V4oFPFr", - ) - .unwrap(), - sphinx_key: encryption::PublicKey::from_base58_string( - "6snGVMCatcTnvjGPaf8Ye7kCnVn6ThEDdCs4TZ7DbDVj", - ) - .unwrap(), - registration_time: 1600424297774836793, - version: "0.9.0".to_string(), - reputation: 100, + if nym_topology.gateways().is_empty() { + panic!("topology does not include a gateway") } -} -/// Returns a new ipv4 NymTopology composed of known good nodes -pub(crate) fn new_v4() -> NymTopology { - let mut layered_mixes = HashMap::new(); - - for (i, node) in v4_mixnodes().into_iter().enumerate() { - layered_mixes.insert((i + 1) as u8, vec![node]); - } - - NymTopology::new(layered_mixes, vec![v4_gateway()]) -} - -/// Returns a new ipv6 NymTopology composed of known good nodes -pub(crate) fn new_v6() -> NymTopology { - let mut layered_mixes = HashMap::new(); - - for (i, node) in v6_mixnodes().into_iter().enumerate() { - layered_mixes.insert((i + 1) as u8, vec![node]); - } - - NymTopology::new(layered_mixes, vec![v6_gateway()]) -} - -#[cfg(test)] -mod good_topology_test { - use super::*; - - // Returns a new topology of known good nodes, with one good node replaced with a test node - fn new_v4_with_node(test_node: mix::Node) -> NymTopology { - let mut topology = self::new_v4(); - topology.set_mixes_in_layer(test_node.layer as u8, vec![test_node]); - topology - } - - mod subbing_in_a_node_to_test { - use super::*; - - #[test] - fn returns_good_topology_with_test_node_in_desired_layer() { - return; - todo!("this needs to be updated during 0.9.0 release when we deploy our 0.9.0 nodes"); - - let topology = expected_topology_with_test_node(); - let expected_gateway_key = topology.gateways().first().unwrap().identity_key; - let expected_layer_1_mixnode_pubkey = topology.mixes_in_layer(1)[0] - .identity_key - .to_base58_string(); - let expected_layer_2_mixnode_pubkey = topology.mixes_in_layer(2)[0] - .identity_key - .to_base58_string(); - let expected_layer_3_mixnode_pubkey = topology.mixes_in_layer(3)[0] - .identity_key - .to_base58_string(); - let result = new_v4_with_node(test_node()); - let actual_gateway_key = result.gateways().first().unwrap().identity_key; - let actual_layer_1_mixnode_pubkey = - result.mixes_in_layer(1)[0].identity_key.to_base58_string(); - let actual_layer_2_mixnode_pubkey = - result.mixes_in_layer(2)[0].identity_key.to_base58_string(); - let actual_layer_3_mixnode_pubkey = - result.mixes_in_layer(3)[0].identity_key.to_base58_string(); - - assert_eq!(expected_gateway_key, actual_gateway_key); - assert_eq!( - expected_layer_1_mixnode_pubkey, - actual_layer_1_mixnode_pubkey - ); - assert_eq!( - expected_layer_2_mixnode_pubkey, - actual_layer_2_mixnode_pubkey - ); - assert_eq!( - expected_layer_3_mixnode_pubkey, - actual_layer_3_mixnode_pubkey - ); - } - } - - fn expected_topology_with_test_node() -> NymTopology { - let mut mixes = HashMap::new(); - let mixnodes = v4_mixnodes(); - let mix1 = test_node(); // this is the one we will test - let mix2 = mixnodes[1].clone(); - let mix3 = mixnodes[2].clone(); - - mixes.insert(1, vec![mix1]); - mixes.insert(2, vec![mix2]); - mixes.insert(3, vec![mix3]); - NymTopology::new(mixes, vec![v4_gateway()]) - } - - fn test_node() -> mix::Node { - mix::Node { - location: "Thunder Bay".to_string(), - host: "1.2.3.4:1234".parse().unwrap(), - identity_key: identity::PublicKey::from_base58_string( - "3ebjp1Fb9hdcS1AR6AZihgeJiMHkB5jjJUsvqNnfQwU7", - ) - .unwrap(), - sphinx_key: encryption::PublicKey::from_base58_string( - "9fX1rMaQdBEzjuv6kT7oyPfEabt73QTM5cfuQ9kaxrRQ", - ) - .unwrap(), - layer: 1, - registration_time: 1234, - version: "0.9.0".to_string(), - reputation: 42, - } - } + nym_topology } diff --git a/network-monitor/src/tested_network/mod.rs b/network-monitor/src/tested_network/mod.rs index b434b37da07..1ac4489e62c 100644 --- a/network-monitor/src/tested_network/mod.rs +++ b/network-monitor/src/tested_network/mod.rs @@ -16,7 +16,7 @@ use crate::test_packet::{IpVersion, TestPacket}; use gateway_client::error::GatewayClientError; use gateway_client::GatewayClient; use nymsphinx::forwarding::packet::MixPacket; -use topology::{gateway, mix, NymTopology}; +use topology::{mix, NymTopology}; pub(crate) mod good_topology; @@ -42,19 +42,17 @@ pub(crate) struct TestedNetwork { good_v6_topology: NymTopology, } -pub(crate) fn v4_gateway() -> gateway::Node { - good_topology::v4_gateway() -} - impl TestedNetwork { - pub(crate) fn new_good(gateway_client: GatewayClient) -> Self { - let good_v4_topology = good_topology::new_v4(); - + pub(crate) fn new_good( + gateway_client: GatewayClient, + good_v4_topology: NymTopology, + good_v6_topology: NymTopology, + ) -> Self { TestedNetwork { system_version: good_v4_topology.mixes()[&1][0].version.clone(), gateway_client, good_v4_topology, - good_v6_topology: good_topology::new_v6(), + good_v6_topology, } } From 61181c17936881e58bc0dc881fe807d43bed2e60 Mon Sep 17 00:00:00 2001 From: jstuczyn Date: Wed, 4 Nov 2020 11:54:48 +0000 Subject: [PATCH 2/4] Update .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 46759872637..be497f52ea5 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,7 @@ scripts/run_mix.sh scripts/start_local_tmux_network.sh /.floo /.flooignore +qa-v4-topology.json +qa-v6-topology.json +v4-topology.json +v6-topology.json \ No newline at end of file From 884abfd5aadf8caed5b91c8662ec21136938d049 Mon Sep 17 00:00:00 2001 From: jstuczyn Date: Wed, 4 Nov 2020 12:16:37 +0000 Subject: [PATCH 3/4] Passing address of validator as an argument --- network-monitor/src/main.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/network-monitor/src/main.rs b/network-monitor/src/main.rs index 4f9e72abd30..8afb88f2ed5 100644 --- a/network-monitor/src/main.rs +++ b/network-monitor/src/main.rs @@ -43,6 +43,7 @@ pub(crate) const DEFAULT_RNG: DefRng = OsRng; const V4_TOPOLOGY_ARG: &str = "v4-topology-filepath"; const V6_TOPOLOGY_ARG: &str = "v6-topology-filepath"; +const VALIDATOR_ARG: &str = "validator"; // CHANGE THIS TO GET COMPLETE LIST OF WHICH NODE IS WORKING OR BROKEN IN PARTICULAR WAY // || @@ -67,6 +68,12 @@ fn parse_args<'a>() -> ArgMatches<'a> { .takes_value(true) .required(true), ) + .arg( + Arg::with_name(VALIDATOR_ARG) + .help("REST endpoint of the validator the monitor will grab nodes to test") + .takes_value(true) + .required(true), + ) .get_matches() } @@ -81,10 +88,11 @@ async fn main() { let v4_topology = parse_topology_file(v4_topology_path); let v6_topology = parse_topology_file(v6_topology_path); + let validator_rest_uri = matches.value_of(VALIDATOR_ARG).unwrap(); + check_if_up_to_date(&v4_topology, &v6_topology); setup_logging(); - let validator_rest_uri = "https://qa-directory.nymtech.net"; println!("* validator server: {}", validator_rest_uri); // TODO: THIS MUST BE UPDATED!! From cd7e7cef1241a6600d1d2eb9c55d92aa537c56fd Mon Sep 17 00:00:00 2001 From: jstuczyn Date: Wed, 4 Nov 2020 12:33:50 +0000 Subject: [PATCH 4/4] Made detailed report const flag into an argument --- network-monitor/src/main.rs | 17 +++++++++-------- network-monitor/src/notifications/mod.rs | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/network-monitor/src/main.rs b/network-monitor/src/main.rs index 8afb88f2ed5..b6eb0d64374 100644 --- a/network-monitor/src/main.rs +++ b/network-monitor/src/main.rs @@ -44,14 +44,7 @@ pub(crate) const DEFAULT_RNG: DefRng = OsRng; const V4_TOPOLOGY_ARG: &str = "v4-topology-filepath"; const V6_TOPOLOGY_ARG: &str = "v6-topology-filepath"; const VALIDATOR_ARG: &str = "validator"; - -// CHANGE THIS TO GET COMPLETE LIST OF WHICH NODE IS WORKING OR BROKEN IN PARTICULAR WAY -// || -// \/ -pub const PRINT_DETAILED_REPORT: bool = false; -// /\ -// || -// CHANGE THIS TO GET COMPLETE LIST OF WHICH NODE IS WORKING OR BROKEN IN PARTICULAR WAY +const DETAILED_REPORT_ARG: &str = "detailed-report"; fn parse_args<'a>() -> ArgMatches<'a> { App::new("Nym Network Monitor") @@ -74,6 +67,10 @@ fn parse_args<'a>() -> ArgMatches<'a> { .takes_value(true) .required(true), ) + .arg( + Arg::with_name(DETAILED_REPORT_ARG) + .help("specifies whether a detailed report should be printed after each run"), + ) .get_matches() } @@ -89,6 +86,7 @@ async fn main() { let v6_topology = parse_topology_file(v6_topology_path); let validator_rest_uri = matches.value_of(VALIDATOR_ARG).unwrap(); + let detailed_report = matches.is_present(DETAILED_REPORT_ARG); check_if_up_to_date(&v4_topology, &v6_topology); setup_logging(); @@ -130,6 +128,7 @@ async fn main() { Arc::clone(&validator_client), mixnet_receiver, test_run_receiver, + detailed_report, ); let gateway_client = new_gateway_client(gateway, identity_keypair, ack_sender, mixnet_sender); @@ -202,12 +201,14 @@ fn new_notifier( validator_client: Arc, mixnet_receiver: MixnetReceiver, test_run_receiver: TestRunUpdateReceiver, + with_detailed_report: bool, ) -> Notifier { Notifier::new( mixnet_receiver, encryption_keypair, validator_client, test_run_receiver, + with_detailed_report, ) } diff --git a/network-monitor/src/notifications/mod.rs b/network-monitor/src/notifications/mod.rs index 4a5dae2a090..60b9663c060 100644 --- a/network-monitor/src/notifications/mod.rs +++ b/network-monitor/src/notifications/mod.rs @@ -17,7 +17,6 @@ use crate::monitor::NOTIFIER_DELIVERY_TIMEOUT; use crate::notifications::test_run::TestRun; use crate::notifications::test_timeout::TestTimeout; use crate::run_info::{RunInfo, TestRunUpdate, TestRunUpdateReceiver}; -use crate::PRINT_DETAILED_REPORT; use crypto::asymmetric::encryption::KeyPair; use futures::StreamExt; use log::*; @@ -53,10 +52,11 @@ impl Notifier { client_encryption_keypair: KeyPair, validator_client: Arc, test_run_receiver: TestRunUpdateReceiver, + with_detailed_report: bool, ) -> Notifier { let message_receiver = MessageReceiver::new(); let mut current_test_run = TestRun::new(0).with_report(); - if PRINT_DETAILED_REPORT { + if with_detailed_report { current_test_run = current_test_run.with_detailed_report(); } Notifier {