chore: log config
This commit is contained in:
parent
d67b5c5a09
commit
f7465746f0
|
@ -39,6 +39,7 @@ members = [
|
|||
"testnet/cfgsync",
|
||||
"tests",
|
||||
"clients/executor-http-client",
|
||||
"nomos-cluster-tests",
|
||||
]
|
||||
exclude = ["proof_of_leadership/risc0/risc0_proofs", "nomos-core/risc0_proofs"]
|
||||
resolver = "2"
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
[package]
|
||||
name = "nomos-cluster-tests"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4", features = ["derive", "env"] }
|
||||
serde_yaml = "0.9"
|
||||
serde = { version = "1.0.215", features = ["derive"] }
|
||||
nomos-tracing = { path = "../nomos-tracing" }
|
||||
nomos-tracing-service = { path = "../nomos-services/tracing" }
|
||||
overwatch-rs = { git = "https://github.com/logos-co/Overwatch", rev = "2f70806" }
|
||||
color-eyre = "0.6.0"
|
||||
tracing = "0.1"
|
|
@ -0,0 +1,4 @@
|
|||
# Nomos Cluster Tests
|
||||
|
||||
Suite of small scale distributed tests for Nomos
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
log:
|
||||
backend: "Stdout"
|
||||
format: "Json"
|
||||
level: "debug"
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
use std::net::ToSocketAddrs;
|
||||
use std::path::PathBuf;
|
||||
use clap::{Parser, ValueEnum};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use color_eyre::eyre::{eyre, Result};
|
||||
use tracing::Level;
|
||||
|
||||
use nomos_tracing_service::{LoggerLayer, Tracing};
|
||||
use overwatch_rs::services::ServiceData;
|
||||
use nomos_tracing::logging::gelf::GelfConfig;
|
||||
use nomos_tracing::logging::local::FileConfig;
|
||||
|
||||
#[derive(ValueEnum, Clone, Debug, Default)]
|
||||
pub enum LoggerLayerType {
|
||||
Gelf,
|
||||
File,
|
||||
#[default]
|
||||
Stdout,
|
||||
Stderr,
|
||||
}
|
||||
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct LogArgs {
|
||||
/// Address for the Gelf backend
|
||||
#[clap(long = "log-addr", env = "LOG_ADDR", required_if_eq("backend", "Gelf"))]
|
||||
log_addr: Option<String>,
|
||||
|
||||
/// Directory for the File backend
|
||||
#[clap(long = "log-dir", env = "LOG_DIR", required_if_eq("backend", "File"))]
|
||||
directory: Option<PathBuf>,
|
||||
|
||||
/// Prefix for the File backend
|
||||
#[clap(long = "log-path", env = "LOG_PATH", required_if_eq("backend", "File"))]
|
||||
prefix: Option<PathBuf>,
|
||||
|
||||
/// Backend type
|
||||
#[clap(long = "log-backend", env = "LOG_BACKEND", value_enum)]
|
||||
backend: Option<LoggerLayerType>,
|
||||
|
||||
#[clap(long = "log-level", env = "LOG_LEVEL")]
|
||||
level: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug, Clone, Serialize)]
|
||||
pub struct Config {
|
||||
pub tracing: <Tracing as ServiceData>::Settings,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
pub fn update_from_args(
|
||||
mut self,
|
||||
log_args: LogArgs,
|
||||
) -> Result<Self> {
|
||||
update_tracing(&mut self.tracing, log_args)?;
|
||||
Ok(self)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_tracing(
|
||||
tracing: &mut <Tracing as ServiceData>::Settings,
|
||||
tracing_args: LogArgs,
|
||||
) -> Result<()> {
|
||||
let LogArgs {
|
||||
backend,
|
||||
log_addr: addr,
|
||||
directory,
|
||||
prefix,
|
||||
level,
|
||||
} = tracing_args;
|
||||
|
||||
// Override the file config with the one from env variables.
|
||||
if let Some(backend) = backend {
|
||||
tracing.logger = match backend {
|
||||
LoggerLayerType::Gelf => LoggerLayer::Gelf(GelfConfig {
|
||||
addr: addr
|
||||
.ok_or_else(|| eyre!("Gelf backend requires an address."))?
|
||||
.to_socket_addrs()?
|
||||
.next()
|
||||
.ok_or_else(|| eyre!("Invalid gelf address"))?,
|
||||
}),
|
||||
LoggerLayerType::File => LoggerLayer::File(FileConfig {
|
||||
directory: directory.ok_or_else(|| eyre!("File backend requires a directory."))?,
|
||||
prefix,
|
||||
}),
|
||||
LoggerLayerType::Stdout => LoggerLayer::Stdout,
|
||||
LoggerLayerType::Stderr => LoggerLayer::Stderr,
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(level_str) = level {
|
||||
tracing.level = match level_str.as_str() {
|
||||
"DEBUG" => Level::DEBUG,
|
||||
"INFO" => Level::INFO,
|
||||
"ERROR" => Level::ERROR,
|
||||
"WARN" => Level::WARN,
|
||||
_ => return Err(eyre!("Invalid log level provided.")),
|
||||
};
|
||||
}
|
||||
Ok(())
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
mod config;
|
||||
|
||||
use clap::Parser;
|
||||
use crate::config::{Config, LogArgs};
|
||||
use color_eyre::eyre::{Result};
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(author, version, about, long_about = None)]
|
||||
struct Args {
|
||||
/// Path for a yaml-encoded network config file
|
||||
config: std::path::PathBuf,
|
||||
/// Overrides log config.
|
||||
#[clap(flatten)]
|
||||
log_args: LogArgs,
|
||||
}
|
||||
|
||||
|
||||
fn main() -> Result<()> {
|
||||
|
||||
// Parse cluster options
|
||||
let Args {
|
||||
config,
|
||||
log_args,
|
||||
} = Args::parse();
|
||||
let config = serde_yaml::from_reader::<_, Config>(std::fs::File::open(config)?)?
|
||||
.update_from_args(
|
||||
log_args,
|
||||
)?;
|
||||
|
||||
// Run the test suite
|
||||
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in New Issue