Packages
timber
1.1.5
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, Config, ConfigFile, EndpointFile, Feedback, HTTPClient, IOHelper,
Messages, WebFile}
require Logger
def run([]) do
"""
#{Messages.header()}
#{Messages.forgot_key()}
"""
|> IOHelper.puts(:red)
end
def run([api_key]) do
:ok = HTTPClient.start()
"""
#{Messages.header()}
#{Messages.intro()}
"""
|> IOHelper.puts()
application = Application.new!(api_key)
create_config_file!(application)
link_config_file!(application)
add_plugs!(application)
disable_default_phoenix_logging!(application)
install_user_context!()
#install_http_client_context!()
install_on_platform!(application)
finish!(api_key)
Feedback.collect(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 ->
# body = %{message: message, stacktrace: stacktrace}
# Config.http_client().request!(:post, "/installer/error", body: %{error: body})
# :no -> :ok
# end
:ok
end
defp create_config_file!(application) do
Messages.action_starting("Creating #{ConfigFile.file_path()}...")
|> IOHelper.write()
case ConfigFile.create!(application) do
:ok ->
Messages.success()
|> IOHelper.puts(:green)
:ok
{:error, reason} -> {:error, reason}
end
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! do
"""
#{Messages.separator()}
"""
|> IOHelper.puts()
case IOHelper.ask_yes_no("Does your application have user accounts?") do
:yes ->
Messages.user_context_instructions()
|> IOHelper.puts()
case IOHelper.ask_yes_no("Ready to proceed?") do
:yes -> :ok
:no -> install_user_context!()
end
:no -> false
end
end
# defp install_http_client_context! do
# """
# #{Messages.separator()}
# """
# |> IOHelper.puts()
# case IOHelper.ask_yes_no("Does your application send outgoing HTTP requests?") do
# :yes ->
# Messages.outgoing_http_instructions()
# |> IOHelper.puts()
# case IOHelper.ask_yes_no("Ready to proceed?") do
# :yes -> :ok
# :no -> install_user_context!()
# end
# :no -> false
# end
# end
defp install_on_platform!(%{platform_type: "heroku", heroku_drain_url: heroku_drain_url} = application) do
Messages.heroku_drain_instructions(heroku_drain_url)
|> IOHelper.puts()
Application.wait_for_logs(application)
end
defp install_on_platform!(application) do
Messages.action_starting("Sending a few test logs...")
|> IOHelper.write()
Logger.info("testing")
Messages.success()
|> IOHelper.puts(:green)
Application.wait_for_logs(application)
end
defp finish!(api_key) do
Config.http_client().request!(:post, "/installer/success", api_key: api_key)
Messages.finish()
|> IOHelper.puts()
end
end