# `PromEx.Plugins.Absinthe`
[🔗](https://github.com/akoutmos/prom_ex/blob/master/lib/prom_ex/plugins/absinthe.ex#L2)

This plugin captures metrics emitted by Absinthe. Specifically, it captures timings and metrics
around execution times, query complexity, and subscription timings. In order to get complexity
metrics you'll need to make sure that you have `:analyze_complexity` enabled in
[Absinthe.Plug](https://hexdocs.pm/absinthe_plug/Absinthe.Plug.html#t:opts/0). This plugin can
generate a large amount of Prometheus series, so it is suggested that you use the
`ignored_entrypoints` and `only_entrypoints` (TODO: coming soon) options to prune down the
resulting metrics if needed.

This plugin supports the following options:
- `ignored_entrypoints`: This option is OPTIONAL and is used to filter out Absinthe GraphQL
  schema entrypoints that you do not want to track metrics for. For example, if you don't want
  metrics on the `:__schema` entrypoint (used for GraphQL schema introspection), you would set
  a value of `[:__schema]`. This is applicable to queries, mutations, and subscriptions.

- `metric_prefix`: This option is OPTIONAL and is used to override the default metric prefix of
  `[otp_app, :prom_ex, :absinthe]`. If this changes you will also want to set `absinthe_metric_prefix`
  in your `dashboard_assigns` to the snakecase version of your prefix, the default
  `absinthe_metric_prefix` is `{otp_app}_prom_ex_absinthe`.

- `duration_unit`: This is an OPTIONAL option and is a `Telemetry.Metrics.time_unit()`. It can be one of:
  `:second | :millisecond | :microsecond | :nanosecond`. It is `:millisecond` by default.

This plugin exposes the following metric groups:
- `:absinthe_execute_event_metrics`
- `:absinthe_subscription_event_metrics`

To use plugin in your application, add the following to your PromEx module:
```
defmodule WebApp.PromEx do
  use PromEx, otp_app: :web_app

  @impl true
  def plugins do
    [
      ...
      {PromEx.Plugins.Absinthe, ignored_entrypoints: [:__schema]}
    ]
  end

  @impl true
  def dashboards do
    [
      ...
      {:prom_ex, "absinthe.json"}
    ]
  end
end
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
