Skip to content

Commit 5654ba7

Browse files
committed
Add toggleable default metrics
1 parent 4315ce8 commit 5654ba7

7 files changed

Lines changed: 246 additions & 167 deletions

File tree

examples/pokemon-service/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ pub async fn main() {
111111
.expect("failed to build an instance of PokemonService");
112112

113113
let metrics_layer = MetricsLayer::new();
114+
114115
let service = metrics_layer.layer(app);
115116

116117
// Using `IntoMakeServiceWithConnectInfo`, rather than `into_make_service`, to adjoin the `SocketAddr`

rust-runtime/aws-smithy-http-server-metrics/src/default.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use metrique::Slot;
2+
use metrique::SlotGuard;
23
use metrique_macro::metrics;
34

45
#[metrics]
@@ -24,3 +25,28 @@ pub struct DefaultRequestMetrics {
2425
pub struct DefaultResponseMetrics {
2526
pub(crate) http_status_code: Option<u16>,
2627
}
28+
29+
#[derive(Default, Clone)]
30+
pub(crate) struct DefaultRequestMetricsConfig {
31+
pub(crate) disable_all: bool,
32+
pub(crate) disable_request_id: bool,
33+
pub(crate) disable_operation_name: bool,
34+
pub(crate) disable_service_name: bool,
35+
pub(crate) disable_service_version: bool,
36+
}
37+
38+
#[derive(Default, Clone)]
39+
pub(crate) struct DefaultResponseMetricsConfig {
40+
pub(crate) disable_all: bool,
41+
pub(crate) disable_http_status_code: bool,
42+
}
43+
44+
pub(crate) struct DefaultRequestMetricsExtension {
45+
pub(crate) metrics: SlotGuard<DefaultRequestMetrics>,
46+
pub(crate) config: DefaultRequestMetricsConfig,
47+
}
48+
49+
pub(crate) struct DefaultResponseMetricsExtension {
50+
pub(crate) metrics: SlotGuard<DefaultResponseMetrics>,
51+
pub(crate) config: DefaultResponseMetricsConfig,
52+
}

rust-runtime/aws-smithy-http-server-metrics/src/layer.rs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ use http::Response;
77
use metrique::AppendAndCloseOnDrop;
88
use metrique::DefaultSink;
99
use metrique::RootEntry;
10-
use metrique::ServiceMetrics;
1110
use metrique::writer::EntrySink;
1211
use metrique_core::CloseEntry;
13-
use metrique_writer::GlobalEntrySink;
1412
use tower::Layer;
1513

14+
use crate::DefaultInit;
15+
use crate::DefaultRq;
16+
use crate::DefaultRs;
1617
use crate::ReqBody;
1718
use crate::ResBody;
1819
use crate::default::DefaultMetrics;
19-
use crate::layer::builder::DefaultRequestMetricsConfig;
20-
use crate::layer::builder::DefaultResponseMetricsConfig;
20+
use crate::default::DefaultRequestMetricsConfig;
21+
use crate::default::DefaultResponseMetricsConfig;
2122
use crate::layer::builder::MetricsLayerBuilder;
2223
use crate::layer::builder::NeedsInitialization;
2324
use crate::service::MetricsLayerService;
@@ -27,9 +28,9 @@ pub mod builder;
2728
pub struct MetricsLayer<
2829
E = DefaultMetrics,
2930
S = DefaultSink,
30-
I = fn() -> AppendAndCloseOnDrop<E, S>,
31-
Rq = fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>),
32-
Rs = fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>),
31+
I = DefaultInit<E, S>,
32+
Rq = DefaultRq<E, S>,
33+
Rs = DefaultRs<E, S>,
3334
> where
3435
E: CloseEntry + Send + Sync + 'static,
3536
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
@@ -38,36 +39,36 @@ pub struct MetricsLayer<
3839
Rs: Fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
3940
{
4041
pub(crate) init_metrics: I,
41-
pub(crate) default_req_metrics_extension_fn:
42-
fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>),
43-
pub(crate) default_res_metrics_extension_fn:
44-
fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>),
4542
pub(crate) set_request_metrics: Option<Rq>,
4643
pub(crate) set_response_metrics: Option<Rs>,
44+
pub(crate) default_req_metrics_extension_fn:
45+
fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>, DefaultRequestMetricsConfig),
46+
pub(crate) default_res_metrics_extension_fn:
47+
fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>, DefaultResponseMetricsConfig),
48+
pub(crate) default_req_metrics_config: DefaultRequestMetricsConfig,
49+
pub(crate) default_res_metrics_config: DefaultResponseMetricsConfig,
4750
}
4851
impl MetricsLayer {
49-
pub fn new() -> Self {
50-
Self::builder()
51-
.init_metrics(|| DefaultMetrics::default().append_on_drop(ServiceMetrics::sink()))
52-
.build()
52+
pub fn new() -> MetricsLayer {
53+
Self::builder().init_with_defaults().build()
5354
}
5455
}
5556

5657
impl<E, S, I, Rq, Rs> MetricsLayer<E, S, I, Rq, Rs>
5758
where
59+
E: CloseEntry + Send + Sync + 'static,
60+
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
5861
I: Fn() -> AppendAndCloseOnDrop<E, S> + Clone + Send + Sync + 'static,
5962
Rq: Fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
6063
Rs: Fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
61-
E: CloseEntry + Send + Sync + 'static,
62-
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
6364
{
6465
pub fn builder() -> MetricsLayerBuilder<NeedsInitialization, E, S, I, Rq, Rs> {
6566
MetricsLayerBuilder {
6667
init_metrics: None,
6768
set_request_metrics: None,
6869
set_response_metrics: None,
69-
default_request_metrics_config: DefaultRequestMetricsConfig::default(),
70-
default_response_metrics_config: DefaultResponseMetricsConfig::default(),
70+
default_req_metrics_config: DefaultRequestMetricsConfig::default(),
71+
default_res_metrics_config: DefaultResponseMetricsConfig::default(),
7172
_state: PhantomData,
7273
}
7374
}
@@ -76,22 +77,24 @@ where
7677
impl<Ser, E, S, I, Rq, Rs> Layer<Ser> for MetricsLayer<E, S, I, Rq, Rs>
7778
where
7879
Ser: Clone,
80+
E: CloseEntry + Send + Sync + 'static,
81+
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
7982
I: Fn() -> AppendAndCloseOnDrop<E, S> + Clone + Send + Sync + 'static,
8083
Rq: Fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
8184
Rs: Fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
82-
E: CloseEntry + Send + Sync + 'static,
83-
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
8485
{
85-
type Service = MetricsLayerService<Ser, I, Rq, Rs, E, S>;
86+
type Service = MetricsLayerService<Ser, E, S, I, Rq, Rs>;
8687

8788
fn layer(&self, inner: Ser) -> Self::Service {
8889
MetricsLayerService {
8990
inner,
9091
init_metrics: self.init_metrics.clone(),
91-
default_req_metrics_extension_fn: self.default_req_metrics_extension_fn,
92-
default_res_metrics_extension_fn: self.default_res_metrics_extension_fn,
9392
set_request_metrics: self.set_request_metrics.clone(),
9493
set_response_metrics: self.set_response_metrics.clone(),
94+
default_req_metrics_extension_fn: self.default_req_metrics_extension_fn.clone(),
95+
default_res_metrics_extension_fn: self.default_res_metrics_extension_fn.clone(),
96+
default_req_metrics_config: self.default_req_metrics_config.clone(),
97+
default_res_metrics_config: self.default_res_metrics_config.clone(),
9598
}
9699
}
97100
}

0 commit comments

Comments
 (0)