Skip to content

Commit

Permalink
Derive Debug trait for all structs and enums
Browse files Browse the repository at this point in the history
This allows all the structs and enums to easily be placed in a struct
which derives Debug itself.
  • Loading branch information
joshka committed Sep 2, 2024
1 parent 55273f0 commit bff5365
Show file tree
Hide file tree
Showing 31 changed files with 123 additions and 18 deletions.
1 change: 1 addition & 0 deletions metrics-exporter-prometheus/src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ pub enum BuildError {
ZeroBucketDuration,
}

#[derive(Debug)]
pub struct Snapshot {
pub counters: HashMap<String, HashMap<Vec<String>, u64>>,
pub gauges: HashMap<String, HashMap<Vec<String>, f64>>,
Expand Down
6 changes: 3 additions & 3 deletions metrics-exporter-prometheus/src/distribution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const DEFAULT_SUMMARY_BUCKET_COUNT: NonZeroU32 = match NonZeroU32::new(3) {
const DEFAULT_SUMMARY_BUCKET_DURATION: Duration = Duration::from_secs(20);

/// Distribution type.
#[derive(Clone)]
#[derive(Clone, Debug)]
pub enum Distribution {
/// A Prometheus histogram.
///
Expand Down Expand Up @@ -137,14 +137,14 @@ impl DistributionBuilder {
}
}

#[derive(Clone)]
#[derive(Clone, Debug)]
struct Bucket {
begin: Instant,
summary: Summary,
}

/// A `RollingSummary` manages a list of [Summary] so that old results can be expired.
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct RollingSummary {
// Buckets are ordered with the latest buckets first. The buckets are kept in alignment based
// on the instant of the first added bucket and the bucket_duration. There may be gaps in the
Expand Down
1 change: 1 addition & 0 deletions metrics-exporter-prometheus/src/exporter/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ use super::ExporterConfig;
use super::ExporterFuture;

/// Builder for creating and installing a Prometheus recorder/exporter.
#[derive(Debug)]
pub struct PrometheusBuilder {
#[cfg_attr(not(any(feature = "http-listener", feature = "push-gateway")), allow(dead_code))]
exporter_config: ExporterConfig,
Expand Down
1 change: 1 addition & 0 deletions metrics-exporter-prometheus/src/exporter/http_listener.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ enum ListenerType {
}

/// Error type for HTTP listening.
#[derive(Debug)]
pub enum HttpListeningError {
Hyper(hyper::Error),
Io(std::io::Error),
Expand Down
5 changes: 3 additions & 2 deletions metrics-exporter-prometheus/src/exporter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use hyper::Uri;

/// Error types possible from an exporter
#[cfg(any(feature = "http-listener", feature = "push-gateway"))]
#[derive(Debug)]
pub enum ExporterError {
#[cfg(feature = "http-listener")]
HttpListener(HttpListeningError),
Expand All @@ -24,14 +25,14 @@ pub enum ExporterError {
pub type ExporterFuture = Pin<Box<dyn Future<Output = Result<(), ExporterError>> + Send + 'static>>;

#[cfg(feature = "http-listener")]
#[derive(Clone)]
#[derive(Clone, Debug)]
enum ListenDestination {
Tcp(SocketAddr),
#[cfg(feature = "uds-listener")]
Uds(std::path::PathBuf),
}

#[derive(Clone)]
#[derive(Clone, Debug)]
enum ExporterConfig {
// Run an HTTP listener on the given `listen_address`.
#[cfg(feature = "http-listener")]
Expand Down
4 changes: 3 additions & 1 deletion metrics-exporter-prometheus/src/recorder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ use crate::formatting::{
};
use crate::registry::GenerationalAtomicStorage;

#[derive(Debug)]
pub(crate) struct Inner {
pub registry: Registry<Key, GenerationalAtomicStorage>,
pub recency: Recency<Key>,
Expand Down Expand Up @@ -214,6 +215,7 @@ impl Inner {
/// Most users will not need to interact directly with the recorder, and can simply deal with the
/// builder methods on [`PrometheusBuilder`](crate::PrometheusBuilder) for building and installing
/// the recorder/exporter.
#[derive(Debug)]
pub struct PrometheusRecorder {
inner: Arc<Inner>,
}
Expand Down Expand Up @@ -275,7 +277,7 @@ impl Recorder for PrometheusRecorder {
/// handled directly by the HTTP listener, or push gateway background task. [`PrometheusHandle`]
/// allows rendering a snapshot of the current metrics stored by an installed [`PrometheusRecorder`]
/// as a payload conforming to the Prometheus exposition format.
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct PrometheusHandle {
inner: Arc<Inner>,
}
Expand Down
2 changes: 2 additions & 0 deletions metrics-exporter-prometheus/src/registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use quanta::Instant;
pub type GenerationalAtomicStorage = GenerationalStorage<AtomicStorage>;

/// Atomic metric storage for the prometheus exporter.
#[derive(Debug)]
pub struct AtomicStorage;

impl<K> metrics_util::registry::Storage<K> for AtomicStorage {
Expand All @@ -28,6 +29,7 @@ impl<K> metrics_util::registry::Storage<K> for AtomicStorage {
}

/// An `AtomicBucket` newtype wrapper that tracks the time of value insertion.
#[derive(Debug)]
pub struct AtomicBucketInstant<T> {
inner: AtomicBucket<(T, Instant)>,
}
Expand Down
4 changes: 4 additions & 0 deletions metrics-exporter-tcp/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ impl std::error::Error for Error {
}
}

#[derive(Debug)]
struct State {
client_count: AtomicUsize,
should_send: AtomicBool,
Expand Down Expand Up @@ -188,6 +189,7 @@ impl State {
}
}

#[derive(Debug)]
struct Handle {
key: Key,
state: Arc<State>,
Expand Down Expand Up @@ -230,11 +232,13 @@ impl HistogramFn for Handle {
}

/// A TCP recorder.
#[derive(Debug)]
pub struct TcpRecorder {
state: Arc<State>,
}

/// Builder for creating and installing a TCP recorder/exporter.
#[derive(Debug)]
pub struct TcpBuilder {
listen_addr: SocketAddr,
buffer_size: Option<usize>,
Expand Down
2 changes: 1 addition & 1 deletion metrics-tracing-context/src/label_filter.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Label filtering.
use std::collections::HashSet;
use std::{collections::HashSet, fmt::Debug};

use metrics::{KeyName, Label};

Expand Down
2 changes: 2 additions & 0 deletions metrics-tracing-context/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ use tracing_integration::Map;
pub use tracing_integration::{Labels, MetricsLayer};

/// [`TracingContextLayer`] provides an implementation of a [`Layer`] for [`TracingContext`].
#[derive(Debug)]
pub struct TracingContextLayer<F> {
label_filter: F,
}
Expand Down Expand Up @@ -156,6 +157,7 @@ where
}

/// [`TracingContext`] is a [`metrics::Recorder`] that injects labels from [`tracing::Span`]s.
#[derive(Debug)]
pub struct TracingContext<R, F> {
inner: R,
label_filter: F,
Expand Down
2 changes: 1 addition & 1 deletion metrics-tracing-context/tests/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ fn test_nested_spans() {
);
}

#[derive(Clone)]
#[derive(Clone, Debug)]
struct OnlyUser;

impl LabelFilter for OnlyUser {
Expand Down
5 changes: 4 additions & 1 deletion metrics-util/src/debugging.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ impl CompositeKeyName {
}

/// A point-in-time snapshot of all metrics in [`DebuggingRecorder`].
#[derive(Debug)]
pub struct Snapshot(Vec<(CompositeKey, Option<Unit>, Option<SharedString>, DebugValue)>);

impl Snapshot {
Expand Down Expand Up @@ -67,6 +68,7 @@ pub enum DebugValue {
Histogram(Vec<OrderedFloat<f64>>),
}

#[derive(Debug)]
struct Inner {
registry: Registry<Key, AtomicStorage>,
seen: Mutex<IndexMap<CompositeKey, ()>>,
Expand All @@ -84,7 +86,7 @@ impl Inner {
}

/// Captures point-in-time snapshots of [`DebuggingRecorder`].
#[derive(Clone)]
#[derive(Clone, Debug)]
pub struct Snapshotter {
inner: Arc<Inner>,
}
Expand Down Expand Up @@ -138,6 +140,7 @@ impl Snapshotter {
///
/// Callers can easily take snapshots of the metrics at any given time and get access
/// to the raw values.
#[derive(Debug)]
pub struct DebuggingRecorder {
inner: Arc<Inner>,
}
Expand Down
17 changes: 16 additions & 1 deletion metrics-util/src/layers/fanout.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
use std::sync::Arc;
use std::{fmt, sync::Arc};

use metrics::{
Counter, CounterFn, Gauge, GaugeFn, Histogram, HistogramFn, Key, KeyName, Metadata, Recorder,
SharedString, Unit,
};

#[derive(Debug)]
struct FanoutCounter {
counters: Vec<Counter>,
}
Expand Down Expand Up @@ -35,6 +36,7 @@ impl From<FanoutCounter> for Counter {
}
}

#[derive(Debug)]
struct FanoutGauge {
gauges: Vec<Gauge>,
}
Expand Down Expand Up @@ -71,6 +73,7 @@ impl From<FanoutGauge> for Gauge {
}
}

#[derive(Debug)]
struct FanoutHistogram {
histograms: Vec<Histogram>,
}
Expand Down Expand Up @@ -100,6 +103,12 @@ pub struct Fanout {
recorders: Vec<Box<dyn Recorder>>,
}

impl fmt::Debug for Fanout {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Fanout").finish_non_exhaustive()
}
}

impl Recorder for Fanout {
fn describe_counter(&self, key_name: KeyName, unit: Option<Unit>, description: SharedString) {
for recorder in &self.recorders {
Expand Down Expand Up @@ -155,6 +164,12 @@ pub struct FanoutBuilder {
recorders: Vec<Box<dyn Recorder>>,
}

impl fmt::Debug for FanoutBuilder {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("FanoutBuilder").finish_non_exhaustive()
}
}

impl FanoutBuilder {
/// Adds a recorder to the fanout list.
pub fn add_recorder<R>(mut self, recorder: R) -> FanoutBuilder
Expand Down
3 changes: 2 additions & 1 deletion metrics-util/src/layers/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use metrics::{Counter, Gauge, Histogram, Key, KeyName, Metadata, Recorder, Share
/// Filters and discards metrics matching certain name patterns.
///
/// More information on the behavior of the layer can be found in [`FilterLayer`].
#[derive(Debug)]
pub struct Filter<R> {
inner: R,
automaton: AhoCorasick,
Expand Down Expand Up @@ -73,7 +74,7 @@ impl<R: Recorder> Recorder for Filter<R> {
/// DFA, or case sensitivity.
///
/// [ahocorasick]: https://en.wikipedia.org/wiki/Aho–Corasick_algorithm
#[derive(Default)]
#[derive(Default, Debug)]
pub struct FilterLayer {
patterns: Vec<String>,
case_insensitive: bool,
Expand Down
5 changes: 3 additions & 2 deletions metrics-util/src/layers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
//! # use metrics::NoopRecorder as BasicRecorder;
//! # use metrics_util::layers::{Layer, Stack, PrefixLayer};
//! // A simple layer that denies any metrics that have "stairway" or "heaven" in their name.
//! #[derive(Default)]
//! #[derive(Default, Debug)]
//! pub struct StairwayDeny<R>(pub(crate) R);
//!
//! impl<R> StairwayDeny<R> {
Expand Down Expand Up @@ -75,7 +75,7 @@
//! }
//! }
//!
//! #[derive(Default)]
//! #[derive(Debug, Default)]
//! pub struct StairwayDenyLayer;
//!
//! impl<R> Layer<R> for StairwayDenyLayer {
Expand Down Expand Up @@ -137,6 +137,7 @@ pub trait Layer<R> {
}

/// Builder for composing layers together in a top-down/inside-out order.
#[derive(Debug)]
pub struct Stack<R> {
inner: R,
}
Expand Down
2 changes: 2 additions & 0 deletions metrics-util/src/layers/prefix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use metrics::{Counter, Gauge, Histogram, Key, KeyName, Metadata, Recorder, Share
/// Applies a prefix to every metric key.
///
/// Keys will be prefixed in the format of `<prefix>.<remaining>`.
#[derive(Debug)]
pub struct Prefix<R> {
prefix: SharedString,
inner: R,
Expand Down Expand Up @@ -64,6 +65,7 @@ impl<R: Recorder> Recorder for Prefix<R> {
/// A layer for applying a prefix to every metric key.
///
/// More information on the behavior of the layer can be found in [`Prefix`].
#[derive(Debug)]
pub struct PrefixLayer(&'static str);

impl PrefixLayer {
Expand Down
24 changes: 24 additions & 0 deletions metrics-util/src/layers/router.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::fmt;

use metrics::{Counter, Gauge, Histogram, Key, KeyName, Metadata, Recorder, SharedString, Unit};
use radix_trie::{Trie, TrieCommon};

Expand All @@ -15,6 +17,16 @@ pub struct Router {
histogram_routes: Trie<String, usize>,
}

impl fmt::Debug for Router {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Router")
.field("global_mask", &self.global_mask)
.field("counter_routes", &self.counter_routes)
.field("gauge_routes", &self.gauge_routes)
.field("histogram_routes", &self.histogram_routes)
.finish_non_exhaustive()
}
}
impl Router {
fn route(
&self,
Expand Down Expand Up @@ -87,6 +99,17 @@ pub struct RouterBuilder {
histogram_routes: Trie<String, usize>,
}

impl fmt::Debug for RouterBuilder {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("RouterBuilder")
.field("global_mask", &self.global_mask)
.field("counter_routes", &self.counter_routes)
.field("gauge_routes", &self.gauge_routes)
.field("histogram_routes", &self.histogram_routes)
.finish_non_exhaustive()
}
}

impl RouterBuilder {
/// Creates a [`RouterBuilder`] from a [`Recorder`].
///
Expand Down Expand Up @@ -175,6 +198,7 @@ mod tests {
};

mock! {
#[derive(Debug)]
pub TestRecorder {
}

Expand Down
Loading

0 comments on commit bff5365

Please sign in to comment.