Skip to main content

lib/mix/tasks/parapet.gen.prometheus.ex

defmodule Mix.Tasks.Parapet.Gen.Prometheus do
  @moduledoc """
  Generates valid Prometheus recording and alerting rules based on the user's defined SLOs.
  """
  use Igniter.Mix.Task

  @impl Igniter.Mix.Task
  def info(_argv, _composing_task) do
    %Igniter.Mix.Task.Info{
      schema: [],
      defaults: []
    }
  end

  alias Parapet.SLO.Generator

  @impl Igniter.Mix.Task
  def igniter(igniter) do
    artifacts = Generator.provider_artifacts()

    Igniter.create_new_file(
      igniter,
      "priv/parapet/prometheus/recording_rules.yml",
      artifacts.recording_rules
    )
    |> Igniter.create_new_file(
      "priv/parapet/prometheus/alerts.yml",
      artifacts.alerts
    )
    |> Igniter.create_new_file(
      "priv/parapet/prometheus/rules.yml",
      artifacts.rules
    )
  end
end