lib/mix/tasks/verify_config.ex

defmodule Mix.Tasks.BetterstackLogger.VerifyConfig do
  alias BetterstackLogger.CLI
  use Mix.Task

  @app :betterstack_logger_backend
  @default_api_url "https://in.logs.betterstack.com"

  @impl Mix.Task
  def run(_args \\ []) do
    IO.puts("You are verifying config for the #{Mix.env()} environment")
    {:ok, _} = Application.ensure_all_started(:betterstack_logger_backend)

    source_id = get_env(:source_id) || System.get_env("BETTERSTACK_SOURCE_ID")
    url = get_env(:url) || System.get_env("BETTERSTACK_URL") || @default_api_url

    CLI.throw_on_missing_source!(source_id)
    CLI.throw_on_missing_url!(url)

    client = BetterstackApiClient.new(%{source_id: source_id, url: url})

    timestamp = NaiveDateTime.utc_now() |> NaiveDateTime.to_iso8601() |> Kernel.<>("Z")

    result =
      BetterstackApiClient.post_logs(
        client,
        [
          %{
            "message" => "BetterstackLogger has been properly setup",
            "metadata" => %{},
            "level" => "info",
            "timestamp" => timestamp
          }
        ]
      )

    case result do
      {:ok, %{status: status}} when status in 200..299 ->
        IO.puts("Betterstack API endpoint responded ok, check your dashboard!")

      {:ok, %{status: status, body: body}} ->
        IO.puts("HTTP request to Betterstack API endpoint returned an HTTP status code #{status}.")
        IO.puts("Response body is: #{body}")

      {:error, tesla_env} ->
        IO.puts("Unknown Error")
        IO.inspect(tesla_env)
    end
  end

  def get_env(key) do
    Application.get_env(@app, key)
  end
end