Skip to content

Commit

Permalink
Merge pull request #2014 from input-output-hk/djo/1981/enhance_logs_i…
Browse files Browse the repository at this point in the history
…n_relay

Enhance logs in mithril-relay
  • Loading branch information
Alenar authored Oct 18, 2024
2 parents 495f150 + a879a96 commit 17c6d9a
Show file tree
Hide file tree
Showing 16 changed files with 226 additions and 104 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 5 additions & 3 deletions mithril-relay/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-relay"
version = "0.1.25"
version = "0.1.26"
description = "A Mithril relay"
authors = { workspace = true }
edition = { workspace = true }
Expand Down Expand Up @@ -43,8 +43,10 @@ slog = { version = "2.7.0", features = [
] }
slog-async = "2.8.0"
slog-bunyan = "2.5.0"
slog-scope = "4.4.0"
slog-term = "2.9.1"
thiserror = "1.0.64"
tokio = { version = "1.40.0", features = ["full"] }
warp = "0.3.7"

[dev-dependencies]
slog-scope = "4.4.0"
slog-term = "2.9.1"
11 changes: 6 additions & 5 deletions mithril-relay/src/commands/aggregator.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use clap::Parser;
use config::{builder::DefaultState, ConfigBuilder};
use libp2p::Multiaddr;
use mithril_common::StdResult;
use slog_scope::error;
use slog::error;

use super::CommandContext;
use crate::AggregatorRelay;

