lib/mix/tasks/install.ex

defmodule Mix.Tasks.Geometrics.Install do
  @shortdoc "Installs necessary components for Geometrics to work"
  @moduledoc """
  Installs supplementary files which may be helpful for adding opentelemetry
  to an application, including a default docker compose file which runs an
  opentelemetry collector.
  """
  use Mix.Task

  def run(_) do
    cp_opentelemetry_files()
  end

  defp cp_opentelemetry_files() do
    if System.get_env("HONEYCOMB_WRITE_KEY") && System.get_env("HONEYCOMB_DATASET") do
      Mix.Shell.IO.info("Copying opentelemetry-collector files to working directory")

      cp_from_priv("opentelemetry", "docker-compose.yml")
      cp_from_priv("opentelemetry", "otel-collector-config.yml")

      Mix.Shell.IO.info(
        "To start up the collector in your local development environment, simply run `docker-compose up`"
      )
    else
      Mix.Shell.IO.info(
        "Please set HONEYCOMB_WRITE_KEY and HONEYCOMB_DATASET in your environment"
      )
    end
  end

  defp cp_from_priv(dir, file) do
    src = [:code.priv_dir(:geometrics), dir, file] |> Path.join()
    dest = [File.cwd!(), file] |> Path.join()
    Mix.Shell.IO.info("✅ #{dest}")

    File.cp(src, dest)
  end
end