mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
scuba: add a way to log sampled out rows in verbose mode
Summary: This allows us to log sampled messages, but reserves an option of falling back to full verbose logging in critical situations. Note that while this might be a desired behavior in most cases, it's certainly not always the right thing to do: sometimes sampled data needs to remain sampled, even for verbose logging. Reviewed By: ahornby Differential Revision: D26148454 fbshipit-source-id: c6ff9d1b05c9cec4895181e008ef6483884bb483
This commit is contained in:
parent
468505dc5a
commit
27fb78b1fa
@ -12,8 +12,8 @@ use futures_ext::BoxFuture;
|
||||
use futures_stats::{FutureStats, StreamStats};
|
||||
use itertools::join;
|
||||
use observability::{ObservabilityContext, ScubaLoggingDecisionFields, ScubaVerbosityLevel};
|
||||
pub use scuba::ScubaValue;
|
||||
use scuba::{builder::ServerData, Sampling, ScubaSample, ScubaSampleBuilder};
|
||||
use scuba::{builder::ServerData, ScubaSample, ScubaSampleBuilder};
|
||||
pub use scuba::{Sampling, ScubaValue};
|
||||
use sshrelay::{Metadata, Preamble};
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::convert::TryInto;
|
||||
@ -35,6 +35,9 @@ pub use scribe_ext::ScribeClientImplementation;
|
||||
pub struct MononokeScubaSampleBuilder {
|
||||
inner: ScubaSampleBuilder,
|
||||
maybe_observability_context: Option<ObservabilityContext>,
|
||||
// This field decides if sampled out requests should
|
||||
// still be logged when verbose logging is enabled
|
||||
fallback_sampled_out_to_verbose: bool,
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for MononokeScubaSampleBuilder {
|
||||
@ -48,6 +51,7 @@ impl MononokeScubaSampleBuilder {
|
||||
Self {
|
||||
inner: ScubaSampleBuilder::new(fb, scuba_table),
|
||||
maybe_observability_context: None,
|
||||
fallback_sampled_out_to_verbose: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -55,6 +59,7 @@ impl MononokeScubaSampleBuilder {
|
||||
Self {
|
||||
inner: ScubaSampleBuilder::with_discard(),
|
||||
maybe_observability_context: None,
|
||||
fallback_sampled_out_to_verbose: false,
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,7 +133,17 @@ impl MononokeScubaSampleBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
|
||||
pub fn log_with_msg<S: Into<Option<String>>>(&mut self, log_tag: &str, msg: S) {
|
||||
if self.fallback_sampled_out_to_verbose
|
||||
&& self.should_log_with_level(ScubaVerbosityLevel::Verbose)
|
||||
{
|
||||
// We need to unsample before we log, so that
|
||||
// `sample_rate` field is not added, as we are about
|
||||
// to log everything.
|
||||
self.inner.unsampled();
|
||||
}
|
||||
|
||||
self.inner.add("log_tag", log_tag);
|
||||
if let Some(mut msg) = msg.into() {
|
||||
match tunables().get_max_scuba_msg_length().try_into() {
|
||||
@ -197,10 +212,18 @@ impl MononokeScubaSampleBuilder {
|
||||
}
|
||||
|
||||
pub fn sampled(&mut self, sample_rate: NonZeroU64) -> &mut Self {
|
||||
self.fallback_sampled_out_to_verbose = false;
|
||||
self.inner.sampled(sample_rate);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn sampled_unless_verbose(&mut self, sample_rate: NonZeroU64) -> &mut Self {
|
||||
self.fallback_sampled_out_to_verbose = true;
|
||||
self.inner.sampled(sample_rate);
|
||||
self
|
||||
}
|
||||
|
||||
|
||||
pub fn unsampled(&mut self) -> &mut Self {
|
||||
self.inner.unsampled();
|
||||
self
|
||||
|
Loading…
Reference in New Issue
Block a user