From 54827cd0a2357417adb8631eb8f53a78e848b39a Mon Sep 17 00:00:00 2001 From: nym21 Date: Thu, 29 Jan 2026 11:54:38 +0100 Subject: [PATCH] log + help: improved --- crates/brk_cli/README.md | 24 +++++-- crates/brk_cli/src/config.rs | 108 ++++++++++++++++++++++------ crates/brk_logger/README.md | 5 ++ crates/brk_logger/src/lib.rs | 4 +- crates/brk_logger/src/rate_limit.rs | 2 +- 5 files changed, 113 insertions(+), 30 deletions(-) diff --git a/crates/brk_cli/README.md b/crates/brk_cli/README.md index 6f8fb5a70..80b4fab90 100644 --- a/crates/brk_cli/README.md +++ b/crates/brk_cli/README.md @@ -11,18 +11,16 @@ Command-line interface for running a Bitcoin Research Kit instance. - Bitcoin Core running with RPC enabled - Access to `blk*.dat` files -- ~400 GB disk space -- 12+ GB RAM +- [~400 GB disk space](https://bitview.space/api/server/disk) +- [12+ GB RAM](https://github.com/bitcoinresearchkit/benches#benchmarks) ## Install ```bash rustup update -RUSTFLAGS="-C target-cpu=native" cargo install --locked brk_cli --version "$(cargo search brk_cli | head -1 | awk -F'"' '{print $2}')" +RUSTFLAGS="-C target-cpu=native" cargo install --locked brk_cli" ``` -The SIMD flags (`bmi1`, `bmi2`, `avx2`) significantly improve pcodec decompression performance. - Portable build (without native CPU optimizations): ```bash @@ -46,7 +44,21 @@ brk -h # Show all options brk -V # Show version ``` -Options are saved to `~/.brk/config.toml` after first use. +Command-line options override `~/.brk/config.toml` for that run only. Edit the file directly to persist settings: + +```toml +brkdir = "/path/to/data" +bitcoindir = "/path/to/.bitcoin" +``` + +All fields are optional. See `brk -h` for the full list. + +## Environment Variables + +```bash +LOG=debug brk # Enable debug logging (keeps noise filters) +RUST_LOG=... brk # Full control over log filtering (overrides all defaults) +``` ## Files diff --git a/crates/brk_cli/src/config.rs b/crates/brk_cli/src/config.rs index 3e82aed45..329f2c326 100644 --- a/crates/brk_cli/src/config.rs +++ b/crates/brk_cli/src/config.rs @@ -4,11 +4,11 @@ use std::{ }; use brk_error::{Error, Result}; -use owo_colors::OwoColorize; use brk_fetcher::Fetcher; use brk_rpc::{Auth, Client}; use brk_server::Website; use brk_types::Port; +use owo_colors::OwoColorize; use serde::{Deserialize, Deserializer, Serialize}; use crate::{default_brk_path, dot_brk_path, fix_user_path}; @@ -97,8 +97,6 @@ impl Config { config.check(); - config.write(&path)?; - Ok(config) } @@ -156,25 +154,96 @@ impl Config { println!("Bitcoin Research Kit"); println!(); println!("{}", "USAGE:".bold()); - println!(" brk {}", "[OPTIONS]".bright_black()); + println!( + " {} brk {}", + "[ENV]".bright_black(), + "[OPTIONS]".bright_black() + ); println!(); println!("{}", "OPTIONS:".bold()); - println!(" -h, --help Print help"); - println!(" -V, --version Print version"); + println!(" -h, --help Print help"); + println!(" -V, --version Print version"); println!(); - println!(" --brkdir {} Output directory {}", "".bright_black(), "[~/.brk]".bright_black()); - println!(" --brkport {} Server port {}", "".bright_black(), "[3110]".bright_black()); - println!(" --website {} Website: true, false, or path {}", "".bright_black(), "[true]".bright_black()); - println!(" --fetch {} Fetch prices {}", "".bright_black(), "[true]".bright_black()); + println!( + " --brkdir {} Output directory {}", + "".bright_black(), + "[~/.brk]".bright_black() + ); + println!( + " --brkport {} Server port {}", + "".bright_black(), + "[3110]".bright_black() + ); + println!( + " --website {} Website {}", + "".bright_black(), + "[true]".bright_black() + ); + println!( + " --fetch {} Fetch prices {}", + "".bright_black(), + "[true]".bright_black() + ); println!(); - println!(" --bitcoindir {} Bitcoin directory {}", "".bright_black(), "[~/.bitcoin, ~/Library/...]".bright_black()); - println!(" --blocksdir {} Blocks directory {}", "".bright_black(), "[/blocks]".bright_black()); + println!( + " --bitcoindir {} Bitcoin directory {}", + "".bright_black(), + "[OS default]".bright_black() + ); + println!( + " --blocksdir {} Blocks directory {}", + "".bright_black(), + "[/blocks]".bright_black() + ); println!(); - println!(" --rpcconnect {} RPC host {}", "".bright_black(), "[localhost]".bright_black()); - println!(" --rpcport {} RPC port {}", "".bright_black(), "[8332]".bright_black()); - println!(" --rpccookiefile {} RPC cookie file {}", "".bright_black(), "[/.cookie]".bright_black()); - println!(" --rpcuser {} RPC username", "".bright_black()); - println!(" --rpcpassword {} RPC password", "".bright_black()); + println!( + " --rpcconnect {} RPC host {}", + "".bright_black(), + "[localhost]".bright_black() + ); + println!( + " --rpcport {} RPC port {}", + "".bright_black(), + "[8332]".bright_black() + ); + println!( + " --rpccookiefile {} RPC cookie file {}", + "".bright_black(), + "[/.cookie]".bright_black() + ); + println!( + " --rpcuser {} RPC username", + "".bright_black() + ); + println!( + " --rpcpassword {} RPC password", + "".bright_black() + ); + println!(); + println!("{}", "ENVIRONMENT:".bold()); + println!( + " LOG={} Log level {}", + "".bright_black(), + "[info]".bright_black() + ); + println!( + " RUST_LOG={} Full log filter", + "".bright_black() + ); + println!(); + println!("{}", "CONFIG:".bold()); + println!( + " Edit {} to persist settings:", + "~/.brk/config.toml".bright_black() + ); + println!( + " {}", + "brkdir = \"/path/to/data\"".bright_black() + ); + println!( + " {}", + "bitcoindir = \"/path/to/.bitcoin\"".bright_black() + ); } fn check(&self) { @@ -216,10 +285,6 @@ Finally, you can run the program with '-h' for help." ) } - fn write(&self, path: &Path) -> std::io::Result<()> { - fs::write(path, toml::to_string(self).unwrap()) - } - pub fn rpc(&self) -> Result { Client::new( &format!( @@ -300,7 +365,6 @@ Finally, you can run the program with '-h' for help." self.fetch() .then(|| Fetcher::import(Some(self.harsdir().as_path())).unwrap()) } - } fn default_on_error<'de, D, T>(deserializer: D) -> Result diff --git a/crates/brk_logger/README.md b/crates/brk_logger/README.md index d7ea5748c..b5ec35763 100644 --- a/crates/brk_logger/README.md +++ b/crates/brk_logger/README.md @@ -13,6 +13,11 @@ Drop-in logging initialization that silences noisy dependencies (bitcoin, fjall, - **Sensible defaults**: Pre-configured filters silence common verbose libraries - **Timestamp formatting**: Uses system timezone via jiff +## Environment Variables + +- `LOG` - Set log level (default: `info` in release, `debug` in dev). Example: `LOG=debug brk` +- `RUST_LOG` - Full control over filtering (overrides all defaults) + ## Core API ```rust,ignore diff --git a/crates/brk_logger/src/lib.rs b/crates/brk_logger/src/lib.rs index 3fd0aa8b4..237ac7495 100644 --- a/crates/brk_logger/src/lib.rs +++ b/crates/brk_logger/src/lib.rs @@ -23,9 +23,11 @@ pub fn init(path: Option<&Path>) -> io::Result<()> { #[cfg(not(debug_assertions))] const DEFAULT_LEVEL: &str = "info"; + let level = std::env::var("LOG").unwrap_or_else(|_| DEFAULT_LEVEL.to_string()); + let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| { EnvFilter::new(format!( - "{DEFAULT_LEVEL},bitcoin=off,bitcoincore-rpc=off,fjall=off,brk_fjall=off,lsm_tree=off,brk_rolldown=off,rolldown=off,tracing=off,aide=off,rustls=off,notify=off,oxc_resolver=off,tower_http=off" + "{level},bitcoin=off,bitcoincore-rpc=off,fjall=off,brk_fjall=off,lsm_tree=off,brk_rolldown=off,rolldown=off,tracing=off,aide=off,rustls=off,notify=off,oxc_resolver=off,tower_http=off" )) }); diff --git a/crates/brk_logger/src/rate_limit.rs b/crates/brk_logger/src/rate_limit.rs index 065404e0c..02af3a198 100644 --- a/crates/brk_logger/src/rate_limit.rs +++ b/crates/brk_logger/src/rate_limit.rs @@ -43,7 +43,7 @@ impl Inner { .to_zoned(tz::TimeZone::system()) .strftime("%Y-%m-%d") .to_string(); - self.dir.join(format!("{}.{}", self.prefix, date)) + self.dir.join(format!("{}_{}.txt", self.prefix, date)) } }