1
1
defmodule NewRelic.Telemetry.Phoenix do
2
2
use GenServer
3
3
4
+ alias NewRelic.Tracer
5
+
4
6
@ moduledoc """
5
7
Provides `Phoenix` instrumentation via `telemetry`.
6
8
@@ -20,10 +22,14 @@ defmodule NewRelic.Telemetry.Phoenix do
20
22
end
21
23
22
24
@ phoenix_router_start [ :phoenix , :router_dispatch , :start ]
25
+ @ phoenix_controller_render_start [ :phoenix , :controller , :render , :start ]
26
+ @ phoenix_controller_render_stop [ :phoenix , :controller , :render , :stop ]
23
27
@ phoenix_error [ :phoenix , :error_rendered ]
24
28
25
29
@ phoenix_events [
26
30
@ phoenix_router_start ,
31
+ @ phoenix_controller_render_start ,
32
+ @ phoenix_controller_render_stop ,
27
33
@ phoenix_error
28
34
]
29
35
@@ -83,6 +89,33 @@ defmodule NewRelic.Telemetry.Phoenix do
83
89
|> NewRelic . add_attributes ( )
84
90
end
85
91
92
+ def handle_event (
93
+ @ phoenix_controller_render_start ,
94
+ meas ,
95
+ % { view: view , template: template , format: format } = meta ,
96
+ _config
97
+ ) do
98
+ Tracer.Direct . start_span (
99
+ meta . telemetry_span_context ,
100
+ "#{ inspect ( view ) } .show" ,
101
+ system_time: meas . system_time ,
102
+ attributes: [
103
+ "phoenix.view": inspect ( view ) ,
104
+ "phoenix.template": template ,
105
+ "phoenix.format": format
106
+ ]
107
+ )
108
+ end
109
+
110
+ def handle_event (
111
+ @ phoenix_controller_render_stop ,
112
+ meas ,
113
+ meta ,
114
+ _config
115
+ ) do
116
+ Tracer.Direct . stop_span ( meta . telemetry_span_context , duration: meas . duration )
117
+ end
118
+
86
119
def handle_event ( _event , _measurements , _meta , _config ) do
87
120
:ignore
88
121
end
0 commit comments