notmuch: add instrumentation to most public methods

This commit is contained in:
Bill Thiede 2024-12-26 11:12:47 -08:00
parent 7c7a8c0dcb
commit 777f33e212
3 changed files with 15 additions and 0 deletions

1
Cargo.lock generated
View File

@ -3393,6 +3393,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"thiserror 1.0.69", "thiserror 1.0.69",
"tracing",
] ]
[[package]] [[package]]

View File

@ -10,6 +10,7 @@ log = "0.4.14"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = { version = "1.0", features = ["unbounded_depth"] } serde_json = { version = "1.0", features = ["unbounded_depth"] }
thiserror = "1.0.30" thiserror = "1.0.30"
tracing = "0.1.41"
[dev-dependencies] [dev-dependencies]
itertools = "0.10.1" itertools = "0.10.1"

View File

@ -215,6 +215,7 @@ use std::{
use log::{error, info}; use log::{error, info};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tracing::instrument;
/// # Number of seconds since the Epoch /// # Number of seconds since the Epoch
pub type UnixTime = isize; pub type UnixTime = isize;
@ -474,6 +475,7 @@ impl Notmuch {
} }
} }
#[instrument(skip_all)]
pub fn new(&self) -> Result<Vec<u8>, NotmuchError> { pub fn new(&self) -> Result<Vec<u8>, NotmuchError> {
self.run_notmuch(["new"]) self.run_notmuch(["new"])
} }
@ -482,6 +484,7 @@ impl Notmuch {
self.run_notmuch(std::iter::empty::<&str>()) self.run_notmuch(std::iter::empty::<&str>())
} }
#[instrument(skip_all, fields(query=query))]
pub fn tags_for_query(&self, query: &str) -> Result<Vec<String>, NotmuchError> { pub fn tags_for_query(&self, query: &str) -> Result<Vec<String>, NotmuchError> {
let res = self.run_notmuch(["search", "--format=json", "--output=tags", query])?; let res = self.run_notmuch(["search", "--format=json", "--output=tags", query])?;
Ok(serde_json::from_slice(&res)?) Ok(serde_json::from_slice(&res)?)
@ -491,16 +494,19 @@ impl Notmuch {
self.tags_for_query("*") self.tags_for_query("*")
} }
#[instrument(skip_all, fields(tag=tag,search_term=search_term))]
pub fn tag_add(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> { pub fn tag_add(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> {
self.run_notmuch(["tag", &format!("+{tag}"), search_term])?; self.run_notmuch(["tag", &format!("+{tag}"), search_term])?;
Ok(()) Ok(())
} }
#[instrument(skip_all, fields(tag=tag,search_term=search_term))]
pub fn tag_remove(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> { pub fn tag_remove(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> {
self.run_notmuch(["tag", &format!("-{tag}"), search_term])?; self.run_notmuch(["tag", &format!("-{tag}"), search_term])?;
Ok(()) Ok(())
} }
#[instrument(skip_all, fields(query=query,offset=offset,limit=limit))]
pub fn search( pub fn search(
&self, &self,
query: &str, query: &str,
@ -524,6 +530,7 @@ impl Notmuch {
})) }))
} }
#[instrument(skip_all, fields(query=query))]
pub fn count(&self, query: &str) -> Result<usize, NotmuchError> { pub fn count(&self, query: &str) -> Result<usize, NotmuchError> {
// NOTE: --output=threads is technically more correct, but really slow // NOTE: --output=threads is technically more correct, but really slow
// TODO: find a fast thread count path // TODO: find a fast thread count path
@ -536,6 +543,7 @@ impl Notmuch {
.unwrap_or(0)) .unwrap_or(0))
} }
#[instrument(skip_all, fields(query=query))]
pub fn show(&self, query: &str) -> Result<ThreadSet, NotmuchError> { pub fn show(&self, query: &str) -> Result<ThreadSet, NotmuchError> {
let slice = self.run_notmuch([ let slice = self.run_notmuch([
"show", "show",
@ -554,6 +562,7 @@ impl Notmuch {
Ok(val) Ok(val)
} }
#[instrument(skip_all, fields(query=query,part=part))]
pub fn show_part(&self, query: &str, part: usize) -> Result<Part, NotmuchError> { pub fn show_part(&self, query: &str, part: usize) -> Result<Part, NotmuchError> {
let slice = self.run_notmuch([ let slice = self.run_notmuch([
"show", "show",
@ -573,20 +582,24 @@ impl Notmuch {
Ok(val) Ok(val)
} }
#[instrument(skip_all, fields(id=id))]
pub fn show_original(&self, id: &MessageId) -> Result<Vec<u8>, NotmuchError> { pub fn show_original(&self, id: &MessageId) -> Result<Vec<u8>, NotmuchError> {
self.show_original_part(id, 0) self.show_original_part(id, 0)
} }
#[instrument(skip_all, fields(id=id,part=part))]
pub fn show_original_part(&self, id: &MessageId, part: usize) -> Result<Vec<u8>, NotmuchError> { pub fn show_original_part(&self, id: &MessageId, part: usize) -> Result<Vec<u8>, NotmuchError> {
let res = self.run_notmuch(["show", "--part", &part.to_string(), id])?; let res = self.run_notmuch(["show", "--part", &part.to_string(), id])?;
Ok(res) Ok(res)
} }
#[instrument(skip_all, fields(query=query))]
pub fn message_ids(&self, query: &str) -> Result<Vec<String>, NotmuchError> { pub fn message_ids(&self, query: &str) -> Result<Vec<String>, NotmuchError> {
let res = self.run_notmuch(["search", "--output=messages", "--format=json", query])?; let res = self.run_notmuch(["search", "--output=messages", "--format=json", query])?;
Ok(serde_json::from_slice(&res)?) Ok(serde_json::from_slice(&res)?)
} }
#[instrument(skip_all, fields(query=query))]
pub fn files(&self, query: &str) -> Result<Vec<String>, NotmuchError> { pub fn files(&self, query: &str) -> Result<Vec<String>, NotmuchError> {
let res = self.run_notmuch(["search", "--output=files", "--format=json", query])?; let res = self.run_notmuch(["search", "--output=files", "--format=json", query])?;
Ok(serde_json::from_slice(&res)?) Ok(serde_json::from_slice(&res)?)