Skip to content

Commit 0913923

Browse files
committed
WIP logging sql.rs without context
1 parent dd46294 commit 0913923

File tree

5 files changed

+94
-13
lines changed

5 files changed

+94
-13
lines changed

Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ once_cell = "1.17.0"
5252
percent-encoding = "2.2"
5353
pgp = { version = "0.9", default-features = false }
5454
tracing = "0.1"
55-
tracing-subscriber = { version = "0.3", default-features=false, features = ["std", "env-filter", "fmt"] }
55+
tracing-subscriber = { version = "0.3", default-features=false, features = ["std", "env-filter", "registry"] }
56+
tracing-futures = "0.2"
5657
quick-xml = "0.27"
5758
r2d2 = "0.8"
5859
r2d2_sqlite = "0.20"
@@ -140,7 +141,7 @@ harness = false
140141
[features]
141142
default = ["vendored"]
142143
internals = []
143-
repl = ["internals", "rustyline", "ansi_term", "dirs"]
144+
repl = ["internals", "rustyline", "ansi_term", "dirs", "tracing-subscriber/fmt"]
144145
vendored = [
145146
"async-native-tls/vendored",
146147
"async-smtp/native-tls-vendored",

src/context.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ use std::path::{Path, PathBuf};
99
use std::sync::Arc;
1010
use std::time::{Duration, Instant, SystemTime};
1111

12+
use crate::log::EventLayer;
1213
use anyhow::{ensure, Result};
1314
use async_channel::{self as channel, Receiver, Sender};
1415
use tokio::sync::{Mutex, RwLock};
16+
use tracing_futures::WithSubscriber;
17+
use tracing_subscriber::{prelude::*, registry::Registry, EnvFilter};
1518

1619
use crate::chat::{get_chat_cnt, ChatId};
1720
use crate::config::Config;
@@ -279,11 +282,20 @@ impl Context {
279282
events: Events,
280283
stock_strings: StockStrings,
281284
) -> Result<Context> {
282-
let context = Self::new_closed(dbfile, id, events, stock_strings).await?;
285+
let context = Self::new_closed(dbfile, id, events.clone(), stock_strings).await?;
283286

284287
// Open the database if is not encrypted.
285288
if context.check_passphrase("".to_string()).await? {
286-
context.sql.open(&context, "".to_string()).await?;
289+
let filter =
290+
EnvFilter::try_from_default_env().or_else(|_| EnvFilter::try_new("info"))?;
291+
let subscriber = Registry::default()
292+
.with(filter)
293+
.with(EventLayer::new(id, events));
294+
context
295+
.sql
296+
.open(&context, "".to_string())
297+
.with_subscriber(subscriber)
298+
.await?;
287299
}
288300
Ok(context)
289301
}

src/log.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,63 @@
22
33
#![allow(missing_docs)]
44

5+
use std::fmt::Write;
6+
7+
use tracing::Level;
8+
use tracing_subscriber::Layer;
9+
510
use crate::context::Context;
11+
use crate::events::{Event, EventType, Events};
12+
13+
#[derive(Debug)]
14+
struct MessageStorage<'a>(&'a mut String);
15+
16+
impl tracing::field::Visit for MessageStorage<'_> {
17+
fn record_debug(&mut self, field: &tracing::field::Field, value: &dyn std::fmt::Debug) {
18+
if field.name() == "message" {
19+
write!(self.0, "{:?}", value).ok();
20+
}
21+
}
22+
}
23+
24+
#[derive(Debug)]
25+
pub(crate) struct EventLayer {
26+
context_id: u32,
27+
events: Events,
28+
}
29+
30+
impl EventLayer {
31+
pub(crate) fn new(context_id: u32, events: Events) -> Self {
32+
Self { context_id, events }
33+
}
34+
}
35+
36+
impl<S> Layer<S> for EventLayer
37+
where
38+
S: tracing::Subscriber,
39+
{
40+
fn on_event(
41+
&self,
42+
event: &tracing::Event<'_>,
43+
_ctx: tracing_subscriber::layer::Context<'_, S>,
44+
) {
45+
let &level = event.metadata().level();
46+
47+
let mut message = "".to_string();
48+
let mut visitor = MessageStorage(&mut message);
49+
event.record(&mut visitor);
50+
51+
if level == Level::INFO {
52+
let dbg_message = message.clone();
53+
eprintln!("INFO id={}!!! {}", self.context_id, &dbg_message);
54+
self.events.emit(Event {
55+
id: self.context_id,
56+
typ: EventType::Info(message),
57+
});
58+
eprintln!("EMITTED INFO!!! {}", &dbg_message);
59+
}
60+
}
61+
}
662

