Packages
appsignal
1.9.2
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
Current section
Files
lib/appsignal/diagnose/agent.ex
defmodule Appsignal.Diagnose.Agent do
@nif Application.get_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 Poison.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 {component, definition} ->
IO.puts(" #{definition[:label]}")
print_component(report[component] || %{}, 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, definition} ->
print_test(report[test] || %{}, definition)
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
%{
"extension" => %{
:label => "Extension tests",
:tests => %{
"config" => %{
"valid" => %{
:label => "Configuration",
:values => %{true => "valid", false => "invalid"}
}
}
}
},
"agent" => %{
:label => "Agent tests",
:tests => %{
"boot" => %{
"started" => %{
:label => "Started",
:values => %{true => "started", false => "not started"}
}
},
"host" => %{
"uid" => %{:label => "Process user id"},
"gid" => %{:label => "Process user group id"}
},
"config" => %{
"valid" => %{
:label => "Configuration",
:values => %{true => "valid", false => "invalid"}
}
},
"logger" => %{
"started" => %{
:label => "Logger",
:values => %{true => "started", false => "not started"}
}
},
"working_directory_stat" => %{
"uid" => %{:label => "Working directory user id"},
"gid" => %{:label => "Working directory user group id"},
"mode" => %{:label => "Working directory permissions"}
},
"lock_path" => %{
"created" => %{
:label => "Lock path",
:values => %{true => "writable", false => "not writable"}
}
}
}
}
}
end
end