Packages
prometheus
4.12.0
6.1.3
6.1.2
6.1.1
6.1.0
6.0.3
6.0.2
6.0.1
6.0.0
5.1.1
5.1.0
5.0.0
4.13.0
retired
4.12.0
4.11.0
4.10.0
4.9.1
4.9.0
4.8.2
4.8.1
4.8.0
4.6.0
4.5.0
4.4.1
4.4.0
4.3.0
4.2.2
4.2.0
4.1.0
4.0.1
4.0.0
3.5.1
3.5.0
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.2
3.3.1
3.3.0
3.2.3
3.2.2
3.2.1
3.1.1
3.1.0
3.0.1
3.0.0
3.0.0-rc1
3.0.0-alpha9
3.0.0-alpha8
3.0.0-alpha7
3.0.0-alpha6
3.0.0-alpha5
3.0.0-alpha4
3.0.0-alpha3
3.0.0-alpha2
3.0.0-alpha10
3.0.0-alpha1
2.2.0
2.1.0
2.0.0
1.7.0
1.6.0
1.5.0
1.0.2
1.0.1
1.0.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Prometheus.io client in Erlang
Current section
Files
Jump to
Current section
Files
src/prometheus_misc.erl
%% behaviour_modules original Copyright message
%% all other code is under MIT
%%
%% This Source Code Form is subject to the terms of the Mozilla Public
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates. All rights reserved.
-module(prometheus_misc).
-compile({parse_transform, prometheus_pt}).
-moduledoc false.
-export([behaviour_modules/1]).
-spec behaviour_modules(Behaviour :: atom()) -> [atom()] | [].
behaviour_modules(Behaviour) ->
[
Module
|| {Module, Behaviours} <-
all_module_attributes(behaviour),
lists:member(Behaviour, Behaviours)
].
all_module_attributes(Name) ->
Targets =
lists:usort(
lists:append(
[
[{App, Module} || Module <- Modules]
|| {App, _, _} <- application:loaded_applications(),
{ok, Modules} <- [application:get_key(App, modules)]
]
)
),
lists:foldl(
fun({_App, Module}, Acc) ->
case
lists:append([
Atts
|| {N, Atts} <- module_attributes(Module),
N =:= Name
])
of
[] -> Acc;
Atts -> [{Module, Atts} | Acc]
end
end,
[],
Targets
).
module_attributes(Module) ->
try
Module:module_info(attributes)
catch
error:undef -> []
end.