@@ -19,6 +19,7 @@ use micro_http::{
1919use serde_json:: { Map , Value } ;
2020use token_headers:: { XMetadataToken , XMetadataTokenTtlSeconds } ;
2121
22+ use crate :: logger:: { IncMetric , METRICS } ;
2223use crate :: mmds:: data_store:: { Mmds , MmdsDatastoreError as MmdsError , MmdsVersion , OutputFormat } ;
2324use crate :: mmds:: token:: PATH_TO_TOKEN ;
2425use crate :: mmds:: token_headers:: REJECTED_HEADER ;
@@ -141,7 +142,17 @@ pub fn convert_to_response(mmds: Arc<Mutex<Mmds>>, request: Request) -> Response
141142}
142143
143144fn respond_to_get_request_v1 ( mmds : & Mmds , request : Request ) -> Response {
144- // TODO: Increments metrics that will be added in an upcoming commit.
145+ match XMetadataToken :: from ( request. headers . custom_entries ( ) ) . 0 {
146+ Some ( token) => {
147+ if !mmds. is_valid_token ( & token) {
148+ METRICS . mmds . rx_invalid_token . inc ( ) ;
149+ }
150+ }
151+ None => {
152+ // TODO: Increment a metric that will be added in an upcoming commit.
153+ }
154+ }
155+
145156 respond_to_get_request ( mmds, request)
146157}
147158
@@ -164,12 +175,15 @@ fn respond_to_get_request_v2(mmds: &Mmds, request: Request) -> Response {
164175 // Validate the token.
165176 match mmds. is_valid_token ( & token) {
166177 true => respond_to_get_request ( mmds, request) ,
167- false => build_response (
168- request. http_version ( ) ,
169- StatusCode :: Unauthorized ,
170- MediaType :: PlainText ,
171- Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ,
172- ) ,
178+ false => {
179+ METRICS . mmds . rx_invalid_token . inc ( ) ;
180+ build_response (
181+ request. http_version ( ) ,
182+ StatusCode :: Unauthorized ,
183+ MediaType :: PlainText ,
184+ Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ,
185+ )
186+ }
173187 }
174188}
175189
@@ -518,8 +532,10 @@ mod tests {
518532 Accept: application/json\r \n \r \n ",
519533 MediaType :: ApplicationJson ,
520534 ) ;
535+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
521536 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
522537 assert_eq ! ( actual_response, expected_response) ;
538+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
523539
524540 // Test valid v2 request.
525541 let request = Request :: try_from (
@@ -543,8 +559,10 @@ mod tests {
543559 . as_bytes ( ) ,
544560 MediaType :: ApplicationJson ,
545561 ) ;
562+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
546563 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
547564 assert_eq ! ( actual_response, expected_response) ;
565+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
548566
549567 // Test GET request with invalid token is accepted when v1 is configured.
550568 let ( request, expected_response) = generate_request_and_expected_response (
@@ -553,8 +571,13 @@ mod tests {
553571 X-metadata-token: INVALID_TOKEN\r \n \r \n ",
554572 MediaType :: ApplicationJson ,
555573 ) ;
574+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
556575 let actual_response = convert_to_response ( mmds, request) ;
557576 assert_eq ! ( actual_response, expected_response) ;
577+ assert_eq ! (
578+ prev_rx_invalid_token + 1 ,
579+ METRICS . mmds. rx_invalid_token. count( )
580+ ) ;
558581 }
559582
560583 #[ test]
@@ -689,8 +712,10 @@ mod tests {
689712 . as_bytes ( ) ,
690713 MediaType :: ApplicationJson ,
691714 ) ;
715+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
692716 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
693717 assert_eq ! ( actual_response, expected_response) ;
718+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
694719
695720 // Test invalid customer header value is ignored if not PUT request to /latest/api/token.
696721 #[ rustfmt:: skip]
@@ -783,8 +808,13 @@ mod tests {
783808 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: Unauthorized ) ;
784809 expected_response. set_content_type ( MediaType :: PlainText ) ;
785810 expected_response. set_body ( Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ) ;
811+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
786812 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
787813 assert_eq ! ( actual_response, expected_response) ;
814+ assert_eq ! (
815+ prev_rx_invalid_token + 1 ,
816+ METRICS . mmds. rx_invalid_token. count( )
817+ ) ;
788818
789819 // Wait for the second token to expire.
790820 std:: thread:: sleep ( Duration :: from_secs ( 1 ) ) ;
0 commit comments