# `ScoutApm.MetricSet`

A way to absorb & combine metrics into a single set, keeping track of min/max/count, etc.

While this is just a map underneath, treat it like an opaque data type.

# `options`

```elixir
@type options() :: %{
  collapse_all: boolean(),
  compare_desc: boolean(),
  max_types: non_neg_integer()
}
```

# `t`

```elixir
@type t() :: %ScoutApm.MetricSet{data: map(), options: options(), types: MapSet.t()}
```

# `absorb`

```elixir
@spec absorb(t(), ScoutApm.Internal.Metric.t()) :: t()
```

Add this metric to this metric set.

As a safety valve in the agent,
this skips adding if we've reached the limit of unique 'type' values
in this set.  Since 'type' is something like 'Ecto' or 'Controller',
it's very unlikely that this safety valve ever gets hit in normal
practice, but instead is designed to protect people from accidentally
varying their custom instrumentation types.

# `absorb_all`

```elixir
@spec absorb_all(t(), [ScoutApm.Internal.Metric.t()]) :: t()
```

# `merge`

```elixir
@spec merge(t(), t()) :: t()
```

# `new`

```elixir
@spec new() :: t()
```

# `new`

```elixir
@spec new(map()) :: t()
```

# `to_list`

```elixir
@spec to_list(t()) :: [ScoutApm.Internal.Metric.t()]
```

---

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