@@ -9,20 +9,24 @@ module ActionPack
9
9
module ActionDispatch
10
10
# Instrumentation for ActionDispatch components
11
11
module Instrumentation
12
+ HTTP_ROUTE_KEY = 'datadog.http.route'
13
+ SCRIPT_NAME_KEY = 'SCRIPT_NAME'
14
+ FORMAT_SUFFIX = '(.:format)'
15
+
12
16
module_function
13
17
14
- def set_http_route_tags ( route_spec , script_name )
18
+ def set_http_route_tags ( route_spec , route_path )
15
19
return unless Tracing . enabled?
16
20
17
21
return unless route_spec
18
22
19
23
request_trace = Tracing . active_trace
20
24
return unless request_trace
21
25
22
- request_trace . set_tag ( Tracing ::Metadata ::Ext ::HTTP ::TAG_ROUTE , route_spec . to_s . gsub ( / \( .:format \) \z / , '' ) )
26
+ request_trace . set_tag ( Tracing ::Metadata ::Ext ::HTTP ::TAG_ROUTE , route_spec )
23
27
24
- if script_name && !script_name . empty?
25
- request_trace . set_tag ( Tracing ::Metadata ::Ext ::HTTP ::TAG_ROUTE_PATH , script_name )
28
+ if route_path && !route_path . empty?
29
+ request_trace . set_tag ( Tracing ::Metadata ::Ext ::HTTP ::TAG_ROUTE_PATH , route_path )
26
30
end
27
31
end
28
32
@@ -40,16 +44,18 @@ module Journey
40
44
# Instrumentation for ActionDispatch::Journey::Router for Rails versions older than 7.1
41
45
module Router
42
46
def find_routes ( req )
47
+ # result is an array of [match, parameters, route] tuples
43
48
result = super
49
+ result . each do |_ , _ , route |
50
+ next unless Instrumentation . dispatcher_route? ( route )
44
51
45
- # result is an array of [match, parameters, route] tuples
46
- routes = result . map ( & :last )
52
+ http_route = route . path . spec . to_s
53
+ http_route . delete_suffix! ( FORMAT_SUFFIX )
47
54
48
- routes . each do |route |
49
- if Instrumentation . dispatcher_route? ( route )
50
- Instrumentation . set_http_route_tags ( route . path . spec , req . env [ 'SCRIPT_NAME' ] )
51
- break
52
- end
55
+ req . env [ HTTP_ROUTE_KEY ] = http_route
56
+ Instrumentation . set_http_route_tags ( http_route , req . env [ SCRIPT_NAME_KEY ] )
57
+
58
+ break
53
59
end
54
60
55
61
result
@@ -62,7 +68,11 @@ module LazyRouter
62
68
def find_routes ( req )
63
69
super do |match , parameters , route |
64
70
if Instrumentation . dispatcher_route? ( route )
65
- Instrumentation . set_http_route_tags ( route . path . spec , req . env [ 'SCRIPT_NAME' ] )
71
+ http_route = route . path . spec . to_s
72
+ http_route . delete_suffix! ( FORMAT_SUFFIX )
73
+
74
+ req . env [ HTTP_ROUTE_KEY ] = http_route
75
+ Instrumentation . set_http_route_tags ( http_route , req . env [ SCRIPT_NAME_KEY ] )
66
76
end
67
77
68
78
yield [ match , parameters , route ]
0 commit comments