763
#[macro_export]
864
macro_rules! info {

src/sql.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ use crate::param::{Param, Params};
2424
use crate::peerstate::{deduplicate_peerstates, Peerstate};
2525
use crate::stock_str;
2626
use crate::tools::{delete_file, time};
27-
use crate::{error, info, warn};
27+
use crate::{error, warn};
28+
use tracing::info;
2829

2930
#[macro_export]
3031
macro_rules! paramsv {
@@ -267,7 +268,7 @@ impl Sql {
267268
// the structure is complete now and all objects are usable
268269

269270
if recalc_fingerprints {
270-
info!(context, "[migration] recalc fingerprints");
271+
info!("[migration] recalc fingerprints");
271272
let addrs = self
272273
.query_map(
273274
"SELECT addr FROM acpeerstates;",
@@ -342,7 +343,7 @@ impl Sql {
342343
self.close().await;
343344
Err(err)
344345
} else {
345-
info!(context, "Opened database {:?}.", self.dbfile);
346+
info!("Opened database {:?}.", self.dbfile);
346347
*self.is_encrypted.write().await = Some(passphrase_nonempty);
347348
Ok(())
348349
}
@@ -677,15 +678,15 @@ pub async fn housekeeping(context: &Context) -> Result<()> {
677678
.await
678679
.ok_or_log_msg(context, "failed to remove old MDNs");
679680

680-
info!(context, "Housekeeping done.");
681+
info!("Housekeeping done.");
681682
Ok(())
682683
}
683684

684685
pub async fn remove_unused_files(context: &Context) -> Result<()> {
685686
let mut files_in_use = HashSet::new();
686687
let mut unreferenced_count = 0;
687688

688-
info!(context, "Start housekeeping...");
689+
info!("Start housekeeping...");
689690
maybe_add_from_param(
690691
&context.sql,
691692
&mut files_in_use,
@@ -731,7 +732,7 @@ pub async fn remove_unused_files(context: &Context) -> Result<()> {
731732
.await
732733
.context("housekeeping: failed to SELECT value FROM config")?;
733734

734-
info!(context, "{} files in use.", files_in_use.len(),);
735+
info!("{} files in use.", files_in_use.len(),);
735736
/* go through directory and delete unused files */
736737
let p = context.get_blobdir();
737738
match tokio::fs::read_dir(p).await {
@@ -768,7 +769,6 @@ pub async fn remove_unused_files(context: &Context) -> Result<()> {
768769

769770
if recently_created || recently_modified || recently_accessed {
770771
info!(
771-
context,
772772
"Housekeeping: Keeping new unreferenced file #{}: {:?}",
773773
unreferenced_count,
774774
entry.file_name(),
@@ -777,7 +777,6 @@ pub async fn remove_unused_files(context: &Context) -> Result<()> {
777777
}
778778
}
779779
info!(
780-
context,
781780
"Housekeeping: Deleting unreferenced file #{}: {:?}",
782781
unreferenced_count,
783782
entry.file_name()
@@ -1050,7 +1049,9 @@ mod tests {
10501049
assert!(!disable_server_delete);
10511050
assert!(!recode_avatar);
10521051

1053-
info!(&t, "test_migration_flags: XXX END MARKER");
1052+
t.emit_event(crate::EventType::Info(
1053+
"test_migration_flags: XXX END MARKER".to_string(),
1054+
));
10541055

10551056
loop {
10561057
let evt = t

0 commit comments

Comments
 (0)