Feature/gateway monitoring (#499)

* ability to read from multiple gateway clients

* A very initial updated network monitor

* Summary producer printing report on each finished run

* fixed gateway startup issue

* initial cleanup pass

* Sending to gateways at specified rate

* Renaming

* Fixed first run interval

* Removed false positive error print

* Ability to use 'good' topology that is different from the one being tested

* Fixed clippy warnings
This commit is contained in:
Jędrzej Stuczyński
2021-01-29 10:11:13 +00:00
committed by GitHub
parent d7ec81ad0a
commit 9cd463b22c
25 changed files with 2013 additions and 1153 deletions
@@ -17,7 +17,7 @@ use crypto::asymmetric::{encryption, identity};
use serde::{Deserialize, Serialize};
use std::convert::TryInto;
use std::io;
use std::net::ToSocketAddrs;
use std::net::{SocketAddr, ToSocketAddrs};
#[derive(Debug)]
pub enum ConversionError {
@@ -93,14 +93,17 @@ impl RegisteredGateway {
pub fn clients_listener(&self) -> String {
self.gateway_info.clients_host.clone()
}
}
impl TryInto<topology::gateway::Node> for RegisteredGateway {
type Error = ConversionError;
pub fn version(&self) -> String {
self.gateway_info.node_info.version.clone()
}
fn try_into(self) -> Result<topology::gateway::Node, Self::Error> {
let resolved_mix_hostname = self
.gateway_info
pub fn version_ref(&self) -> &str {
&self.gateway_info.node_info.version
}
fn resolve_hostname(&self) -> Result<SocketAddr, ConversionError> {
self.gateway_info
.node_info
.mix_host
.to_socket_addrs()
@@ -111,11 +114,17 @@ impl TryInto<topology::gateway::Node> for RegisteredGateway {
io::ErrorKind::Other,
"no valid socket address",
))
})?;
})
}
}
impl TryInto<topology::gateway::Node> for RegisteredGateway {
type Error = ConversionError;
fn try_into(self) -> Result<topology::gateway::Node, Self::Error> {
Ok(topology::gateway::Node {
mixnet_listener: self.resolve_hostname()?,
location: self.gateway_info.node_info.location,
mixnet_listener: resolved_mix_hostname,
client_listener: self.gateway_info.clients_host,
identity_key: identity::PublicKey::from_base58_string(
self.gateway_info.node_info.identity_key,
@@ -129,3 +138,24 @@ impl TryInto<topology::gateway::Node> for RegisteredGateway {
})
}
}
impl<'a> TryInto<topology::gateway::Node> for &'a RegisteredGateway {
type Error = ConversionError;
fn try_into(self) -> Result<topology::gateway::Node, Self::Error> {
Ok(topology::gateway::Node {
mixnet_listener: self.resolve_hostname()?,
location: self.gateway_info.node_info.location.clone(),
client_listener: self.gateway_info.clients_host.clone(),
identity_key: identity::PublicKey::from_base58_string(
&self.gateway_info.node_info.identity_key,
)?,
sphinx_key: encryption::PublicKey::from_base58_string(
&self.gateway_info.node_info.sphinx_key,
)?,
registration_time: self.registration_time,
reputation: self.reputation,
version: self.gateway_info.node_info.version.clone(),
})
}
}
@@ -17,7 +17,8 @@ use crypto::asymmetric::{encryption, identity};
use serde::{Deserialize, Serialize};
use std::convert::TryInto;
use std::io;
use std::net::ToSocketAddrs;
use std::net::{SocketAddr, ToSocketAddrs};
use topology::mix::Node;
#[derive(Debug)]
pub enum ConversionError {
@@ -97,14 +98,21 @@ impl RegisteredMix {
pub fn layer(&self) -> u64 {
self.mix_info.layer
}
}
impl TryInto<topology::mix::Node> for RegisteredMix {
type Error = ConversionError;
pub fn version(&self) -> String {
self.mix_info.node_info.version.clone()
}
fn try_into(self) -> Result<topology::mix::Node, Self::Error> {
let resolved_hostname = self
.mix_info
pub fn version_ref(&self) -> &str {
&self.mix_info.node_info.version
}
pub fn incentives_address(&self) -> String {
self.mix_info.node_info.incentives_address.clone()
}
fn resolve_hostname(&self) -> Result<SocketAddr, ConversionError> {
self.mix_info
.node_info
.mix_host
.to_socket_addrs()
@@ -115,11 +123,17 @@ impl TryInto<topology::mix::Node> for RegisteredMix {
io::ErrorKind::Other,
"no valid socket address",
))
})?;
})
}
}
impl TryInto<topology::mix::Node> for RegisteredMix {
type Error = ConversionError;
fn try_into(self) -> Result<topology::mix::Node, Self::Error> {
Ok(topology::mix::Node {
host: self.resolve_hostname()?,
location: self.mix_info.node_info.location,
host: resolved_hostname,
identity_key: identity::PublicKey::from_base58_string(
self.mix_info.node_info.identity_key,
)?,
@@ -133,3 +147,24 @@ impl TryInto<topology::mix::Node> for RegisteredMix {
})
}
}
impl<'a> TryInto<topology::mix::Node> for &'a RegisteredMix {
type Error = ConversionError;
fn try_into(self) -> Result<Node, Self::Error> {
Ok(topology::mix::Node {
host: self.resolve_hostname()?,
location: self.mix_info.node_info.location.clone(),
identity_key: identity::PublicKey::from_base58_string(
&self.mix_info.node_info.identity_key,
)?,
sphinx_key: encryption::PublicKey::from_base58_string(
&self.mix_info.node_info.sphinx_key,
)?,
layer: self.mix_info.layer,
registration_time: self.registration_time,
reputation: self.reputation,
version: self.mix_info.node_info.version.clone(),
})
}
}