Log configured network in every log message (#1568)
* Add the configured network to error reports * Log the configured network at error level * Create the global span immediately after activating tracing And leak the span guard, so the span is always active. * Include panic metadata in the report and URL * Use `Main` and `Test` in the global span `net=Mainnet` is a bit redundant
This commit is contained in:
parent
a21eaad707
commit
c75cbdea79
|
@ -151,13 +151,25 @@ impl Application for ZebradApp {
|
||||||
color_eyre::config::Theme::new()
|
color_eyre::config::Theme::new()
|
||||||
};
|
};
|
||||||
|
|
||||||
// This MUST happen after `Terminal::new` to ensure our preferred panic
|
// collect the common metadata for the issue URL and panic report
|
||||||
// handler is the last one installed
|
let network = config.network.network.to_string();
|
||||||
let builder = color_eyre::config::HookBuilder::default()
|
let panic_metadata = vec![
|
||||||
|
("version", env!("CARGO_PKG_VERSION").to_string()),
|
||||||
|
("git commit", Self::git_commit().to_string()),
|
||||||
|
("Zcash network", network),
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut builder = color_eyre::config::HookBuilder::default();
|
||||||
|
let mut metadata_section = "Metadata:".to_string();
|
||||||
|
for (k, v) in panic_metadata {
|
||||||
|
builder = builder.add_issue_metadata(k, v.clone());
|
||||||
|
metadata_section.push_str(&format!("\n{}: {}", k, v));
|
||||||
|
}
|
||||||
|
|
||||||
|
builder = builder
|
||||||
.theme(theme)
|
.theme(theme)
|
||||||
|
.panic_section(metadata_section)
|
||||||
.issue_url(concat!(env!("CARGO_PKG_REPOSITORY"), "/issues/new"))
|
.issue_url(concat!(env!("CARGO_PKG_REPOSITORY"), "/issues/new"))
|
||||||
.add_issue_metadata("version", env!("CARGO_PKG_VERSION"))
|
|
||||||
.add_issue_metadata("git commit", Self::git_commit())
|
|
||||||
.issue_filter(|kind| match kind {
|
.issue_filter(|kind| match kind {
|
||||||
color_eyre::ErrorKind::NonRecoverable(_) => true,
|
color_eyre::ErrorKind::NonRecoverable(_) => true,
|
||||||
color_eyre::ErrorKind::Recoverable(error) => {
|
color_eyre::ErrorKind::Recoverable(error) => {
|
||||||
|
@ -173,6 +185,8 @@ impl Application for ZebradApp {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// This MUST happen after `Terminal::new` to ensure our preferred panic
|
||||||
|
// handler is the last one installed
|
||||||
let (panic_hook, eyre_hook) = builder.into_hooks();
|
let (panic_hook, eyre_hook) = builder.into_hooks();
|
||||||
eyre_hook.install().unwrap();
|
eyre_hook.install().unwrap();
|
||||||
|
|
||||||
|
@ -217,7 +231,7 @@ impl Application for ZebradApp {
|
||||||
.map(ZebradCmd::is_server)
|
.map(ZebradCmd::is_server)
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
// Launch network endpoints only for long-running commands.
|
// Ignore the tracing filter for short-lived commands
|
||||||
if is_server {
|
if is_server {
|
||||||
// Override the default tracing filter based on the command-line verbosity.
|
// Override the default tracing filter based on the command-line verbosity.
|
||||||
let mut tracing_config = cfg_ref.tracing.clone();
|
let mut tracing_config = cfg_ref.tracing.clone();
|
||||||
|
@ -226,9 +240,6 @@ impl Application for ZebradApp {
|
||||||
.or_else(|| Some(default_filter.to_owned()));
|
.or_else(|| Some(default_filter.to_owned()));
|
||||||
|
|
||||||
components.push(Box::new(Tracing::new(tracing_config)?));
|
components.push(Box::new(Tracing::new(tracing_config)?));
|
||||||
components.push(Box::new(TokioComponent::new()?));
|
|
||||||
components.push(Box::new(TracingEndpoint::new(cfg_ref)?));
|
|
||||||
components.push(Box::new(MetricsEndpoint::new(cfg_ref)?));
|
|
||||||
} else {
|
} else {
|
||||||
// Don't apply the configured filter for short-lived commands.
|
// Don't apply the configured filter for short-lived commands.
|
||||||
let mut tracing_config = cfg_ref.tracing.clone();
|
let mut tracing_config = cfg_ref.tracing.clone();
|
||||||
|
@ -237,6 +248,25 @@ impl Application for ZebradApp {
|
||||||
components.push(Box::new(Tracing::new(tracing_config)?));
|
components.push(Box::new(Tracing::new(tracing_config)?));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Activate the global span, so it's visible when we load the other
|
||||||
|
// components. Space is at a premium here, so we use an empty message,
|
||||||
|
// short commit hash, and the unique part of the network name.
|
||||||
|
let global_span = error_span!(
|
||||||
|
"",
|
||||||
|
zebrad = ZebradApp::git_commit(),
|
||||||
|
net = &self.config.clone().unwrap().network.network.to_string()[..4],
|
||||||
|
);
|
||||||
|
let global_guard = global_span.enter();
|
||||||
|
// leak the global span, to make sure it stays active
|
||||||
|
std::mem::forget(global_guard);
|
||||||
|
|
||||||
|
// Launch network and async endpoints only for long-running commands.
|
||||||
|
if is_server {
|
||||||
|
components.push(Box::new(TokioComponent::new()?));
|
||||||
|
components.push(Box::new(TracingEndpoint::new(cfg_ref)?));
|
||||||
|
components.push(Box::new(MetricsEndpoint::new(cfg_ref)?));
|
||||||
|
}
|
||||||
|
|
||||||
self.state.components.register(components)
|
self.state.components.register(components)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,10 +277,8 @@ impl Application for ZebradApp {
|
||||||
// application configuration is processed
|
// application configuration is processed
|
||||||
self.register_components(command)?;
|
self.register_components(command)?;
|
||||||
|
|
||||||
|
// Fire callback to signal state in the application lifecycle
|
||||||
let config = self.config.take().unwrap();
|
let config = self.config.take().unwrap();
|
||||||
|
|
||||||
// Fire callback regardless of whether any config was loaded to
|
|
||||||
// in order to signal state in the application lifecycle
|
|
||||||
self.after_config(config)?;
|
self.after_config(config)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -7,7 +7,6 @@ mod version;
|
||||||
use self::ZebradCmd::*;
|
use self::ZebradCmd::*;
|
||||||
use self::{generate::GenerateCmd, start::StartCmd, version::VersionCmd};
|
use self::{generate::GenerateCmd, start::StartCmd, version::VersionCmd};
|
||||||
|
|
||||||
use crate::application::ZebradApp;
|
|
||||||
use crate::config::ZebradConfig;
|
use crate::config::ZebradConfig;
|
||||||
|
|
||||||
use abscissa_core::{
|
use abscissa_core::{
|
||||||
|
@ -53,8 +52,6 @@ impl ZebradCmd {
|
||||||
|
|
||||||
impl Runnable for ZebradCmd {
|
impl Runnable for ZebradCmd {
|
||||||
fn run(&self) {
|
fn run(&self) {
|
||||||
let span = error_span!("", zebrad = ZebradApp::git_commit());
|
|
||||||
let _guard = span.enter();
|
|
||||||
match self {
|
match self {
|
||||||
Generate(cmd) => cmd.run(),
|
Generate(cmd) => cmd.run(),
|
||||||
ZebradCmd::Help(cmd) => cmd.run(),
|
ZebradCmd::Help(cmd) => cmd.run(),
|
||||||
|
|
Loading…
Reference in New Issue