@@ -21,8 +21,20 @@ defmodule ElixirLS.Debugger.Output do
21
21
GenServer . call ( server , { :send_response , request_packet , response_body } )
22
22
end
23
23
24
- def send_error_response ( server \\ __MODULE__ , request_packet , message , format , variables ) do
25
- GenServer . call ( server , { :send_error_response , request_packet , message , format , variables } )
24
+ def send_error_response (
25
+ server \\ __MODULE__ ,
26
+ request_packet ,
27
+ message ,
28
+ format ,
29
+ variables ,
30
+ send_telemetry ,
31
+ show_user
32
+ ) do
33
+ GenServer . call (
34
+ server ,
35
+ { :send_error_response , request_packet , message , format , variables , send_telemetry ,
36
+ show_user }
37
+ )
26
38
end
27
39
28
40
def send_event ( server \\ __MODULE__ , event , body ) do
@@ -48,6 +60,27 @@ defmodule ElixirLS.Debugger.Output do
48
60
send_event ( server , "output" , % { "category" => "stderr" , "output" => maybe_append_newline ( str ) } )
49
61
end
50
62
63
+ def telemetry ( server \\ __MODULE__ , event , properties , measurements )
64
+ when is_binary ( event ) and is_map ( properties ) and is_map ( measurements ) do
65
+ common_properties = % {
66
+ "elixir_ls.elixir_version" => System . version ( ) ,
67
+ "elixir_ls.otp_release" => System . otp_release ( ) ,
68
+ "elixir_ls.erts_version" => Application . spec ( :erts , :vsn ) ,
69
+ "elixir_ls.mix_env" => Mix . env ( ) ,
70
+ "elixir_ls.mix_target" => Mix . target ( )
71
+ }
72
+
73
+ send_event ( server , "output" , % {
74
+ "category" => "telemetry" ,
75
+ "output" => event ,
76
+ "data" => % {
77
+ "name" => event ,
78
+ "properties" => Map . merge ( common_properties , properties ) ,
79
+ "measurements" => measurements
80
+ }
81
+ } )
82
+ end
83
+
51
84
defp maybe_append_newline ( message ) do
52
85
unless String . ends_with? ( message , "\n " ) do
53
86
message <> "\n "
@@ -69,7 +102,12 @@ defmodule ElixirLS.Debugger.Output do
69
102
{ :reply , res , seq + 1 }
70
103
end
71
104
72
- def handle_call ( { :send_error_response , request_packet , message , format , variables } , _from , seq ) do
105
+ def handle_call (
106
+ { :send_error_response , request_packet , message , format , variables , send_telemetry ,
107
+ show_user } ,
108
+ _from ,
109
+ seq
110
+ ) do
73
111
res =
74
112
WireProtocol . send (
75
113
error_response (
@@ -78,7 +116,9 @@ defmodule ElixirLS.Debugger.Output do
78
116
request_packet [ "command" ] ,
79
117
message ,
80
118
format ,
81
- variables
119
+ variables ,
120
+ send_telemetry ,
121
+ show_user
82
122
)
83
123
)
84
124
0 commit comments