Skip to content

Commit 82b55ce

Browse files
feat: format prefix labels
1 parent 69b4763 commit 82b55ce

File tree

3 files changed

+48
-23
lines changed

3 files changed

+48
-23
lines changed

linkerd/app/core/src/metrics.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,23 @@ where
135135
Some(out)
136136
}
137137

138+
pub fn prefix_outbound_endpoint_labels<'i, I>(prefix: &str, mut labels_iter: I) -> Option<String>
139+
where
140+
I: Iterator<Item = (&'i String, &'i String)>,
141+
{
142+
let (k0, v0) = labels_iter.next()?;
143+
let mut out = format!("{}_{}=\"{}\"", prefix, k0, v0);
144+
145+
for (k, v) in labels_iter {
146+
if k == "pod" || k == "pod_template_hash" {
147+
continue;
148+
}
149+
150+
write!(out, ",{}_{}=\"{}\"", prefix, k, v).expect("label concat must succeed");
151+
}
152+
Some(out)
153+
}
154+
138155
// === impl Metrics ===
139156

140157
impl Metrics {

linkerd/app/integration/src/tests/telemetry.rs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -563,12 +563,12 @@ mod outbound_dst_labels {
563563
let (
564564
Fixture {
565565
client,
566-
metrics: _metrics,
566+
metrics,
567567
proxy: _proxy,
568568
_profile,
569569
dst_tx,
570570
pol_out_tx: _pol_out_tx,
571-
labels: _labels,
571+
labels,
572572
..
573573
},
574574
addr,
@@ -582,6 +582,18 @@ mod outbound_dst_labels {
582582

583583
info!("client.get(/)");
584584
assert_eq!(client.get("/").await, "hello");
585+
586+
let labels = labels
587+
.label("dst_addr_label1", "foo")
588+
.label("dst_addr_label2", "bar");
589+
590+
for &metric in &[
591+
"request_total",
592+
"response_total",
593+
"response_latency_ms_count",
594+
] {
595+
labels.metric(metric).assert_in(&metrics).await;
596+
}
585597
}
586598

587599
#[tokio::test]
@@ -590,11 +602,11 @@ mod outbound_dst_labels {
590602
let (
591603
Fixture {
592604
client,
593-
metrics: _metrics,
605+
metrics,
594606
proxy: _proxy,
595607
_profile,
596608
dst_tx,
597-
labels: _labels,
609+
labels,
598610
..
599611
},
600612
addr,
@@ -614,6 +626,18 @@ mod outbound_dst_labels {
614626

615627
info!("client.get(/)");
616628
assert_eq!(client.get("/").await, "hello");
629+
630+
let labels = labels
631+
.label("dst_set_label1", "foo")
632+
.label("dst_set_label2", "bar");
633+
634+
for &metric in &[
635+
"request_total",
636+
"response_total",
637+
"response_latency_ms_count",
638+
] {
639+
labels.metric(metric).assert_in(&metrics).await;
640+
}
617641
}
618642

619643
#[tokio::test]

linkerd/app/outbound/src/http/concrete.rs

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use super::{balance, breaker, client, handle_proxy_error_headers};
55
use crate::{http, stack_labels, BackendRef, Outbound, ParentRef};
66
use linkerd_app_core::{
77
classify,
8-
metrics::{prefix_labels, EndpointLabels, OutboundEndpointLabels},
8+
metrics::{prefix_outbound_endpoint_labels, EndpointLabels, OutboundEndpointLabels},
99
profiles,
1010
proxy::{
1111
api_resolve::{ConcreteAddr, Metadata, ProtocolHint},
@@ -18,7 +18,7 @@ use linkerd_app_core::{
1818
Error, Infallible, NameAddr,
1919
};
2020
use linkerd_proxy_client_policy::FailureAccrual;
21-
use std::{collections::BTreeMap, fmt::Debug, net::SocketAddr, sync::Arc};
21+
use std::{fmt::Debug, net::SocketAddr, sync::Arc};
2222
use tracing::info_span;
2323

2424
mod metrics;
@@ -342,24 +342,8 @@ where
342342
T: svc::Param<Option<http::uri::Authority>>,
343343
{
344344
fn param(&self) -> OutboundEndpointLabels {
345-
let original_labels = self.metadata.labels().clone();
346-
// self.metadata.labels() could return Err in some cases
347-
// if that case the dst_labels won't carry any value
348-
let dst_labels = match Arc::try_unwrap(self.metadata.labels()) {
349-
Ok(result) => result,
350-
Err(_e) => BTreeMap::new(),
351-
};
352-
353-
// dst_labels.remove("pod");
354-
// dst_labels.remove("pod_template_hash");
355-
356-
let label_iterator = match dst_labels.is_empty() {
357-
true => dst_labels.iter(),
358-
false => original_labels.iter()
359-
};
360-
361345
OutboundEndpointLabels {
362-
labels: prefix_labels("dst", label_iterator),
346+
labels: prefix_outbound_endpoint_labels("dst", self.metadata.labels().iter()),
363347
server_id: self.param(),
364348
}
365349
}

0 commit comments

Comments
 (0)