Packages
timber
1.1.9
3.1.2
3.1.1
3.1.0
3.0.0
3.0.0-alpha.3
3.0.0-alpha.2
3.0.0-alpha.1
2.8.4
2.8.3
2.8.2
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.1
2.3.0
2.2.1
2.2.0
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
2.0.0-rc7
2.0.0-rc6
2.0.0-rc5
2.0.0-rc4
2.0.0-rc3
2.0.0-rc2
2.0.0-rc1
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.16
1.0.15
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
🌲 Great Elixir Logging Made Easy. Official Timber.io Integration.
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/timber/install.ex
defmodule Mix.Tasks.Timber.Install do
use Mix.Task
alias __MODULE__.{Application, ConfigFile, EndpointFile, Event, Feedback, HTTPClient,
IOHelper, Messages, Platform, WebFile}
require Logger
def run([]) do
"""
#{Messages.header()}
#{Messages.forgot_key()}
"""
|> IOHelper.puts(:red)
end
def run([api_key]) do
session_id = generate_session_id()
try do
:ok = HTTPClient.start()
Event.send!(:started, session_id, api_key)
"""
#{Messages.header()}
#{Messages.intro()}
"""
|> IOHelper.puts()
application = Application.new!(session_id, api_key)
create_config_file!(application)
link_config_file!(application)
add_plugs!(application)
disable_default_phoenix_logging!(application)
install_user_context!(session_id, api_key)
#install_http_client_context!(session_id, api_key)
Platform.install!(session_id, application)
finish!(session_id, api_key)
Feedback.collect(session_id, api_key)
rescue
e ->
message = Exception.message(e)
stacktrace = Exception.format_stacktrace(System.stacktrace())
"""
#{String.duplicate("!", 80)}
#{message}
#{Messages.get_help()}
---
Here's the stacktrace for reference:
#{stacktrace}
"""
|> IOHelper.puts(:red)
case IOHelper.ask_yes_no("Permission to send this error to Timber?") do
:yes ->
data = %{message: message, stacktrace: stacktrace}
Event.send!(:exception, session_id, api_key, data: data)
:no -> :ok
end
:ok
end
end
def generate_session_id() do
32
|> :crypto.strong_rand_bytes()
|> Base.encode16(case: :lower)
|> binary_part(0, 32)
end
defp create_config_file!(application) do
ConfigFile.create!(application)
Messages.action_starting("Creating #{ConfigFile.file_path()}...")
|> IOHelper.write()
Messages.success()
|> IOHelper.puts(:green)
end
# Links config/timber.exs within config/config.exs
defp link_config_file!(%{config_file_path: config_file_path}) do
Messages.action_starting("Linking #{ConfigFile.file_path()} in #{config_file_path}...")
|> IOHelper.write()
ConfigFile.link!(config_file_path)
Messages.success()
|> IOHelper.puts(:green)
end
defp add_plugs!(%{endpoint_file_path: endpoint_file_path}) do
Messages.action_starting("Adding Timber plugs to #{endpoint_file_path}...")
|> IOHelper.write()
EndpointFile.update!(endpoint_file_path)
Messages.success()
|> IOHelper.puts(:green)
end
defp disable_default_phoenix_logging!(%{web_file_path: web_file_path}) do
Messages.action_starting("Disabling default Phoenix logging #{web_file_path}...")
|> IOHelper.write()
WebFile.update!(web_file_path)
Messages.success()
|> IOHelper.puts(:green)
end
defp install_user_context!(session_id, api_key) do
"""
#{Messages.separator()}
"""
|> IOHelper.puts()
answer = IOHelper.ask_yes_no("Does your application have user accounts?")
Event.send!(:user_context_answer, session_id, api_key, data: %{answer: answer})
case answer do
:yes ->
Messages.user_context_instructions()
|> IOHelper.puts()
case IOHelper.ask_yes_no("Ready to proceed?") do
:yes -> :ok
:no -> install_user_context!(session_id, api_key)
end
:no ->
false
end
end
# defp install_http_client_context!(session_id, api_key) do
# """
# #{Messages.separator()}
# """
# |> IOHelper.puts()
# answer = IOHelper.ask_yes_no("Does your application send outgoing HTTP requests?")
# Event.send!(:http_tracking_answer, session_id, api_key, data: %{answer: answer})
# case answer do
# :yes ->
# Messages.outgoing_http_instructions()
# |> IOHelper.puts()
# case IOHelper.ask_yes_no("Ready to proceed?") do
# :yes -> :ok
# :no -> install_http_client_context!()
# end
# :no -> false
# end
# end
defp finish!(session_id, api_key) do
Event.send!(:success, session_id, api_key)
Messages.finish()
|> IOHelper.puts()
end
end