Current section

Files

Jump to
prometheus src prometheus_collector.erl
Raw

src/prometheus_collector.erl

-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]}).
%%====================================================================
%% Types
%%====================================================================
-type collector() :: atom().
-type data() :: any().
-type collect_mf_callback() ::
fun((prometheus_model:'MetricFamily'()) -> any()).
%%====================================================================
%% Callbacks
%%====================================================================
-callback collect_mf(Callback, Registry) -> Metrics | ok when
Callback :: collect_mf_callback(),
Registry :: prometheus_registry:registry(),
Metrics :: [prometheus_model:'Metric'()].
-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, default_collectors) of
undefined -> all_known_collectors();
Collectors -> Collectors
end.
%% @equiv register(Collector, default)
register(Collector) -> register(Collector, default).
-spec register(Collector, Registry) -> ok when
Collector :: collector(),
Registry :: prometheus_registry:registry().
register(Collector, Registry) ->
ok = prometheus_registry:register_collector(Registry, Collector).
%% @equiv deregister(Collector, default)
deregister(Collector) -> deregister(Collector, default).
-spec deregister(Collector, Registry) -> ok when
Collector :: collector(),
Registry :: prometheus_registry:registry().
deregister(Collector, Registry) ->
prometheus_registry:deregister_collector(Registry, Collector).
-spec collect_mf(Collector, Callback, Registry) -> list() when
Collector :: collector(),
Callback :: collect_mf_callback(),
Registry :: prometheus_registry:registry().
collect_mf(Collector, Callback, Registry) ->
Collector:collect_mf(Callback, Registry).
%%====================================================================
%% Private Parts
%%====================================================================
all_known_collectors() ->
prometheus_misc:behaviour_modules(prometheus_collector).