Skip to content

Commit 2ca03d6

Browse files
committed
Refactor and add new_with_sink api
1 parent 7616f2d commit 2ca03d6

10 files changed

Lines changed: 273 additions & 253 deletions

File tree

examples/pokemon-service/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ mod plugin;
88

99
use std::{net::SocketAddr, sync::Arc};
1010

11-
use aws_smithy_http_server_metrics::plugin::MetricsPlugin;
11+
use aws_smithy_http_server_metrics::plugin::DefaultMetricsPlugin;
1212
use clap::Parser;
1313
use pokemon_service_server_sdk::server::{
1414
extension::OperationExtensionExt,
@@ -69,7 +69,7 @@ pub async fn main() {
6969
let print_plugin = Scoped::new::<PrintScope>(HttpPlugins::new().print());
7070

7171
let http_plugins = HttpPlugins::new()
72-
.push(MetricsPlugin::default())
72+
.push(DefaultMetricsPlugin)
7373
// Apply the scoped `PrintPlugin`
7474
.push(print_plugin)
7575
// Apply the `OperationExtensionPlugin` defined in `aws_smithy_http_server::extension`. This allows other

rust-runtime/Cargo.lock

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

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub struct DefaultResponseMetrics {
3737
}
3838

3939
#[derive(Default, Debug, Clone)]
40-
pub(crate) struct DefaultRequestMetricsConfig {
40+
pub struct DefaultRequestMetricsConfig {
4141
pub(crate) disable_all: bool,
4242
pub(crate) disable_request_id: bool,
4343
pub(crate) disable_operation_name: bool,
@@ -46,17 +46,17 @@ pub(crate) struct DefaultRequestMetricsConfig {
4646
}
4747

4848
#[derive(Default, Debug, Clone)]
49-
pub(crate) struct DefaultResponseMetricsConfig {
49+
pub struct DefaultResponseMetricsConfig {
5050
pub(crate) disable_all: bool,
5151
pub(crate) disable_http_status_code: bool,
5252
}
5353

54-
pub(crate) struct DefaultRequestMetricsExtension {
54+
pub struct DefaultRequestMetricsExtension {
5555
pub(crate) metrics: SlotGuard<DefaultRequestMetrics>,
5656
pub(crate) config: DefaultRequestMetricsConfig,
5757
}
5858

59-
pub(crate) struct DefaultResponseMetricsExtension {
59+
pub struct DefaultResponseMetricsExtension {
6060
pub(crate) metrics: SlotGuard<DefaultResponseMetrics>,
6161
pub(crate) config: DefaultResponseMetricsConfig,
6262
}

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

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,25 @@ use http::Request;
66
use http::Response;
77
use metrique::AppendAndCloseOnDrop;
88
use metrique::DefaultSink;
9-
use metrique::RootEntry;
10-
use metrique_core::CloseEntry;
11-
use metrique_writer::EntrySink;
129
use thiserror::Error;
1310
use tower::Layer;
1411

15-
use crate::DefaultInit;
16-
use crate::DefaultRq;
17-
use crate::DefaultRs;
18-
use crate::ReqBody;
19-
use crate::ResBody;
2012
use crate::default::DefaultMetrics;
2113
use crate::default::DefaultRequestMetricsConfig;
2214
use crate::default::DefaultResponseMetricsConfig;
2315
use crate::layer::builder::MetricsLayerBuilder;
2416
use crate::layer::builder::NeedsInitialization;
2517
use crate::service::MetricsLayerService;
18+
use crate::traits::InitMetrics;
19+
use crate::traits::MetriqueCloseEntry;
20+
use crate::traits::MetriqueEntrySink;
21+
use crate::traits::SetRequestMetrics;
22+
use crate::traits::SetResponseMetrics;
23+
use crate::types::DefaultInit;
24+
use crate::types::DefaultRq;
25+
use crate::types::DefaultRs;
26+
use crate::types::ReqBody;
27+
use crate::types::ResBody;
2628

2729
pub mod builder;
2830

@@ -40,11 +42,11 @@ pub struct MetricsLayer<
4042
Rq = DefaultRq<E, S>,
4143
Rs = DefaultRs<E, S>,
4244
> where
43-
E: CloseEntry + Send + Sync + 'static,
44-
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
45-
I: Fn() -> AppendAndCloseOnDrop<E, S> + Clone + Send + Sync + 'static,
46-
Rq: Fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
47-
Rs: Fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
45+
E: MetriqueCloseEntry,
46+
S: MetriqueEntrySink<E>,
47+
I: InitMetrics<E, S>,
48+
Rq: SetRequestMetrics<E, S>,
49+
Rs: SetResponseMetrics<E, S>,
4850
{
4951
pub(crate) init_metrics: I,
5052
pub(crate) set_request_metrics: Option<Rq>,
@@ -57,10 +59,23 @@ pub struct MetricsLayer<
5759
pub(crate) default_res_metrics_config: DefaultResponseMetricsConfig,
5860
}
5961

62+
impl<S> MetricsLayer<DefaultMetrics, S>
63+
where
64+
S: MetriqueEntrySink<DefaultMetrics> + Clone,
65+
{
66+
pub fn new_with_sink(
67+
sink: S,
68+
) -> MetricsLayer<DefaultMetrics, S, impl InitMetrics<DefaultMetrics, S>> {
69+
Self::builder()
70+
.init_metrics(move || DefaultMetrics::default().append_on_drop(sink.clone()))
71+
.build()
72+
}
73+
}
74+
6075
impl<E, S> MetricsLayer<E, S>
6176
where
62-
E: CloseEntry + Send + Sync + 'static,
63-
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
77+
E: MetriqueCloseEntry,
78+
S: MetriqueEntrySink<E>,
6479
{
6580
pub fn builder() -> MetricsLayerBuilder<NeedsInitialization, E, S> {
6681
MetricsLayerBuilder {
@@ -70,18 +85,20 @@ where
7085
default_req_metrics_config: DefaultRequestMetricsConfig::default(),
7186
default_res_metrics_config: DefaultResponseMetricsConfig::default(),
7287
_state: PhantomData,
88+
_close_entry: PhantomData,
89+
_entry_sink: PhantomData,
7390
}
7491
}
7592
}
7693

7794
impl<Ser, E, S, I, Rq, Rs> Layer<Ser> for MetricsLayer<E, S, I, Rq, Rs>
7895
where
7996
Ser: Clone,
80-
E: CloseEntry + Send + Sync + 'static,
81-
S: EntrySink<RootEntry<E::Closed>> + Send + Sync + 'static,
82-
I: Fn() -> AppendAndCloseOnDrop<E, S> + Clone + Send + Sync + 'static,
83-
Rq: Fn(&mut Request<ReqBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
84-
Rs: Fn(&mut Response<ResBody>, &mut AppendAndCloseOnDrop<E, S>) + Clone + Send + Sync + 'static,
97+
E: MetriqueCloseEntry,
98+
S: MetriqueEntrySink<E>,
99+
I: InitMetrics<E, S>,
100+
Rq: SetRequestMetrics<E, S>,
101+
Rs: SetResponseMetrics<E, S>,
85102
{
86103
type Service = MetricsLayerService<Ser, E, S, I, Rq, Rs>;
87104

@@ -91,8 +108,8 @@ where
91108
init_metrics: self.init_metrics.clone(),
92109
set_request_metrics: self.set_request_metrics.clone(),
93110
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(),
111+
default_req_metrics_extension_fn: self.default_req_metrics_extension_fn,
112+
default_res_metrics_extension_fn: self.default_res_metrics_extension_fn,
96113
default_req_metrics_config: self.default_req_metrics_config.clone(),
97114
default_res_metrics_config: self.default_res_metrics_config.clone(),
98115
}

0 commit comments

Comments
 (0)