# `Prometheus.Model`
[🔗](https://github.com/prometheus-erl/prometheus.ex/blob/v5.1.0/lib/prometheus/model.ex#L1)

Helpers for working with Prometheus data model. For advanced users.

`Prometheus.Collector` example demonstrates how to use this module.

# `counter_metric`

Creates counter metric with `labels` and `value`.

    iex(15)> Prometheus.Model.counter_metric([host: "example.com"], 100)
    {:Metric, [{:LabelPair, "host", "example.com"}], :undefined, {:Counter, 100},
    :undefined, :undefined, :undefined, :undefined}

# `counter_metrics`

Creates counter metrics from `mdata` {labels, value} tuple list.

    iex(14)> Prometheus.Model.counter_metrics([{[host: "example.com"], 100}])
    [{:Metric, [{:LabelPair, "host", "example.com"}], :undefined, {:Counter, 100},
    :undefined, :undefined, :undefined, :undefined}]

# `create_mf`

Creates Metric Family of `type`, `name` and `help`.
`collector.collect_metrics/2` callback will be called and expected to
return individual metrics list.

# `gauge_metric`

Creates gauge metric with `labels` and `value`.

    iex(13)> Prometheus.Model.gauge_metric([host: "example.com"], 100)
    {:Metric, [{:LabelPair, "host", "example.com"}], {:Gauge, 100}, :undefined,
     :undefined, :undefined, :undefined, :undefined}

# `gauge_metrics`

Creates gauge metrics from `mdata` {label, value} tuple list.

    iex(11)> Prometheus.Model.gauge_metrics([{[host: "example.com"], 100}])
    [{:Metric, [{:LabelPair, "host", "example.com"}], {:Gauge, 100}, :undefined,
    :undefined, :undefined, :undefined, :undefined}]

# `histogram_metric`

Creates histogram metric with `labels`, `buckets`, `count`, and `sum`.

    iex(4)> Prometheus.Model.histogram_metric([{:method, :get}],
    ...(4)>                                    [{2, 1}, {5, 1}, {:infinity, 2}],
    ...(4)>                                    2, 10.5)
    {:Metric, [{:LabelPair, "method", "get"}], :undefined, :undefined, :undefined,
    :undefined,
    {:Histogram, 2, 10.5,
    [{:Bucket, 1, 2}, {:Bucket, 1, 5}, {:Bucket, 2, :infinity}]}, :undefined}

Buckets is a list of pairs {upper_bound, cumulative_count}.
Cumulative count is a sum of all cumulative_counts of previous buckets + counter of
current bucket.

# `histogram_metrics`

Creates histogram metrics from `mdata` {labels, buckets, count, sum} tuple list.

    iex(2)> Prometheus.Model.histogram_metrics([{[{:method, :get}],
    ...(2)>                                      [{2, 1}, {5, 1}, {:infinity, 2}],
    ...(2)>                                      2, 10.5}])
    [{:Metric, [{:LabelPair, "method", "get"}], :undefined, :undefined, :undefined,
      :undefined,
      {:Histogram, 2, 10.5,
       [{:Bucket, 1, 2}, {:Bucket, 1, 5}, {:Bucket, 2, :infinity}]}, :undefined}]

# `summary_metric`

Creates summary metric with `labels`, `count`, and `sum`.

    iex(3)> Prometheus.Model.summary_metric([{:method, :get}], 2, 10.5)
    {:Metric, [{:LabelPair, "method", "get"}], :undefined, :undefined,
      {:Summary, 2, 10.5, []}, :undefined, :undefined, :undefined}

# `summary_metrics`

Creates summary metrics from `mdata` {labels, count, sum} tuple list.

    iex(7)> Prometheus.Model.summary_metrics([{[{:method, :get}], 2, 10.5}])
    [{:Metric, [{:LabelPair, "method", "get"}], :undefined, :undefined,
      {:Summary, 2, 10.5, []}, :undefined, :undefined, :undefined}]

# `untyped_metric`

Creates untyped metric with `labels` and `value`.

    iex(13)> Prometheus.Model.untyped_metric([host: "example.com"], 100)
    {:Metric, [{:LabelPair, "host", "example.com"}], :undefined,
     :undefined, :undefined, {:Untyped, 100}, :undefined, :undefined}

# `untyped_metrics`

Creates untyped metrics from `mdata` {label, value} tuple list.

    iex(11)> Prometheus.Model.untyped_metrics([{[host: "example.com"], 100}])
    [{:Metric, [{:LabelPair, "host", "example.com"}], :undefined,
    :undefined, :undefined, {:Untyped, 100}, :undefined, :undefined}]

---

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