mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-08-23 05:25:26 -04:00
fix: hoist state
This commit is contained in:
parent
cccbba0db2
commit
b060c75cc7
3 changed files with 29 additions and 11 deletions
|
@ -72,12 +72,14 @@ macro_rules! regex_find_placeholders {
|
||||||
///
|
///
|
||||||
/// If specified, filter by swap id or redact addresses.
|
/// If specified, filter by swap id or redact addresses.
|
||||||
pub async fn get_logs(logs_dir: PathBuf, swap_id: Option<Uuid>, redact_addresses: bool) -> anyhow::Result<Vec<String>> {
|
pub async fn get_logs(logs_dir: PathBuf, swap_id: Option<Uuid>, redact_addresses: bool) -> anyhow::Result<Vec<String>> {
|
||||||
tracing::debug!(logs_dir=%logs_dir.display(), "reading logfiles from");
|
tracing::debug!("reading logfiles from {}", logs_dir.display());
|
||||||
|
|
||||||
// get all files in the directory
|
// get all files in the directory
|
||||||
let mut log_files = read_dir(&logs_dir).await?;
|
let mut log_files = read_dir(&logs_dir).await?;
|
||||||
|
|
||||||
let mut log_messages = Vec::new();
|
let mut log_messages = Vec::new();
|
||||||
|
// when we redact we need to store the placeholder
|
||||||
|
let mut placeholders = HashMap::new();
|
||||||
|
|
||||||
// print all lines from every log file. TODO: sort files by date?
|
// print all lines from every log file. TODO: sort files by date?
|
||||||
while let Some(entry) = log_files.next_entry().await? {
|
while let Some(entry) = log_files.next_entry().await? {
|
||||||
|
@ -94,20 +96,30 @@ pub async fn get_logs(logs_dir: PathBuf, swap_id: Option<Uuid>, redact_addresses
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// use BufReader to stay easy on memory and then read line by line
|
||||||
let buf_reader = BufReader::new(File::open(&file_path).await?);
|
let buf_reader = BufReader::new(File::open(&file_path).await?);
|
||||||
let mut lines = buf_reader.lines();
|
let mut lines = buf_reader.lines();
|
||||||
|
|
||||||
// print each line, redacted if the flag is set
|
// print each line, redacted if the flag is set
|
||||||
while let Some(line) = lines.next_line().await? {
|
while let Some(line) = lines.next_line().await? {
|
||||||
// check if we should filter this line
|
// if we should filter by swap id, check if the line contains it
|
||||||
if let Some(swap_id) = swap_id {
|
if let Some(swap_id) = swap_id {
|
||||||
if line.contains(&swap_id.to_string()) {
|
if !line.contains(&swap_id.to_string()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if line.contains(r#""level":"TRACE""#) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// skip debug logs
|
||||||
|
if line.contains(r#""level":"DEBUG""#) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// redact if necessary
|
// redact if necessary
|
||||||
let line = if redact_addresses { redact(&line) } else { line };
|
let line = if redact_addresses { redact_with(&line, &mut placeholders) } else { line };
|
||||||
// save redacted message
|
// save redacted message
|
||||||
log_messages.push(line);
|
log_messages.push(line);
|
||||||
}
|
}
|
||||||
|
@ -127,11 +139,14 @@ pub async fn get_logs(logs_dir: PathBuf, swap_id: Option<Uuid>, redact_addresses
|
||||||
/// assert_eq!(redacted, "<swap_id_0>");
|
/// assert_eq!(redacted, "<swap_id_0>");
|
||||||
/// ```
|
/// ```
|
||||||
pub fn redact(input: &str) -> String {
|
pub fn redact(input: &str) -> String {
|
||||||
// Use a hashmap to keep track of which address we replace with which placeholder
|
let mut replacements = HashMap::new();
|
||||||
let mut replacements: HashMap<String, String> = HashMap::new();
|
redact_with(input, &mut replacements)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Same as [`redact`] but retrieves palceholders from and stores them
|
||||||
|
/// in a specified hashmap.
|
||||||
|
pub fn redact_with(input: &str, replacements: &mut HashMap<String, String>) -> String {
|
||||||
// TODO: verify regex patterns
|
// TODO: verify regex patterns
|
||||||
|
|
||||||
const MONERO_ADDR_REGEX: &str = r#"[48][1-9A-HJ-NP-Za-km-z]{94}"#;
|
const MONERO_ADDR_REGEX: &str = r#"[48][1-9A-HJ-NP-Za-km-z]{94}"#;
|
||||||
const BITCOIN_ADDR_REGEX: &str = r#"\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b"#;
|
const BITCOIN_ADDR_REGEX: &str = r#"\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b"#;
|
||||||
// Both XMR and BTC transactions have
|
// Both XMR and BTC transactions have
|
||||||
|
@ -173,7 +188,6 @@ pub fn redact(input: &str) -> String {
|
||||||
// Finally we go through the input string and replace each occurance of an
|
// Finally we go through the input string and replace each occurance of an
|
||||||
// address we want to redact with the corresponding placeholder
|
// address we want to redact with the corresponding placeholder
|
||||||
for (address, placeholder) in replacements.iter() {
|
for (address, placeholder) in replacements.iter() {
|
||||||
println!("replacing `{address}` with `{placeholder}`");
|
|
||||||
redacted = redacted.replace(address, placeholder);
|
redacted = redacted.replace(address, placeholder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use tracing::Level;
|
||||||
use tracing_subscriber::filter::LevelFilter;
|
use tracing_subscriber::filter::LevelFilter;
|
||||||
use tracing_subscriber::fmt::time::UtcTime;
|
use tracing_subscriber::fmt::time::UtcTime;
|
||||||
use tracing_subscriber::layer::SubscriberExt;
|
use tracing_subscriber::layer::SubscriberExt;
|
||||||
|
@ -36,7 +37,8 @@ pub fn init(
|
||||||
.with_ansi(false)
|
.with_ansi(false)
|
||||||
.with_timer(UtcTime::rfc_3339())
|
.with_timer(UtcTime::rfc_3339())
|
||||||
.with_target(false)
|
.with_target(false)
|
||||||
.json();
|
.json()
|
||||||
|
.with_filter(LevelFilter::from_level(Level::DEBUG));
|
||||||
|
|
||||||
// terminal logger
|
// terminal logger
|
||||||
let is_terminal = atty::is(atty::Stream::Stderr);
|
let is_terminal = atty::is(atty::Stream::Stderr);
|
||||||
|
|
|
@ -5,7 +5,7 @@ use anyhow::{anyhow, Context, Result};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use libp2p::{Multiaddr, PeerId};
|
use libp2p::{Multiaddr, PeerId};
|
||||||
use sqlx::sqlite::{Sqlite, SqliteConnectOptions};
|
use sqlx::sqlite::{Sqlite, SqliteConnectOptions};
|
||||||
use sqlx::{Pool, SqlitePool};
|
use sqlx::{ConnectOptions, Pool, SqlitePool};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
@ -26,7 +26,9 @@ impl SqliteDatabase {
|
||||||
let read_only = matches!(access_mode, AccessMode::ReadOnly);
|
let read_only = matches!(access_mode, AccessMode::ReadOnly);
|
||||||
|
|
||||||
let path_str = format!("sqlite:{}", path.as_ref().display());
|
let path_str = format!("sqlite:{}", path.as_ref().display());
|
||||||
let options = SqliteConnectOptions::from_str(&path_str)?.read_only(read_only);
|
let mut options = SqliteConnectOptions::from_str(&path_str)?
|
||||||
|
.read_only(read_only);
|
||||||
|
options.disable_statement_logging();
|
||||||
|
|
||||||
let pool = SqlitePool::connect_with(options).await?;
|
let pool = SqlitePool::connect_with(options).await?;
|
||||||
let mut sqlite = Self { pool };
|
let mut sqlite = Self { pool };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue