Packages

appsignal

2.7.1
2.17.4 2.17.3 2.17.2 2.17.1 2.17.0 2.16.0 2.15.11 2.15.10 2.15.9 2.15.8 2.15.7 2.15.6 2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.1 2.14.0 2.13.4 2.13.3 2.13.2 2.13.1 2.13.0 2.12.3 2.12.2 2.12.1 2.12.0 2.11.0 2.10.2 2.10.1 2.10.0 2.9.2 2.9.1 2.9.0 2.8.3 2.8.2 2.8.1 2.8.0 2.7.13 2.7.12 2.7.11 2.7.10 2.7.9 2.7.8 2.7.7 2.7.6 2.7.5 2.7.4 2.7.3 2.7.2 2.7.1 2.7.0 2.7.0-beta.1 2.6.1 2.6.0 2.5.3 2.5.2 2.5.1 2.5.0 2.4.3 2.4.2 2.4.1 2.4.0 2.3.1 2.3.0 2.2.19 2.2.18 2.2.17 2.2.16 2.2.15 2.2.14 2.2.13 2.2.12 retired 2.2.11 2.2.10 2.2.9 2.2.8 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.15 2.1.14 2.1.13 2.1.12 2.1.11 2.1.10 2.1.9 2.1.8 2.1.7 2.1.7-beta.1 2.1.6 2.1.5 2.1.4 2.1.3 2.1.2 2.1.1 2.1.0 2.0.8 2.0.7 2.0.6 2.0.6-beta.1 2.0.5 retired 2.0.4 retired 2.0.3 retired 2.0.2 retired 2.0.1 retired 2.0.0 retired 2.0.0-beta.11 2.0.0-beta.10 2.0.0-beta.9 2.0.0-beta.8 2.0.0-beta.7 2.0.0-beta.6 2.0.0-beta.5 2.0.0-beta.4 2.0.0-beta.3 2.0.0-beta.2 2.0.0-beta.1 2.0.0-alpha.7 2.0.0-alpha.6 2.0.0-alpha.5 2.0.0-alpha.4 2.0.0-alpha.3 2.0.0-alpha.2 2.0.0-alpha.1 1.13.5 1.13.4 1.13.3 1.13.2 1.13.1 1.13.0 1.13.0-beta.2 1.13.0-beta.1 1.12.1 1.12.0 1.12.0-beta.3 1.12.0-beta.2 1.12.0-beta.1 1.11.8 1.11.7 1.11.6 1.11.5 1.11.4 1.11.3 1.11.2 1.11.1 1.11.0 1.11.0-beta.1 1.10.13 1.10.12 1.10.11 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.4 1.9.3 1.9.2 1.9.1 1.9.1-beta.1 1.9.0 1.9.0-beta.1 1.9.0-alpha.1 1.8.2 1.8.1 1.8.1-beta.2 1.8.1-beta.1 1.8.0 1.7.2 1.7.1 1.7.0 1.7.0-beta.2 1.7.0-beta.1 1.7.0-alpha.4 1.7.0-alpha.3 1.7.0-alpha.2 1.7.0-alpha.1 1.6.7 1.6.6 1.6.6-beta.2 1.6.6-beta.1 1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.6.0-beta.1 1.6.0-alpha.1 1.5.1 1.5.0 1.5.0-beta.2 1.5.0-beta.1 1.4.11-beta.1 1.4.10 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.4.0-alpha.1 1.3.6 1.3.6-beta.1 1.3.5 1.3.4 1.3.4-beta.1 1.3.3 1.3.2 1.3.1 1.3.0 1.3.0-beta.3 1.3.0-beta.2 1.3.0-beta.1 1.2.3 1.2.2 1.2.1 1.2.0 1.1.1 1.1.0 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0 1.0.0-rc.1 0.13.0 0.12.3 0.12.2 0.12.1 0.12.0 0.11.6 0.11.5 0.11.4 0.11.3 0.11.2 0.11.1 0.11.0 0.10.0 0.9.2 0.9.1 0.9.0 0.8.0 0.7.1 0.7.0 0.6.2 0.6.1 0.6.0 0.5.0 0.4.0 0.3.0 0.2.0 0.1.0 0.0.9 0.0.8 0.0.7 0.0.6 0.0.5 0.0.4 0.0.3 0.0.2 0.0.1

