Current section

Files

Jump to
prometheus src model prometheus_model_helpers.erl
Raw

src/model/prometheus_model_helpers.erl

-module(prometheus_model_helpers).
-export([create_mf/5,
label_pairs/1,
gauge_metrics/1,
gauge_metric/1,
gauge_metric/2,
counter_metric/1,
counter_metric/2,
summary_metric/3,
histogram_metric/4]).
-include("prometheus_model.hrl").
create_mf(Name, Help, Type, Collector, CollectorData) ->
#'MetricFamily'{name = ensure_binary(Name),
help = ensure_binary(Help),
type = ensure_mf_type(Type),
metric = ensure_list(Collector:collect_metrics(Name, CollectorData))}.
gauge_metrics(Metrics) ->
lists:map(fun(Spec) ->
case Spec of
{Labels, Value} ->
gauge_metric(Labels, Value);
{Value} ->
gauge_metric(Value);
Value ->
gauge_metric(Value)
end
end,
Metrics).
gauge_metric(Value) ->
gauge_metric([], Value).
gauge_metric(Labels, Value) ->
#'Metric'{label = label_pairs(Labels),
gauge = #'Gauge'{value=Value}}.
counter_metric(Value) ->
counter_metric([], Value).
counter_metric(Labels, Value) ->
#'Metric'{label = label_pairs(Labels),
counter = #'Counter'{value=Value}}.
summary_metric(Labels, Count, Sum) ->
#'Metric'{label = label_pairs(Labels),
summary = #'Summary'{sample_count=Count,
sample_sum=Sum}}.
histogram_metric(Labels, Buckets, Count, Sum) ->
#'Metric'{label = label_pairs(Labels),
histogram = #'Histogram'{sample_count=Count,
sample_sum=Sum,
bucket=histogram_buckets(Buckets)}}.
label_pairs([]) ->
[];
label_pairs(Labels) ->
lists:map(fun({Name, Value}) ->
#'LabelPair'{name = ensure_binary(Name),
value = ensure_binary(Value)}
end,
Labels).
histogram_buckets(Buckets) ->
lists:map(fun({Bound, Count}) ->
#'Bucket'{upper_bound = Bound,
cumulative_count = Count}
end,
Buckets).
ensure_list(Val) when is_list(Val) ->
Val;
ensure_list(Val) ->
[Val].
ensure_binary(Val) when is_atom(Val) ->
atom_to_binary(Val, utf8);
ensure_binary(Val) when is_list(Val) ->
list_to_binary(Val);
ensure_binary(Val) when is_binary(Val) ->
Val;
ensure_binary(Val) ->
list_to_binary(io_lib:format("~p", [Val])).
ensure_mf_type(gauge) ->
'GAUGE';
ensure_mf_type(counter) ->
'COUNTER';
ensure_mf_type(summary) ->
'SUMMARY';
ensure_mf_type(histogram) ->
'HISTOGRAM';
ensure_mf_type(untyped) ->
'UNTYPED';
ensure_mf_type(Type) ->
Type.