Skip to content

Commit e0ebca2

Browse files
refactor tag checking
1 parent 384a5b7 commit e0ebca2

File tree

2 files changed

+36
-14
lines changed

2 files changed

+36
-14
lines changed

dogstatsd/src/metric.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,11 @@ impl SortedTags {
117117
tags_as_vec
118118
}
119119

120-
pub fn get(&self, key: &str) -> Option<&str> {
120+
pub fn find_all(&self, tag_key: &str) -> Vec<&Ustr> {
121121
self.values
122122
.iter()
123-
.filter(|(k, v)| !v.is_empty() && k.as_str() == key)
124-
.find(|(k, _)| k.as_str() == key)
125-
.map(|(_, v)| v.as_str())
123+
.filter_map(|(k, v)| if k == tag_key { Some(v) } else { None })
124+
.collect()
126125
}
127126

128127
pub(crate) fn to_resources(&self) -> Vec<datadog::Resource> {
@@ -571,11 +570,11 @@ mod tests {
571570
}
572571

573572
#[test]
574-
fn sorted_tags_get_value() {
573+
fn sorted_tags_find_all() {
575574
let tags = SortedTags::parse("a,a:1,b:2,c:3").unwrap();
576-
assert_eq!(tags.get("a"), Some("1"));
577-
assert_eq!(tags.get("b"), Some("2"));
578-
assert_eq!(tags.get("c"), Some("3"));
579-
assert_eq!(tags.get("d"), None);
575+
assert_eq!(tags.find_all("a"), vec![&Ustr::from(""), &Ustr::from("1")]);
576+
assert_eq!(tags.find_all("b"), vec![&Ustr::from("2")]);
577+
assert_eq!(tags.find_all("c"), vec![&Ustr::from("3")]);
578+
assert_eq!(tags.find_all("d"), Vec::<&Ustr>::new());
580579
}
581580
}

dogstatsd/src/origin.rs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,31 +118,45 @@ pub fn find_metric_origin(metric: &Metric, tags: SortedTags) -> Option<Origin> {
118118
None
119119
}
120120

121+
fn get_first_tag_value<'a>(tags: &'a SortedTags, key: &str) -> Option<&'a str> {
122+
tags.find_all(key)
123+
.iter()
124+
.filter_map(|value| {
125+
if !value.is_empty() {
126+
Some(value.as_str())
127+
} else {
128+
None
129+
}
130+
})
131+
.next()
132+
}
133+
121134
fn is_datadog_metric(prefix: &str) -> bool {
122135
prefix == DATADOG_PREFIX
123136
}
124137

125138
fn is_azure_app_services(tags: &SortedTags, prefix: &str) -> bool {
126-
tags.get(DD_ORIGIN_TAG_KEY) == Some(AZURE_APP_SERVICES_TAG_VALUE)
139+
get_first_tag_value(tags, DD_ORIGIN_TAG_KEY) == Some(AZURE_APP_SERVICES_TAG_VALUE)
127140
&& prefix != AZURE_APP_SERVICES_PREFIX
128141
}
129142

130143
fn is_google_cloud_run(tags: &SortedTags, prefix: &str) -> bool {
131-
tags.get(DD_ORIGIN_TAG_KEY) == Some(GOOGLE_CLOUD_RUN_TAG_VALUE)
144+
get_first_tag_value(tags, DD_ORIGIN_TAG_KEY) == Some(GOOGLE_CLOUD_RUN_TAG_VALUE)
132145
&& prefix != GOOGLE_CLOUD_RUN_PREFIX
133146
}
134147

135148
fn is_azure_container_app(tags: &SortedTags, prefix: &str) -> bool {
136-
tags.get(DD_ORIGIN_TAG_KEY) == Some(AZURE_CONTAINER_APP_TAG_VALUE)
149+
get_first_tag_value(tags, DD_ORIGIN_TAG_KEY) == Some(AZURE_CONTAINER_APP_TAG_VALUE)
137150
&& prefix != AZURE_CONTAINER_APP_PREFIX
138151
}
139152

140153
fn is_aws_lambda(tags: &SortedTags, prefix: &str) -> bool {
141-
tags.get(AWS_LAMBDA_TAG_KEY).is_some() && prefix != AWS_LAMBDA_PREFIX
154+
get_first_tag_value(tags, AWS_LAMBDA_TAG_KEY).is_some() && prefix != AWS_LAMBDA_PREFIX
142155
}
143156

144157
fn is_aws_step_functions(tags: &SortedTags, prefix: &str) -> bool {
145-
tags.get(AWS_STEP_FUNCTIONS_TAG_KEY).is_some() && prefix != AWS_STEP_FUNCTIONS_PREFIX
158+
get_first_tag_value(tags, AWS_STEP_FUNCTIONS_TAG_KEY).is_some()
159+
&& prefix != AWS_STEP_FUNCTIONS_PREFIX
146160
}
147161

148162
#[cfg(test)]
@@ -202,4 +216,13 @@ mod tests {
202216
})
203217
);
204218
}
219+
220+
#[test]
221+
fn test_get_first_tag_value() {
222+
let tags = SortedTags::parse("a,a:1,b:2,c:3").unwrap();
223+
assert_eq!(get_first_tag_value(&tags, "a"), Some("1"));
224+
assert_eq!(get_first_tag_value(&tags, "b"), Some("2"));
225+
assert_eq!(get_first_tag_value(&tags, "c"), Some("3"));
226+
assert_eq!(get_first_tag_value(&tags, "d"), None);
227+
}
205228
}

0 commit comments

Comments
 (0)