Skip to content

Commit

Permalink
improvements to telemetry
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaszsamson committed Oct 20, 2023
1 parent cc1d608 commit b81b12a
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 45 deletions.
2 changes: 1 addition & 1 deletion apps/elixir_ls_debugger/lib/debugger/output.ex
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ defmodule ElixirLS.Debugger.Output do
common_properties = %{
"elixir_ls.elixir_version" => System.version(),
"elixir_ls.otp_release" => System.otp_release(),
"elixir_ls.erts_version" => Application.spec(:erts, :vsn),
"elixir_ls.erts_version" => to_string(Application.spec(:erts, :vsn)),
"elixir_ls.mix_env" => Mix.env(),
"elixir_ls.mix_target" => Mix.target()
}
Expand Down
26 changes: 17 additions & 9 deletions apps/elixir_ls_debugger/lib/debugger/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ defmodule ElixirLS.Debugger.Server do

other ->
Output.telemetry(
"elixir_ls.dap_server_error",
"dap_server_error",
%{
"elixir_ls.dap_server_error" => inspect(other)
},
Expand Down Expand Up @@ -335,9 +335,13 @@ defmodule ElixirLS.Debugger.Server do
elapsed = System.monotonic_time(:millisecond) - start_time
Output.send_response(packet, response_body)

Output.telemetry("elixir_ls.dap_request", %{"elixir_ls.dap_command" => command}, %{
"elixir_ls.dap_request_time" => elapsed
})
Output.telemetry(
"dap_request",
%{"elixir_ls.dap_command" => String.replace(command, "/", "_")},
%{
"elixir_ls.dap_request_time" => elapsed
}
)
end

state = %{
Expand All @@ -363,7 +367,7 @@ defmodule ElixirLS.Debugger.Server do
def handle_cast({:receive_packet, request(_, "disconnect") = packet}, state = %__MODULE__{}) do
Output.send_response(packet, %{})

Output.telemetry("elixir_ls.dap_request", %{"elixir_ls.dap_command" => "disconnect"}, %{
Output.telemetry("dap_request", %{"elixir_ls.dap_command" => "disconnect"}, %{
"elixir_ls.dap_request_time" => 0
})

Expand All @@ -382,7 +386,7 @@ defmodule ElixirLS.Debugger.Server do
Output.send_response(packet, response_body)

Output.telemetry(
"elixir_ls.dap_request",
"dap_request",
%{"elixir_ls.dap_command" => "initialize"},
%{
"elixir_ls.dap_request_time" => elapsed
Expand All @@ -406,9 +410,13 @@ defmodule ElixirLS.Debugger.Server do
elapsed = System.monotonic_time(:millisecond) - start_time
Output.send_response(packet, response_body)

Output.telemetry("elixir_ls.dap_request", %{"elixir_ls.dap_command" => command}, %{
"elixir_ls.dap_request_time" => elapsed
})
Output.telemetry(
"dap_request",
%{"elixir_ls.dap_command" => String.replace(command, "/", "_")},
%{
"elixir_ls.dap_request_time" => elapsed
}
)

state

Expand Down
6 changes: 3 additions & 3 deletions apps/language_server/lib/language_server/build.ex
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ defmodule ElixirLS.LanguageServer.Build do
Logger.warning("Mix.Dep.load_on_environment([]) failed: #{message}")

JsonRpc.telemetry(
"elixir_ls.build_error",
"build_error",
%{"elixir_ls.build_error" => message},
%{}
)
Expand All @@ -66,7 +66,7 @@ defmodule ElixirLS.LanguageServer.Build do
Tracer.save()
Logger.info("Compile took #{div(us, 1000)} milliseconds")

JsonRpc.telemetry("elixir_ls.build", %{"elixir_ls.result" => result}, %{
JsonRpc.telemetry("build", %{"elixir_ls.result" => result}, %{
"elixir_ls.build_time" => div(us, 1000)
})
end)
Expand Down Expand Up @@ -303,7 +303,7 @@ defmodule ElixirLS.LanguageServer.Build do
Logger.error("mix clean returned #{inspect(results)}")

JsonRpc.telemetry(
"elixir_ls.mix_clean_error",
"mix_clean_error",
%{"elixir_ls.mix_clean_error" => inspect(results)},
%{}
)
Expand Down
6 changes: 3 additions & 3 deletions apps/language_server/lib/language_server/dialyzer.ex
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer do
Logger.error(message)

JsonRpc.telemetry(
"elixir_ls.dialyzer_error",
"dialyzer_error",
%{"elixir_ls.dialyzer_error" => message},
%{}
)
Expand Down Expand Up @@ -420,7 +420,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer do

Logger.info("[ElixirLS Dialyzer] Analysis finished in #{div(us, 1000)} milliseconds")

JsonRpc.telemetry("elixir_ls.dialyzer", %{}, %{"elixir_ls.dialyzer_time" => div(us, 1000)})
JsonRpc.telemetry("dialyzer", %{}, %{"elixir_ls.dialyzer_time" => div(us, 1000)})

analysis_finished(parent, :ok, active_plt, mod_deps, md5, warnings, timestamp, build_ref)
end
Expand Down Expand Up @@ -500,7 +500,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer do
)

JsonRpc.telemetry(
"elixir_ls.dialyzer_error",
"dialyzer_error",
%{"elixir_ls.dialyzer_error" => inspect(reason)},
%{}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,6 @@ defmodule ElixirLS.LanguageServer.Dialyzer.Analyzer do
"Analysis failed: " <> Exception.format_exit(reason) <> "\n" <> Enum.join(log_cache, "\n")

Logger.error(message)
JsonRpc.telemetry("elixir_ls.dialyzer_error", %{"elixir_ls.dialyzer_error" => message}, %{})
JsonRpc.telemetry("dialyzer_error", %{"elixir_ls.dialyzer_error" => message}, %{})
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ defmodule ElixirLS.LanguageServer.Dialyzer.Manifest do
)

JsonRpc.telemetry(
"elixir_ls.dialyzer_error",
"dialyzer_error",
%{
"elixir_ls.dialyzer_error" =>
"Dialyzer PLT build process exited with reason: #{error_msg}"
Expand Down
2 changes: 1 addition & 1 deletion apps/language_server/lib/language_server/json_rpc.ex
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ defmodule ElixirLS.LanguageServer.JsonRpc do
common_properties = %{
"elixir_ls.elixir_version" => System.version(),
"elixir_ls.otp_release" => System.otp_release(),
"elixir_ls.erts_version" => Application.spec(:erts, :vsn),
"elixir_ls.erts_version" => to_string(Application.spec(:erts, :vsn)),
"elixir_ls.mix_env" => Mix.env(),
"elixir_ls.mix_target" => Mix.target()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ defmodule ElixirLS.LanguageServer.Providers.FoldingRange.Token do
Logger.warning("Unmatched token: #{inspect(error)}")

JsonRpc.telemetry(
"elixir_ls.folding_ranges_error",
"folding_ranges_error",
%{"elixir_ls.folding_ranges_error" => inspect(error)},
%{}
)
Expand Down
58 changes: 33 additions & 25 deletions apps/language_server/lib/language_server/server.ex
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ defmodule ElixirLS.LanguageServer.Server do

other ->
JsonRpc.telemetry(
"elixir_ls.lsp_server_error",
"lsp_server_error",
%{
"elixir_ls.lsp_server_error" => inspect(other)
},
Expand All @@ -165,9 +165,9 @@ defmodule ElixirLS.LanguageServer.Server do
JsonRpc.respond_with_error(id, type, msg)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => command,
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
"elixir_ls.lsp_error" => type,
"elixir_ls.lsp_error_message" => msg
},
Expand All @@ -178,9 +178,13 @@ defmodule ElixirLS.LanguageServer.Server do
elapsed = System.monotonic_time(:millisecond) - start_time
JsonRpc.respond(id, result)

JsonRpc.telemetry("elixir_ls.lsp_request", %{"elixir_ls.lsp_command" => command}, %{
"elixir_ls.lsp_request_time" => elapsed
})
JsonRpc.telemetry(
"lsp_request",
%{"elixir_ls.lsp_command" => String.replace(command, "/", "_")},
%{
"elixir_ls.lsp_request_time" => elapsed
}
)
end

state = %{state | requests: requests}
Expand Down Expand Up @@ -313,9 +317,9 @@ defmodule ElixirLS.LanguageServer.Server do
JsonRpc.respond_with_error(id, :server_error, error_msg)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => command,
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
"elixir_ls.lsp_error" => :server_error,
"elixir_ls.lsp_error_message" => error_msg
},
Expand Down Expand Up @@ -647,7 +651,7 @@ defmodule ElixirLS.LanguageServer.Server do
elapsed = System.monotonic_time(:millisecond) - start_time
JsonRpc.respond(id, result)

JsonRpc.telemetry("elixir_ls.lsp_request", %{"elixir_ls.lsp_command" => "initialize"}, %{
JsonRpc.telemetry("lsp_request", %{"elixir_ls.lsp_command" => "initialize"}, %{
"elixir_ls.lsp_request_time" => elapsed
})

Expand All @@ -657,7 +661,7 @@ defmodule ElixirLS.LanguageServer.Server do
JsonRpc.respond_with_error(id, :server_not_initialized)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => "initialize",
"elixir_ls.lsp_error" => :server_not_initialized,
Expand Down Expand Up @@ -692,19 +696,23 @@ defmodule ElixirLS.LanguageServer.Server do
elapsed = System.monotonic_time(:millisecond) - start_time
JsonRpc.respond(id, result)

JsonRpc.telemetry("elixir_ls.lsp_request", %{"elixir_ls.lsp_command" => command}, %{
"elixir_ls.lsp_request_time" => elapsed
})
JsonRpc.telemetry(
"lsp_request",
%{"elixir_ls.lsp_command" => String.replace(command, "/", "_")},
%{
"elixir_ls.lsp_request_time" => elapsed
}
)

state

{:error, type, msg, state} ->
JsonRpc.respond_with_error(id, type, msg)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => command,
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
"elixir_ls.lsp_error" => type,
"elixir_ls.lsp_error_message" => msg
},
Expand All @@ -722,9 +730,9 @@ defmodule ElixirLS.LanguageServer.Server do
JsonRpc.respond_with_error(id, :invalid_params, e.message)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => command,
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
"elixir_ls.lsp_error" => :invalid_params,
"elixir_ls.lsp_error_message" => e.message
},
Expand All @@ -739,9 +747,9 @@ defmodule ElixirLS.LanguageServer.Server do
JsonRpc.respond_with_error(id, :server_error, error_msg)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => command,
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
"elixir_ls.lsp_error" => :server_error,
"elixir_ls.lsp_error_message" => error_msg
},
Expand All @@ -756,9 +764,9 @@ defmodule ElixirLS.LanguageServer.Server do
JsonRpc.respond_with_error(id, :invalid_request)

JsonRpc.telemetry(
"elixir_ls.lsp_request_error",
"lsp_request_error",
%{
"elixir_ls.lsp_command" => command,
"elixir_ls.lsp_command" => String.replace(command, "/", "_"),
"elixir_ls.lsp_error" => :invalid_request,
"elixir_ls.lsp_error_message" => "Invalid Request"
},
Expand Down Expand Up @@ -1433,7 +1441,7 @@ defmodule ElixirLS.LanguageServer.Server do
Logger.error("client/registerCapability returned: #{inspect(other)}")

JsonRpc.telemetry(
"elixir_ls.reverse_request_error",
"reverse_request_error",
%{
"elixir_ls.reverse_request_error" => inspect(other),
"elixir_ls.reverse_request" => "client/registerCapability"
Expand All @@ -1460,7 +1468,7 @@ defmodule ElixirLS.LanguageServer.Server do
Logger.error("client/registerCapability returned: #{inspect(other)}")

JsonRpc.telemetry(
"elixir_ls.reverse_request_error",
"reverse_request_error",
%{
"elixir_ls.reverse_request_error" => inspect(other),
"elixir_ls.reverse_request" => "client/registerCapability"
Expand Down Expand Up @@ -1676,7 +1684,7 @@ defmodule ElixirLS.LanguageServer.Server do
Logger.error("Cannot get client configuration: #{inspect(other)}")

JsonRpc.telemetry(
"elixir_ls.reverse_request_error",
"reverse_request_error",
%{
"elixir_ls.reverse_request_error" => inspect(other),
"elixir_ls.reverse_request" => "workspace/configuration"
Expand Down Expand Up @@ -1757,7 +1765,7 @@ defmodule ElixirLS.LanguageServer.Server do
)

JsonRpc.telemetry(
"elixir_ls.parser_error",
"parser_error",
%{"elixir_ls.parser_error" => Exception.format(:error, e, __STACKTRACE__)},
%{}
)
Expand Down

0 comments on commit b81b12a

Please sign in to comment.