Skip to content

Commit f170c51

Browse files
authored
refactor(app/outbound): simplify backend metrics layer (#4299)
this branch makes some small preliminary changes to the outbound proxy's backend metrics layer. this will simplify the introduction of additional middleware layers. --- * refactor(app/outbound): simplify backend layer construction this is akin to #3334, which cleaned up the equivalent expression in `linkerd/app/outbound/src/http/logical/policy/route/metrics.rs`. Signed-off-by: katelyn martin <kate@buoyant.io> * refactor(app/outbound): type aliases in backend metrics layer before we introduce additional layers to our backend stack, we should define type aliases as prophylaxis against: <https://rust-lang.github.io/rust-clippy/stable/index.html#type_complexity> Signed-off-by: katelyn martin <kate@buoyant.io> --------- Signed-off-by: katelyn martin <kate@buoyant.io>
1 parent 9b3e51d commit f170c51

File tree

1 file changed

+21
-19
lines changed
  • linkerd/app/outbound/src/http/logical/policy/route/backend

1 file changed

+21
-19
lines changed

linkerd/app/outbound/src/http/logical/policy/route/backend/metrics.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::{BackendRef, ParentRef, RouteRef};
22
use linkerd_app_core::{metrics::prom, svc};
33
use linkerd_http_prom::{
4-
body_data::response::{BodyDataMetrics, NewRecordBodyData, ResponseBodyFamilies},
5-
count_reqs::{NewCountRequests, RequestCount, RequestCountFamilies},
6-
record_response::{self, NewResponseDuration},
4+
body_data::response::{BodyDataMetrics, ResponseBodyFamilies},
5+
count_reqs::{RequestCount, RequestCountFamilies},
6+
record_response,
77
stream_label::{LabelSet, StreamLabel},
88
};
99

@@ -30,18 +30,19 @@ type ResponseMetrics<L> = record_response::ResponseMetrics<
3030
<L as StreamLabel>::StatusLabels,
3131
>;
3232

33+
type Instrumented<T, N> = NewRecordBodyData<NewCountRequests<NewResponseDuration<T, N>>>;
34+
type NewRecordBodyData<N> =
35+
linkerd_http_prom::body_data::response::NewRecordBodyData<ExtractRecordBodyDataParams, N>;
36+
type NewCountRequests<N> = linkerd_http_prom::count_reqs::NewCountRequests<ExtractRequestCount, N>;
37+
type NewResponseDuration<T, N> = linkerd_http_prom::record_response::NewResponseDuration<
38+
T,
39+
ExtractRecordDurationParams<ResponseMetrics<<T as MkStreamLabel>::StreamLabel>>,
40+
N,
41+
>;
42+
3343
pub fn layer<T, N>(
3444
metrics: &RouteBackendMetrics<T::StreamLabel>,
35-
) -> impl svc::Layer<
36-
N,
37-
Service = NewRecordBodyData<
38-
ExtractRecordBodyDataParams,
39-
NewCountRequests<
40-
ExtractRequestCount,
41-
NewResponseDuration<T, ExtractRecordDurationParams<ResponseMetrics<T::StreamLabel>>, N>,
42-
>,
43-
>,
44-
> + Clone
45+
) -> impl svc::Layer<N, Service = Instrumented<T, N>> + Clone
4546
where
4647
T: MkStreamLabel,
4748
T::DurationLabels: LabelSet,
@@ -56,12 +57,13 @@ where
5657

5758
svc::layer::mk(move |inner| {
5859
use svc::Layer;
59-
NewRecordBodyData::layer_via(ExtractRecordBodyDataParams(body_metrics.clone())).layer(
60-
NewCountRequests::layer_via(ExtractRequestCount(requests.clone())).layer(
61-
NewRecordDuration::layer_via(ExtractRecordDurationParams(responses.clone()))
62-
.layer(inner),
63-
),
64-
)
60+
61+
let record = NewRecordDuration::layer_via(ExtractRecordDurationParams(responses.clone()));
62+
let count = NewCountRequests::layer_via(ExtractRequestCount(requests.clone()));
63+
let body_data =
64+
NewRecordBodyData::layer_via(ExtractRecordBodyDataParams(body_metrics.clone()));
65+
66+
body_data.layer(count.layer(record.layer(inner)))
6567
})
6668
}
6769

0 commit comments

Comments
 (0)