jso normalise

This commit is contained in:
Richard
2026-02-04 20:34:40 +00:00
parent 7ad031c6a9
commit 6732647655

View File

@@ -41,6 +41,10 @@ struct Args {
/// jq expression(s) to evaluate on JSON text messages for logging (can be specified multiple times) /// jq expression(s) to evaluate on JSON text messages for logging (can be specified multiple times)
#[arg(short = 'j', long = "jaq")] #[arg(short = 'j', long = "jaq")]
jaq: Vec<String>, jaq: Vec<String>,
/// Normalize JSON messages: save as .json with pretty-printing and sorted keys (for easier diffing)
#[arg(short = 'n', long = "json-normalize")]
json_normalize: bool,
} }
#[tokio::main] #[tokio::main]
@@ -263,6 +267,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
for (letter, url, ws_stream) in connections { for (letter, url, ws_stream) in connections {
let session_dir = session_dir.clone(); let session_dir = session_dir.clone();
let jaq_filters = jaq_filters.clone(); let jaq_filters = jaq_filters.clone();
let json_normalize = args.json_normalize;
join_set.spawn(async move { join_set.spawn(async move {
let (_, mut read) = ws_stream.split(); let (_, mut read) = ws_stream.split();
@@ -336,10 +341,30 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
} }
} }
// Always write full message to file // Write message to file
let filename = let (filename, content) = if json_normalize {
session_dir.join(format!("{}{}.txt", letter, seq_num)); if let Ok(json_val) =
if let Err(e) = fs::write(&filename, &text) { serde_json::from_str::<serde_json::Value>(&text)
{
let pretty =
serde_json::to_string_pretty(&json_val).unwrap_or(text.clone());
(
session_dir.join(format!("{}{}.json", letter, seq_num)),
pretty,
)
} else {
(
session_dir.join(format!("{}{}.txt", letter, seq_num)),
text.clone(),
)
}
} else {
(
session_dir.join(format!("{}{}.txt", letter, seq_num)),
text.clone(),
)
};
if let Err(e) = fs::write(&filename, content) {
error!("[{}] Failed to write {:?}: {}", letter, filename, e); error!("[{}] Failed to write {:?}: {}", letter, filename, e);
} }
} }