Current section
Files
Jump to
Current section
Files
lib/prometheus/error.ex
defmodule Prometheus.Error do
defmodule InvalidValue do
defexception [:value, :message]
end
defmodule InvalidMetricName do
defexception [:name, :message]
end
defmodule InvalidMetricHelp do
defexception [:help, :message]
end
defmodule InvalidMetricArity do
defexception [:arity]
def message(%{arity: arity}) do
"invalid metric arity: #{arity}"
end
end
defmodule UnknownMetric do
defexception [:registry, :name]
def message(%{registry: registry, name: name}) do
"unknown metric {registry: #{registry}, name: #{name}}"
end
end
defmodule InvalidMetricLabels do
defexception [:labels, :message]
end
defmodule InvalidLabelName do
defexception [:name, :message]
end
defmodule MFAlreadyExists do
defexception [:registry, :name, :message]
end
defmodule HistogramNoBuckets do
defexception [:buckets, :message]
end
defmodule HistogramInvalidBuckets do
defexception [:buckets, :message]
end
defmodule HistogramInvalidBound do
defexception [:bound, :message]
end
defmodule MissingMetricSpecKey do
defexception [:key, :spec, :message]
end
def normalize(erlang_error) do
case erlang_error do
%ErlangError{original: original} ->
case original do
{:invalid_value, value, message} ->
%InvalidValue{value: value, message: message}
{:invalid_metric_name, name, message} ->
%InvalidMetricName{name: name, message: message}
{:invalid_metric_help, help, message} ->
%InvalidMetricHelp{help: help, message: message}
{:invalid_metric_arity, arity} ->
%InvalidMetricArity{arity: arity}
{:unknown_metric, registry, name} ->
%UnknownMetric{registry: registry, name: name}
{:invalid_metric_labels, labels, message} ->
%InvalidMetricLabels{labels: labels, message: message}
{:invalid_metric_label_name, name, message} ->
%InvalidLabelName{name: name, message: message}
{:mf_already_exists, {registry, name}, message} ->
%MFAlreadyExists{registry: registry, name: name, message: message}
{:histogram_no_buckets, buckets} ->
%HistogramNoBuckets{buckets: buckets}
{:histogram_invalid_buckets, buckets} ->
%HistogramInvalidBuckets{buckets: buckets, message: "buckets are invalid"}
{:histogram_invalid_buckets, buckets, message} ->
%HistogramInvalidBuckets{buckets: buckets, message: message}
{:histogram_invalid_bound, bound} ->
%HistogramInvalidBound{bound: bound, message: "bound is invalid"}
{:missing_metric_spec_key, key, spec} ->
%MissingMetricSpecKey{key: key, spec: spec}
_ ->
erlang_error
end
_ ->
erlang_error
end
end
defmacro with_prometheus_error(block) do
quote do
try do
unquote(block)
rescue
e in ErlangError -> reraise Prometheus.Error.normalize(e), System.stacktrace
end
end
end
end