defmodule HoneybadgerTestingException do defexception message: """ Testing honeybadger via `mix honeybadger.test`. If you can see this, it works. """ end defmodule Mix.Tasks.Honeybadger.Test do use Mix.Task @shortdoc "Verify your hex package installation by sending a test exception to the honeybadger service" def run(_) do with :ok <- assert_env() do send_notice() end end defp send_notice do # mute excluded envs Application.put_env(:honeybadger, :exclude_envs, []) {:ok, _started} = Application.ensure_all_started(:honeybadger) # send the notification Honeybadger.notify(%HoneybadgerTestingException{}) # this will block the mix task from stopping before # the genserver sends the notification to honeybadger Honeybadger.Client |> Process.whereis() |> GenServer.stop() # if there is no error till this point, we should assume that our notice succeeded Mix.shell().info(""" Raising 'HoneybadgerTestingException' to simulate application failure. ⚡ --- Honeybadger is installed! ----------------------------------------------- Good news: You're one deploy away from seeing all of your exceptions in Honeybadger. For now, we've generated a test exception for you. If you ever need help: - Check out our documentation: https://hexdocs.pm/honeybadger - Email the founders: support@honeybadger.io Most people don't realize that Honeybadger is a small, bootstrapped company. We really couldn't do this without you. Thank you for allowing us to do what we love: making developers awesome. Happy 'badgering! Sincerely, Ben, Josh and Starr https://www.honeybadger.io/about/ ⚡ --- End -------------------------------------------------------------------- """) end defp assert_env do try do # to be able to read the env Mix.Task.run("app.start") Honeybadger.get_env(:api_key) :ok rescue _ -> Mix.shell().error(""" Your api_key is not set Set it either in your config file or using the HONEYBADGER_API_KEY environment variable For more info visit: https://github.com/honeybadger-io/honeybadger-elixir#2-set-your-api-key-and-environment-name """) :error end end end