mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 14:28:17 +03:00
sampling: move serialization into "sampling" crate
Summary: This way any code can skip tracing and directly output a "sampled" value. I want to log a list of values, which isn't convenient using tracing. Reviewed By: quark-zju Differential Revision: D49509125 fbshipit-source-id: c6a684dcb7a13572460ddb9a7678ffebee80f9ce
This commit is contained in:
parent
5ae6da8b04
commit
25d6a8c2ba
@ -9,4 +9,6 @@ edition = "2021"
|
||||
configmodel = { version = "0.1.0", path = "../config/model" }
|
||||
once_cell = "1.12"
|
||||
parking_lot = { version = "0.12.1", features = ["send_guard"] }
|
||||
serde = { version = "1.0.185", features = ["derive", "rc"] }
|
||||
serde_json = { version = "1.0.100", features = ["float_roundtrip", "unbounded_depth"] }
|
||||
tracing = "0.1.35"
|
||||
|
@ -15,6 +15,10 @@ use std::sync::Arc;
|
||||
use once_cell::sync::OnceCell;
|
||||
use parking_lot::Mutex;
|
||||
use parking_lot::MutexGuard;
|
||||
use serde::ser::Serialize;
|
||||
use serde::ser::SerializeMap;
|
||||
use serde::Serializer;
|
||||
use serde_json::Serializer as JsonSerializer;
|
||||
|
||||
pub static CONFIG: OnceCell<Option<Arc<SamplingConfig>>> = OnceCell::new();
|
||||
|
||||
@ -86,6 +90,23 @@ impl SamplingConfig {
|
||||
pub fn file(&self) -> MutexGuard<File> {
|
||||
self.file.lock()
|
||||
}
|
||||
|
||||
pub fn append<V: ?Sized>(&self, category: &str, value: &V) -> std::io::Result<()>
|
||||
where
|
||||
V: Serialize,
|
||||
{
|
||||
let mut file = self.file();
|
||||
let mut serializer = JsonSerializer::new(&*file);
|
||||
|
||||
let mut serializer = serializer.serialize_map(None)?;
|
||||
serializer.serialize_entry("category", category)?;
|
||||
serializer.serialize_entry("data", value)?;
|
||||
serializer.end()?;
|
||||
|
||||
file.write_all(b"\0")?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// Returns tuple of output path and whether it's okay if the path already exists.
|
||||
|
@ -8,8 +8,6 @@ edition = "2021"
|
||||
[dependencies]
|
||||
once_cell = "1.12"
|
||||
sampling = { version = "0.1.0", path = "../sampling" }
|
||||
serde = { version = "1.0.185", features = ["derive", "rc"] }
|
||||
serde_json = { version = "1.0.100", features = ["float_roundtrip", "unbounded_depth"] }
|
||||
tracing = "0.1.35"
|
||||
tracing-serde = "0.1.3"
|
||||
tracing-subscriber = { version = "0.3.17", features = ["ansi", "env-filter", "fmt", "json", "local-time", "parking_lot", "registry"] }
|
||||
|
@ -5,14 +5,10 @@
|
||||
* GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
use std::io::Write;
|
||||
use std::sync::Arc;
|
||||
|
||||
use once_cell::sync::OnceCell;
|
||||
use sampling::SamplingConfig;
|
||||
use serde::ser::SerializeMap;
|
||||
use serde::ser::Serializer;
|
||||
use serde_json::Serializer as JsonSerializer;
|
||||
use tracing::subscriber::Interest;
|
||||
use tracing::Event;
|
||||
use tracing::Metadata;
|
||||
@ -51,21 +47,7 @@ impl<S: Subscriber> Layer<S> for SamplingLayer {
|
||||
None => return,
|
||||
};
|
||||
|
||||
let serialize = || -> std::io::Result<()> {
|
||||
let mut file = config.file();
|
||||
let mut serializer = JsonSerializer::new(&*file);
|
||||
|
||||
let mut serializer = serializer.serialize_map(None)?;
|
||||
serializer.serialize_entry("category", category)?;
|
||||
serializer.serialize_entry("data", &event.field_map())?;
|
||||
serializer.end()?;
|
||||
|
||||
file.write_all(b"\0")?;
|
||||
|
||||
Ok(())
|
||||
};
|
||||
|
||||
let _ = serialize();
|
||||
let _ = config.append(category, &event.field_map());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user