| 1 | -module(beam_stats_sup_consumers). |
| 2 | |
| 3 | -behaviour(supervisor). |
| 4 | |
| 5 | %% API |
| 6 | -export( |
| 7 | [ start_link/0 |
| 8 | , start_child/2 |
| 9 | ]). |
| 10 | |
| 11 | %% Supervisor callbacks |
| 12 | -export([init/1]). |
| 13 | |
| 14 | %% Helper macro for declaring children of supervisor |
| 15 | -define(CHILD(Type, Module, Args), |
| 16 | {make_ref(), {Module, start_link, Args}, permanent, 5000, Type, [Module]}). |
| 17 | |
| 18 | %% =================================================================== |
| 19 | %% API |
| 20 | %% =================================================================== |
| 21 | |
| 22 | start_link() -> |
| 23 | supervisor:start_link({local, ?MODULE}, ?MODULE, []). |
| 24 | |
| 25 | start_child(Module, Options) -> |
| 26 | Child = ?CHILD(worker, beam_stats_consumer, [Module, Options]), |
| 27 | supervisor:start_child(?MODULE, Child). |
| 28 | |
| 29 | %% =================================================================== |
| 30 | %% Supervisor callbacks |
| 31 | %% =================================================================== |
| 32 | |
| 33 | init([]) -> |
| 34 | Consumers = beam_stats_config:consumers(), |
| 35 | ConsumerSpecToChild = |
| 36 | fun ({Module, Options}) -> |
| 37 | ?CHILD(worker, beam_stats_consumer, [Module, Options]) |
| 38 | end, |
| 39 | Children = lists:map(ConsumerSpecToChild, Consumers), |
| 40 | SupFlags = {one_for_one, 5, 10}, |
| 41 | {ok, {SupFlags, Children}}. |