#[derive(Parser, Debug, Clone)]
Expand All @@ -23,19 +23,20 @@ pub struct AggregatorCommand {

impl AggregatorCommand {
/// Main command execution
pub async fn execute(&self, _config_builder: ConfigBuilder<DefaultState>) -> StdResult<()> {
pub async fn execute(&self, context: CommandContext) -> StdResult<()> {
let dial_to = self.dial_to.to_owned();
let addr: Multiaddr = format!("/ip4/0.0.0.0/tcp/{}", self.listen_port).parse()?;
let aggregator_endpoint = self.aggregator_endpoint.to_owned();
let logger = context.logger();

let mut relay = AggregatorRelay::start(&addr, &aggregator_endpoint).await?;
let mut relay = AggregatorRelay::start(&addr, &aggregator_endpoint, logger).await?;
if let Some(dial_to_address) = dial_to {
relay.dial_peer(dial_to_address.clone())?;
}

loop {
if let Err(err) = relay.tick().await {
error!("RelayAggregator: tick error"; "error" => format!("{err:#?}"));
error!(logger, "RelayAggregator: tick error"; "error" => ?err);
}
}
}
Expand Down
29 changes: 29 additions & 0 deletions mithril-relay/src/commands/context.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
use config::builder::DefaultState;
use config::ConfigBuilder;
use slog::Logger;

/// Context for the command execution
pub struct CommandContext {
config_builder: ConfigBuilder<DefaultState>,
logger: Logger,
}

impl CommandContext {
/// Create a new command context
pub fn new(config_builder: ConfigBuilder<DefaultState>, logger: Logger) -> Self {
Self {
config_builder,
logger,
}
}

/// Get the configured parameters
pub fn config_builder(&self) -> ConfigBuilder<DefaultState> {
self.config_builder.clone()
}

/// Get the shared logger
pub fn logger(&self) -> &Logger {
&self.logger
}
}
14 changes: 8 additions & 6 deletions mithril-relay/src/commands/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
mod aggregator;
mod context;
mod passive;
mod relay;
mod signer;
Expand All @@ -10,9 +11,9 @@ pub use signer::SignerCommand;

use clap::Parser;
use config::{builder::DefaultState, ConfigBuilder, Map, Source, Value};
use context::CommandContext;
use mithril_common::StdResult;
use slog::Level;
use slog_scope::debug;
use slog::{debug, Level, Logger};
use std::path::PathBuf;

/// Relay for Mithril Node
Expand Down Expand Up @@ -43,15 +44,16 @@ pub struct Args {

impl Args {
/// execute command
pub async fn execute(&self) -> StdResult<()> {
debug!("Run Mode: {}", self.run_mode);
pub async fn execute(&self, logger: Logger) -> StdResult<()> {
debug!(logger, "Run Mode: {}", self.run_mode);
let filename = format!("{}/{}.json", self.config_directory.display(), self.run_mode);
debug!("Reading configuration file '{}'.", filename);
debug!(logger, "Reading configuration file '{filename}'.");
let config: ConfigBuilder<DefaultState> = config::Config::builder()
.add_source(config::File::with_name(&filename).required(false))
.add_source(self.clone());

self.command.execute(config).await
let context = CommandContext::new(config, logger);
self.command.execute(context).await
}

/// get log level from parameters
Expand Down
11 changes: 6 additions & 5 deletions mithril-relay/src/commands/passive.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
use clap::Parser;
use config::{builder::DefaultState, ConfigBuilder};
use libp2p::Multiaddr;
use mithril_common::StdResult;
use slog_scope::error;
use slog::error;

use super::CommandContext;
use crate::PassiveRelay;

#[derive(Parser, Debug, Clone)]
Expand All @@ -19,17 +19,18 @@ pub struct PassiveCommand {

impl PassiveCommand {
/// Main command execution
pub async fn execute(&self, _config_builder: ConfigBuilder<DefaultState>) -> StdResult<()> {
pub async fn execute(&self, context: CommandContext) -> StdResult<()> {
let dial_to = self.dial_to.to_owned();
let addr: Multiaddr = format!("/ip4/0.0.0.0/tcp/{}", self.listen_port).parse()?;
let logger = context.logger();

let mut relay = PassiveRelay::start(&addr).await?;
let mut relay = PassiveRelay::start(&addr, logger).await?;
if let Some(dial_to_address) = dial_to {
relay.dial_peer(dial_to_address.clone())?;
}
loop {
if let Err(err) = relay.tick().await {
error!("P2PClient: tick error"; "error" => format!("{err:#?}"));
error!(logger, "P2PClient: tick error"; "error" => ?err);
}
}
}
Expand Down
12 changes: 6 additions & 6 deletions mithril-relay/src/commands/relay.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
use super::{AggregatorCommand, Args, PassiveCommand, SignerCommand};
use anyhow::anyhow;
use clap::{CommandFactory, Subcommand};
use config::{builder::DefaultState, ConfigBuilder};
use mithril_common::StdResult;
use mithril_doc::GenerateDocCommands;

use super::{AggregatorCommand, Args, CommandContext, PassiveCommand, SignerCommand};

/// The available sub-commands of the relay
#[derive(Subcommand, Debug, Clone)]
pub enum RelayCommands {
Expand All @@ -27,11 +27,11 @@ pub enum RelayCommands {

impl RelayCommands {
/// Execute the command
pub async fn execute(&self, config_builder: ConfigBuilder<DefaultState>) -> StdResult<()> {
pub async fn execute(&self, context: CommandContext) -> StdResult<()> {
match self {
Self::Aggregator(cmd) => cmd.execute(config_builder).await,
Self::Signer(cmd) => cmd.execute(config_builder).await,
Self::Passive(cmd) => cmd.execute(config_builder).await,
Self::Aggregator(cmd) => cmd.execute(context).await,
Self::Signer(cmd) => cmd.execute(context).await,
Self::Passive(cmd) => cmd.execute(context).await,
Self::GenerateDoc(cmd) => cmd
.execute(&mut Args::command())
.map_err(|message| anyhow!(message)),
Expand Down
10 changes: 6 additions & 4 deletions mithril-relay/src/commands/signer.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::time::Duration;

use clap::Parser;
use config::{builder::DefaultState, ConfigBuilder};
use libp2p::Multiaddr;
use mithril_common::StdResult;
use slog_scope::error;
use slog::error;

use super::CommandContext;
use crate::SignerRelay;

#[derive(Parser, Debug, Clone)]
Expand Down Expand Up @@ -33,7 +33,8 @@ pub struct SignerCommand {

impl SignerCommand {
/// Main command execution
pub async fn execute(&self, _config_builder: ConfigBuilder<DefaultState>) -> StdResult<()> {
pub async fn execute(&self, context: CommandContext) -> StdResult<()> {
let logger = context.logger();
let server_port = self.server_port.to_owned();
let dial_to = self.dial_to.to_owned();
let addr: Multiaddr = format!("/ip4/0.0.0.0/tcp/{}", self.listen_port).parse()?;
Expand All @@ -45,6 +46,7 @@ impl SignerCommand {
&server_port,
&aggregator_endpoint,
&signer_repeater_delay,
logger,
)
.await?;
if let Some(dial_to_address) = dial_to {
Expand All @@ -53,7 +55,7 @@ impl SignerCommand {

loop {
if let Err(err) = relay.tick().await {
error!("RelaySigner: tick error"; "error" => format!("{err:#?}"));
error!(logger, "RelaySigner: tick error"; "error" => ?err);
}
}
}
Expand Down
30 changes: 30 additions & 0 deletions mithril-relay/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,33 @@ pub mod mithril_p2p_topic {
/// The topic name where signatures are published
pub const SIGNATURES: &str = "mithril/signatures";
}

#[cfg(test)]
pub mod test_tools {
use std::fs::File;
use std::io;
use std::sync::Arc;

use slog::{Drain, Logger};
use slog_async::Async;
use slog_term::{CompactFormat, PlainDecorator};

pub struct TestLogger;

impl TestLogger {
fn from_writer<W: io::Write + Send + 'static>(writer: W) -> Logger {
let decorator = PlainDecorator::new(writer);
let drain = CompactFormat::new(decorator).build().fuse();
let drain = Async::new(drain).build().fuse();
Logger::root(Arc::new(drain), slog::o!())
}

pub fn stdout() -> Logger {
Self::from_writer(slog_term::TestStdoutWriter)
}

pub fn file(filepath: &std::path::Path) -> Logger {
Self::from_writer(File::create(filepath).unwrap())
}
}
}
10 changes: 6 additions & 4 deletions mithril-relay/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ use mithril_relay::Args;
use slog::{Drain, Level, Logger};

pub fn build_logger(min_level: Level) -> Logger {
let decorator = slog_term::TermDecorator::new().build();
let drain = slog_term::CompactFormat::new(decorator).build().fuse();
let drain = slog_bunyan::with_name("mithril-relay", std::io::stderr())
.set_pretty(false)
.build()
.fuse();
let drain = slog::LevelFilter::new(drain, min_level).fuse();
let drain = slog_async::Async::new(drain).build().fuse();

Expand All @@ -19,7 +21,7 @@ pub fn build_logger(min_level: Level) -> Logger {
#[tokio::main]
async fn main() -> StdResult<()> {
let args = Args::parse();
let _guard = slog_scope::set_global_logger(build_logger(args.log_level()));
let logger = build_logger(args.log_level());

args.execute().await
args.execute(logger).await
}
Loading

0 comments on commit 17c6d9a

Please sign in to comment.