defmodule Mix.Tasks.Sentry.SendTestEvent do use Mix.Task alias Sentry.Config @shortdoc "Attempts to send a test event to check Sentry configuration" @moduledoc """ Send test even to check if Sentry configuration is correct. """ def run(args) do unless "--no-compile" in args do Mix.Project.compile(args) end Application.ensure_all_started(:sentry) Sentry.Client.get_dsn! |> print_environment_info() maybe_send_event() end defp print_environment_info({endpoint, public_key, secret_key}) do Mix.shell.info "Client configuration:" Mix.shell.info "server: #{endpoint}" Mix.shell.info "public_key: #{public_key}" Mix.shell.info "secret_key: #{secret_key}" Mix.shell.info "included_environments: #{inspect included_environments()}" Mix.shell.info "current environment_name: #{inspect Config.environment_name()}" Mix.shell.info "hackney_opts: #{inspect Config.hackney_opts()}\n" end defp included_environments do case Application.fetch_env(:sentry, :included_environments) do {:ok, envs} when is_list(envs) -> envs _ -> Mix.raise "Sentry included_environments is not configured in :sentry, :included_environments" end end defp maybe_send_event do env_name = Config.environment_name() included_envs = included_environments() if env_name in included_envs do Mix.shell.info "Sending test event..." result = "Testing sending Sentry event" |> RuntimeError.exception |> Sentry.capture_exception(result: :sync) case result do {:ok, id} -> Mix.shell.info "Test event sent! Event ID: #{id}" :excluded -> Mix.shell.info "No test event was sent because the event was excluded by a filter" end else Mix.shell.info "#{inspect env_name} is not in #{inspect included_envs} so no test event will be sent" end end end