@@ -54,6 +54,9 @@ defmodule Plug.RequestId do
5454
5555 plug Plug.RequestId, logger_metadata_key: :my_request_id
5656
57+ * `:prefix` - The prefix that will be appended on the request_id, if generated.
58+
59+ plug Plug.RequestId, prefix: :myapp
5760 """
5861
5962 alias Plug.Conn
@@ -64,36 +67,35 @@ defmodule Plug.RequestId do
6467 {
6568 Keyword . get ( opts , :http_header , "x-request-id" ) ,
6669 Keyword . get ( opts , :assign_as ) ,
67- Keyword . get ( opts , :logger_metadata_key , :request_id )
70+ Keyword . get ( opts , :logger_metadata_key , :request_id ) ,
71+ Keyword . get ( opts , :prefix , false )
6872 }
6973 end
7074
7175 @ impl true
72- def call ( conn , { header , assign_as , logger_metadata_key } ) do
73- request_id = get_request_id ( conn , header )
76+ def call ( conn , { header , assign_as , logger_metadata_key , prefix } ) do
77+ request_id = get_request_id ( conn , header , prefix )
7478
7579 Logger . metadata ( [ { logger_metadata_key , request_id } ] )
7680 conn = if assign_as , do: Conn . assign ( conn , assign_as , request_id ) , else: conn
7781
7882 Conn . put_resp_header ( conn , header , request_id )
7983 end
8084
81- defp get_request_id ( conn , header ) do
85+ defp get_request_id ( conn , header , prefix ) do
8286 case Conn . get_req_header ( conn , header ) do
83- [ ] -> generate_request_id ( )
84- [ val | _ ] -> if valid_request_id? ( val ) , do: val , else: generate_request_id ( )
87+ [ val | _ ] when byte_size ( val ) in 20 .. 200 -> val
88+ _ -> generate_request_id ( prefix )
8589 end
8690 end
8791
88- defp generate_request_id do
89- binary = <<
90- System . system_time ( :nanosecond ) :: 64 ,
91- :erlang . phash2 ( { node ( ) , self ( ) } , 16_777_216 ) :: 24 ,
92- :erlang . unique_integer ( ) :: 32
93- >>
92+ defp generate_request_id ( prefix ) do
93+ id =
94+ Base . url_encode64 (
95+ << System . system_time ( :nanosecond ) :: 64 , :erlang . phash2 ( { node ( ) , self ( ) } , 16_777_216 ) :: 24 ,
96+ :erlang . unique_integer ( ) :: 32 >>
97+ )
9498
95- Base . url_encode64 ( binary )
99+ if prefix , do: " #{ prefix } - #{ id } " , else: id
96100 end
97-
98- defp valid_request_id? ( s ) , do: byte_size ( s ) in 20 .. 200
99101end
0 commit comments