@@ -118,31 +118,45 @@ pub fn find_metric_origin(metric: &Metric, tags: SortedTags) -> Option<Origin> {
118
118
None
119
119
}
120
120
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
+
121
134
fn is_datadog_metric ( prefix : & str ) -> bool {
122
135
prefix == DATADOG_PREFIX
123
136
}
124
137
125
138
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 )
127
140
&& prefix != AZURE_APP_SERVICES_PREFIX
128
141
}
129
142
130
143
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 )
132
145
&& prefix != GOOGLE_CLOUD_RUN_PREFIX
133
146
}
134
147
135
148
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 )
137
150
&& prefix != AZURE_CONTAINER_APP_PREFIX
138
151
}
139
152
140
153
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
142
155
}
143
156
144
157
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
146
160
}
147
161
148
162
#[ cfg( test) ]
@@ -202,4 +216,13 @@ mod tests {
202
216
} )
203
217
) ;
204
218
}
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
+ }
205
228
}
0 commit comments