Collects error and performance data from your Elixir applications and sends it to AppSignal

Current section

Files

Jump to
appsignal lib appsignal diagnose agent.ex
Raw

lib/appsignal/diagnose/agent.ex

defmodule Appsignal.Diagnose.Agent do
@moduledoc false
require Appsignal.Utils
@nif Appsignal.Utils.compile_env(:appsignal, :appsignal_nif, Appsignal.Nif)
def report do
if @nif.loaded?() do
Appsignal.Nif.env_put("_APPSIGNAL_DIAGNOSE", "true")
report_string = @nif.diagnose()
report =
case Appsignal.Json.decode(report_string) do
{:ok, report} -> {:ok, report}
{:error, _} -> {:error, report_string}
end
Appsignal.Nif.env_delete("_APPSIGNAL_DIAGNOSE")
report
else
{:error, :nif_not_loaded}
end
end
# Start AppSignal as usual, in diagnose mode, so that it exits early, but
# does go through the whole process of setting the config to the
# environment.
def print(report) do
IO.puts("Agent diagnostics")
if report["error"] do
IO.puts(" Error: #{report["error"]}")
else
Enum.each(report_definition(), fn definition ->
IO.puts(" #{definition[:label]}")
print_component(report[definition[:key]] || %{}, definition[:tests])
end)
end
IO.puts("")
end
defp print_component(report, categories) do
Enum.each(categories, fn {category, tests} ->
print_category(report[category] || %{}, tests)
end)
end
defp print_category(report, tests) do
Enum.each(tests, fn test ->
print_test(
report[test[:key]] || %{},
test
)
end)
end
defp print_test(report, definition) do
IO.write(" #{definition[:label]}: ")
result = report["result"]
display_value =
case Map.has_key?(definition, :values) do
true ->
case Map.fetch(definition[:values], report["result"]) do
{:ok, value} -> value
:error -> nil
end
false ->
result
end
display_value =
case display_value do
value when value in [nil, ""] -> "-"
value -> value
end
IO.puts(display_value)
if report["error"], do: IO.puts(" Error: #{report["error"]}")
if report["output"], do: IO.puts(" Output: #{report["output"]}")
end
defp report_definition do
[
%{
:key => "extension",
:label => "Extension tests",
:tests => [
{
"config",
[
%{
:key => "valid",
:label => "Configuration",
:values => %{true: "valid", false: "invalid"}
}
]
}
]
},
%{
:key => "agent",
:label => "Agent tests",
:tests => [
{
"boot",
[
%{
:key => "started",
:label => "Started",
:values => %{true: "started", false: "not started"}
}
]
},
{
"host",
[
%{
:key => "uid",
:label => "Process user id"
},
%{
:key => "gid",
:label => "Process user group id"
}
]
},
{
"config",
[
%{
:key => "valid",
:label => "Configuration",
:values => %{true: "valid", false: "invalid"}
}
]
},
{
"logger",
[
%{
:key => "started",
:label => "Logger",
:values => %{true: "started", false: "not started"}
}
]
},
{
"working_directory_stat",
[
%{
:key => "uid",
:label => "Working directory user id"
},
%{
:key => "gid",
:label => "Working directory user group id"
},
%{
:key => "mode",
:label => "Working directory permissions"
}
]
},
{
"lock_path",
[
%{
:key => "created",
:label => "Lock path",
:values => %{true: "writable", false: "not writable"}
}
]
}
]
}
]
end
end