Current section

Files

Jump to
prometheus src prometheus_collector.erl
Raw

src/prometheus_collector.erl

%% @doc
%% A collector for a set of metrics.
%%
%% Normal users should use {@link prometheus_gauge},
%% {@link prometheus_counter}, {@link prometheus_summary}
%% and {@link prometheus_histogram}.
%%
%% Implementing `:prometheus_collector' behaviour is for advanced uses,
%% such as proxying metrics from another monitoring system.
%% It is it the responsibility of the implementer to ensure produced metrics
%% are valid.
%%
%% You will be working with Prometheus
%% data model directly (see {@link prometheus_model_helpers}).
%% @end
-module(prometheus_collector).
-export([enabled_collectors/0,
register/1,
register/2,
deregister/1,
deregister/2,
collect_mf/3]).
-export_type([collector/0,
data/0,
collect_mf_callback/0]).
-compile({no_auto_import, [register/2]}).
-include("prometheus.hrl").
%%====================================================================
%% Types
%%====================================================================
-type collector() :: atom().
-type data() :: any().
-type collect_mf_callback() ::
fun((prometheus_model:'MetricFamily'()) -> any()).
%%====================================================================
%% Callbacks
%%====================================================================
-callback collect_mf(Registry, Callback) -> ok when
Registry :: prometheus_registry:registry(),
Callback :: collect_mf_callback().
-callback collect_metrics(Name, Data) -> Metrics when
Name :: prometheus_metric:name(),
Data :: data(),
Metrics :: prometheus_model:'Metric'() | [prometheus_model:'Metric'()].
-callback deregister_cleanup(Registry) -> ok when
Registry :: prometheus_registry:registry().
%%====================================================================
%% Public API
%%====================================================================
-spec enabled_collectors() -> [collector()].
enabled_collectors() ->
case application:get_env(prometheus, collectors) of
undefined -> all_known_collectors();
{ok, Collectors} -> Collectors
end.
%% @equiv register(Collector, default)
%% @deprecated Please use {@link prometheus_registry:register_collector/1}
register(Collector) -> register(Collector, default).
-spec register(Collector, Registry) -> ok when
Collector :: collector(),
Registry :: prometheus_registry:registry().
%% @deprecated Please use {@link prometheus_registry:register_collector/2}
register(Collector, Registry) ->
?DEPRECATED("prometheus_collector:register/2",
"prometheus_register:register_collector/2"),
ok = prometheus_registry:register_collector(Registry, Collector).
%% @equiv deregister(Collector, default)
%% @deprecated Please use {@link prometheus_registry:deregister_collector/1}
deregister(Collector) -> deregister(Collector, default).
-spec deregister(Collector, Registry) -> ok when
Collector :: collector(),
Registry :: prometheus_registry:registry().
%% @deprecated Please use {@link prometheus_registry:deregister_collector/2}
deregister(Collector, Registry) ->
?DEPRECATED("prometheus_collector:deregister/2",
"prometheus_register:deregister_collector/2"),
prometheus_registry:deregister_collector(Registry, Collector).
-spec collect_mf(Registry, Collector, Callback) -> ok when
Registry :: prometheus_registry:registry(),
Collector :: collector(),
Callback :: collect_mf_callback().
collect_mf(Registry, Collector, Callback) ->
ok = Collector:collect_mf(Registry, Callback).
%%====================================================================
%% Private Parts
%%====================================================================
all_known_collectors() ->
prometheus_misc:behaviour_modules(prometheus_collector).