Improved tracing (part 1)

This commit is contained in:
mdecimus
2024-07-23 12:44:14 +02:00
parent 9c23774aa5
commit ae7cadc27d
224 changed files with 2352 additions and 1832 deletions

View File

@@ -12,7 +12,6 @@ rustls-pki-types = { version = "1" }
tokio = { version = "1.23", features = ["net", "macros"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12"] }
serde = { version = "1.0", features = ["derive"]}
tracing = "0.1"
mail-auth = { version = "0.4" }
smtp-proto = { version = "0.1" }
mail-send = { version = "0.4", default-features = false, features = ["cram-md5", "ring", "tls12"] }

View File

@@ -173,19 +173,22 @@ impl Config {
pub fn log_errors(&self, use_stderr: bool) {
for (key, err) in &self.errors {
let message = match err {
ConfigError::Parse { error } => {
format!("Failed to parse setting {key:?}: {error}")
}
ConfigError::Build { error } => {
format!("Build error for key {key:?}: {error}")
}
ConfigError::Macro { error } => {
format!("Macro expansion error for setting {key:?}: {error}")
}
let (cause, message) = match err {
ConfigError::Parse { error } => (
trc::ConfigEvent::ParseError,
format!("Failed to parse setting {key:?}: {error}"),
),
ConfigError::Build { error } => (
trc::ConfigEvent::BuildError,
format!("Build error for key {key:?}: {error}"),
),
ConfigError::Macro { error } => (
trc::ConfigEvent::MacroError,
format!("Macro expansion error for setting {key:?}: {error}"),
),
};
if !use_stderr {
tracing::error!("{}", message);
trc::event!(Config(cause), Details = message);
} else {
eprintln!("ERROR: {message}");
}
@@ -197,23 +200,30 @@ impl Config {
self.warn_unread_keys();
for (key, warn) in &self.warnings {
let message = match warn {
ConfigWarning::AppliedDefault { default } => {
format!("WARNING: Missing setting {key:?}, applied default {default:?}")
}
ConfigWarning::Missing => {
format!("WARNING: Missing setting {key:?}")
}
ConfigWarning::Unread { value } => {
format!("WARNING: Unused setting {key:?} with value {value:?}")
}
ConfigWarning::Parse { error } => {
format!("WARNING: Failed to parse {key:?}: {error}")
}
ConfigWarning::Build { error } => format!("WARNING for {key:?}: {error}"),
let (cause, message) = match warn {
ConfigWarning::AppliedDefault { default } => (
trc::ConfigEvent::DefaultApplied,
format!("WARNING: Missing setting {key:?}, applied default {default:?}"),
),
ConfigWarning::Missing => (
trc::ConfigEvent::MissingSetting,
format!("WARNING: Missing setting {key:?}"),
),
ConfigWarning::Unread { value } => (
trc::ConfigEvent::UnusedSetting,
format!("WARNING: Unused setting {key:?} with value {value:?}"),
),
ConfigWarning::Parse { error } => (
trc::ConfigEvent::ParseWarning,
format!("WARNING: Failed to parse {key:?}: {error}"),
),
ConfigWarning::Build { error } => (
trc::ConfigEvent::BuildWarning,
format!("WARNING for {key:?}: {error}"),
),
};
if !use_stderr {
tracing::debug!("{}", message);
trc::event!(Config(cause), Details = message);
} else {
eprintln!("{}", message);
}

View File

@@ -91,7 +91,10 @@ impl<T> UnwrapFailure<T> for Option<T> {
match self {
Some(result) => result,
None => {
tracing::error!("{message}");
trc::event!(
Server(trc::ServerEvent::StartupError),
Details = message.to_string()
);
eprintln!("{message}");
std::process::exit(1);
}
@@ -104,7 +107,11 @@ impl<T, E: std::fmt::Display> UnwrapFailure<T> for Result<T, E> {
match self {
Ok(result) => result,
Err(err) => {
tracing::error!("{message}: {err}");
trc::event!(
Server(trc::ServerEvent::StartupError),
Details = message.to_string(),
Reason = err.to_string()
);
#[cfg(feature = "test_mode")]
panic!("{message}: {err}");
@@ -120,36 +127,48 @@ impl<T, E: std::fmt::Display> UnwrapFailure<T> for Result<T, E> {
}
pub fn failed(message: &str) -> ! {
tracing::error!("{message}");
trc::event!(
Server(trc::ServerEvent::StartupError),
Details = message.to_string(),
);
eprintln!("{message}");
std::process::exit(1);
}
pub async fn wait_for_shutdown(message: &str) {
#[cfg(not(target_env = "msvc"))]
{
let signal = {
use tokio::signal::unix::{signal, SignalKind};
let mut h_term = signal(SignalKind::terminate()).failed("start signal handler");
let mut h_int = signal(SignalKind::interrupt()).failed("start signal handler");
tokio::select! {
_ = h_term.recv() => tracing::debug!("Received SIGTERM."),
_ = h_int.recv() => tracing::debug!("Received SIGINT."),
};
}
_ = h_term.recv() => "SIGTERM",
_ = h_int.recv() => "SIGINT",
}
};
#[cfg(target_env = "msvc")]
{
let signal = {
match tokio::signal::ctrl_c().await {
Ok(()) => {}
Ok(()) => "SIGINT",
Err(err) => {
eprintln!("Unable to listen for shutdown signal: {}", err);
trc::event!(
Server(trc::ServerEvent::Error),
Details = "Unable to listen for shutdown signal",
Reason = err.to_string(),
);
"Error"
}
}
}
};
tracing::info!(message);
trc::event!(
Server(trc::ServerEvent::Shutdown),
Details = message.to_string(),
CausedBy = signal
);
}
pub fn rustls_client_config(allow_invalid_certs: bool) -> ClientConfig {