Skip to content

Commit 7f7ac1e

Browse files
committed
refactor(app/inbound): type aliases specify extractors
our metrics layer is generic across an `N`-typed service factory. this commit introduces types aliases that apply `X`-typed extractor parameters to the `linkerd-http-prom` middleware, which are unaware of a concrete metrics extractor. we use this to reduce the complexity of the `layer()` function. Signed-off-by: katelyn martin <[email protected]>
1 parent d7064ca commit 7f7ac1e

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

linkerd/app/inbound/src/http/router/metrics.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use linkerd_app_core::{
1212
};
1313
use linkerd_http_prom::{
1414
body_data::{self, BodyDataMetrics},
15-
count_reqs::{NewCountRequests, RequestCount},
15+
count_reqs::{self, RequestCount},
1616
};
1717

1818
pub(super) fn layer<N>(
@@ -22,20 +22,7 @@ pub(super) fn layer<N>(
2222
response_body_data,
2323
..
2424
}: &InboundMetrics,
25-
) -> impl svc::Layer<
26-
N,
27-
Service = NewCountRequests<
28-
ExtractRequestCount,
29-
body_data::response::NewRecordBodyData<
30-
ExtractResponseBodyDataMetrics,
31-
body_data::request::NewRecordBodyData<
32-
N,
33-
ExtractRequestBodyDataParams,
34-
ExtractRequestBodyDataMetrics,
35-
>,
36-
>,
37-
>,
38-
> {
25+
) -> impl svc::Layer<N, Service = Instrumented<N>> {
3926
use svc::Layer as _;
4027

4128
let count = {
@@ -45,17 +32,23 @@ pub(super) fn layer<N>(
4532

4633
let body = {
4734
let extract = ExtractResponseBodyDataMetrics(response_body_data.clone());
48-
body_data::response::NewRecordBodyData::layer_via(extract)
35+
NewRecordResponseBodyData::layer_via(extract)
4936
};
5037

5138
let request = {
5239
let extract = ExtractRequestBodyDataParams(request_body_data.clone());
53-
body_data::request::NewRecordBodyData::new(extract)
40+
NewRecordRequestBodyData::new(extract)
5441
};
5542

5643
svc::layer::mk(move |inner| count.layer(body.layer(request.layer(inner))))
5744
}
5845

46+
/// An `N`-typed service instrumented with metrics middleware.
47+
type Instrumented<N> = NewCountRequests<NewRecordResponseBodyData<NewRecordRequestBodyData<N>>>;
48+
49+
/// An `N`-typed `NewService<T>` instrumented with request counting metrics.
50+
type NewCountRequests<N> = count_reqs::NewCountRequests<ExtractRequestCount, N>;
51+
5952
#[derive(Clone, Debug)]
6053
pub struct RequestCountFamilies {
6154
grpc: count_reqs::RequestCountFamilies<RequestCountLabels>,
@@ -70,6 +63,10 @@ pub struct RequestCountLabels {
7063
#[derive(Clone, Debug)]
7164
pub struct ExtractRequestCount(pub RequestCountFamilies);
7265

66+
/// An `N`-typed `NewService<T>` instrumented with response body metrics.
67+
type NewRecordResponseBodyData<N> =
68+
body_data::response::NewRecordBodyData<ExtractResponseBodyDataMetrics, N>;
69+
7370
#[derive(Clone, Debug)]
7471
pub struct ResponseBodyFamilies {
7572
grpc: body_data::response::ResponseBodyFamilies<ResponseBodyDataLabels>,
@@ -84,6 +81,13 @@ pub struct ResponseBodyDataLabels {
8481
#[derive(Clone, Debug)]
8582
pub struct ExtractResponseBodyDataMetrics(ResponseBodyFamilies);
8683

84+
/// An `N`-typed `NewService<T>` instrumented with request body metrics.
85+
type NewRecordRequestBodyData<N> = body_data::request::NewRecordBodyData<
86+
N,
87+
ExtractRequestBodyDataParams,
88+
ExtractRequestBodyDataMetrics,
89+
>;
90+
8791
#[derive(Clone, Debug)]
8892
pub struct RequestBodyFamilies {
8993
grpc: body_data::request::RequestBodyFamilies<RequestBodyDataLabels>,

0 commit comments

Comments
 (0)