From caf75ed8160362773766c6bde005cf5f33544392 Mon Sep 17 00:00:00 2001 From: Siraaj Khandkar Date: Tue, 11 Aug 2015 01:05:20 -0400 Subject: [PATCH 1/1] WIP --- .gitignore | 2 + Makefile | 52 +++++++++ README.md | 15 +++ beam_stats.csv | 36 ++++++ include/beam_stats.hrl | 11 ++ rebar | Bin 0 -> 152939 bytes rebar.config | 4 + rebar_test_build.config | 4 + src/beam_stats.app.src | 31 ++++++ src/beam_stats.erl | 25 +++++ src/beam_stats.hrl | 3 + src/beam_stats_app.erl | 16 +++ src/beam_stats_config.erl | 32 ++++++ src/beam_stats_consumer.erl | 143 ++++++++++++++++++++++++ src/beam_stats_consumer_csv.erl | 155 ++++++++++++++++++++++++++ src/beam_stats_consumer_graphite.erl | 157 +++++++++++++++++++++++++++ src/beam_stats_producer.erl | 109 +++++++++++++++++++ src/beam_stats_sup.erl | 32 ++++++ src/beam_stats_sup_consumers.erl | 41 +++++++ 19 files changed, 868 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 beam_stats.csv create mode 100644 include/beam_stats.hrl create mode 100755 rebar create mode 100644 rebar.config create mode 100644 rebar_test_build.config create mode 100644 src/beam_stats.app.src create mode 100644 src/beam_stats.erl create mode 100644 src/beam_stats.hrl create mode 100644 src/beam_stats_app.erl create mode 100644 src/beam_stats_config.erl create mode 100644 src/beam_stats_consumer.erl create mode 100644 src/beam_stats_consumer_csv.erl create mode 100644 src/beam_stats_consumer_graphite.erl create mode 100644 src/beam_stats_producer.erl create mode 100644 src/beam_stats_sup.erl create mode 100644 src/beam_stats_sup_consumers.erl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1204ed7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +deps/ +ebin/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..338f685 --- /dev/null +++ b/Makefile @@ -0,0 +1,52 @@ +REBAR := ./rebar --config rebar_test_build.config + +.PHONY: \ + all \ + clean_all \ + clean_app \ + compile_all \ + compile_app \ + deps \ + deps_get \ + deps_update \ + dialyze \ + dialyzer_blt_build + +all: \ + clean_all \ + deps_get \ + compile_all + +deps_get: + @$(REBAR) get-deps + +deps_update: + @$(REBAR) update-deps + +deps: \ + deps_get \ + deps_update + +compile_all: + $(REBAR) compile skip_deps=false + +compile_app: + $(REBAR) compile skip_deps=true + +clean_all: + $(REBAR) clean skip_deps=false + +clean_app: + $(REBAR) clean skip_deps=true + +dialyze: + @dialyzer deps/*/ebin ebin + +dialyzer_blt_build: + @dialyzer \ + --build_plt \ + --apps $(shell ls $(shell \ + erl -eval 'io:format(code:lib_dir()), init:stop().' -noshell) \ + | grep -v interface \ + | sed -e 's/-[0-9.]*//' \ + ) diff --git a/README.md b/README.md new file mode 100644 index 0000000..12e2e3c --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +beam_stats +========== + +Periodically collects and pushes VM metrics to arbitrary consumers (Graphite +and CSV by default). + +Essentially like `folsomite`, but better. Better in the following ways: + +- More-general: consumers other than graphite can be defined +- More-focused: only concerned with VM metrics, while `folsomite` ships off + _everything_ from `folsom` (in addition to VM metrics) +- Easier-to-reason-about implementation: well-defined metrics-to-binary + conversions, as opposed to the nearly-arbitrary term-to-string conversions + used in `folsomite` +- Spec'd, tested and Dialyzed diff --git a/beam_stats.csv b/beam_stats.csv new file mode 100644 index 0000000..37d2b5d --- /dev/null +++ b/beam_stats.csv @@ -0,0 +1,36 @@ +1439265086|nonode@nohost|total|19511216 +1439265086|nonode@nohost|processes|5198144 +1439265086|nonode@nohost|processes_used|5198144 +1439265086|nonode@nohost|system|14313072 +1439265086|nonode@nohost|atom|202481 +1439265086|nonode@nohost|atom_used|189359 +1439265086|nonode@nohost|binary|431680 +1439265086|nonode@nohost|code|4447323 +1439265086|nonode@nohost|ets|310096 +1439265146|nonode@nohost|total|19636224 +1439265146|nonode@nohost|processes|5256696 +1439265146|nonode@nohost|processes_used|5256696 +1439265146|nonode@nohost|system|14379528 +1439265146|nonode@nohost|atom|202481 +1439265146|nonode@nohost|atom_used|190107 +1439265146|nonode@nohost|binary|445632 +1439265146|nonode@nohost|code|4495278 +1439265146|nonode@nohost|ets|311248 +2015-08-11 00:17:32.260189|nonode@nohost|total|18823432 +2015-08-11 00:17:32.260189|nonode@nohost|processes|4517464 +2015-08-11 00:17:32.260189|nonode@nohost|processes_used|4517464 +2015-08-11 00:17:32.260189|nonode@nohost|system|14305968 +2015-08-11 00:17:32.260189|nonode@nohost|atom|202481 +2015-08-11 00:17:32.260189|nonode@nohost|atom_used|189163 +2015-08-11 00:17:32.260189|nonode@nohost|binary|435592 +2015-08-11 00:17:32.260189|nonode@nohost|code|4439027 +2015-08-11 00:17:32.260189|nonode@nohost|ets|308784 +2015-08-11 00:18:32.261018|nonode@nohost|total|19010544 +2015-08-11 00:18:32.261018|nonode@nohost|processes|4537640 +2015-08-11 00:18:32.261018|nonode@nohost|processes_used|4537640 +2015-08-11 00:18:32.261018|nonode@nohost|system|14472904 +2015-08-11 00:18:32.261018|nonode@nohost|atom|202481 +2015-08-11 00:18:32.261018|nonode@nohost|atom_used|190558 +2015-08-11 00:18:32.261018|nonode@nohost|binary|499792 +2015-08-11 00:18:32.261018|nonode@nohost|code|4530778 +2015-08-11 00:18:32.261018|nonode@nohost|ets|312400 diff --git a/include/beam_stats.hrl b/include/beam_stats.hrl new file mode 100644 index 0000000..6b4df10 --- /dev/null +++ b/include/beam_stats.hrl @@ -0,0 +1,11 @@ +-record(beam_stats, + { timestamp :: erlang:timestamp() + , node_id :: atom() + , memory :: [{erlang:memory_type(), non_neg_integer()}] + %, statistics :: [{atom() , term()}] + %, system :: [{atom() , term()}] + %, process :: [{atom() , term()}] + %, port :: [{atom() , term()}] + %, ets :: [{atom() , term()}] + %, dets :: [{atom() , term()}] + }). diff --git a/rebar b/rebar new file mode 100755 index 0000000000000000000000000000000000000000..49711dcb26aa08c65a052a00b53456152134086b GIT binary patch literal 152939 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 + t(). +collect() -> + ?T + { timestamp = os:timestamp() + , node_id = erlang:node() + , memory = erlang:memory() + }. diff --git a/src/beam_stats.hrl b/src/beam_stats.hrl new file mode 100644 index 0000000..c7df52a --- /dev/null +++ b/src/beam_stats.hrl @@ -0,0 +1,3 @@ +-define(METHOD_SHOULD_NOT_BE_USED(Method, State), + {stop, {method_should_not_be_used, {?MODULE, Method}}, State} +). diff --git a/src/beam_stats_app.erl b/src/beam_stats_app.erl new file mode 100644 index 0000000..c72415c --- /dev/null +++ b/src/beam_stats_app.erl @@ -0,0 +1,16 @@ +-module(beam_stats_app). + +-behaviour(application). + +%% Application callbacks +-export([start/2, stop/1]). + +%% =================================================================== +%% Application callbacks +%% =================================================================== + +start(_StartType, _StartArgs) -> + beam_stats_sup:start_link(). + +stop(_State) -> + ok. diff --git a/src/beam_stats_config.erl b/src/beam_stats_config.erl new file mode 100644 index 0000000..68a44ed --- /dev/null +++ b/src/beam_stats_config.erl @@ -0,0 +1,32 @@ +-module(beam_stats_config). + +-export( + [ production_interval/0 + , consumers/0 + ]). + +-define(APP, beam_stats). + +%% ============================================================================ +%% API +%% ============================================================================ + +-spec production_interval() -> + erlang:time(). +production_interval() -> + get_env(production_interval). + +-spec consumers() -> + [{ConsumerModule :: atom(), ConsumerDefinedOptionsData :: term()}]. +consumers() -> + get_env(consumers). + +%% ============================================================================ +%% Internal +%% ============================================================================ + +-spec get_env(atom()) -> + term(). +get_env(Key) -> + {ok, Value} = application:get_env(?APP, Key), + Value. diff --git a/src/beam_stats_consumer.erl b/src/beam_stats_consumer.erl new file mode 100644 index 0000000..8d25fa4 --- /dev/null +++ b/src/beam_stats_consumer.erl @@ -0,0 +1,143 @@ +-module(beam_stats_consumer). + +-include("include/beam_stats.hrl"). +-include( "beam_stats.hrl"). + +-behaviour(gen_server). + +-export_type( + [ queue/0 + ]). + +%% Public API +-export( + [ add/2 + ]). + +%% Internal API +-export( + [ start_link/2 + ]). + +%% gen_server callbacks +-export( + [ init/1 + , handle_call/3 + , handle_cast/2 + , handle_info/2 + , terminate/2 + , code_change/3 + ]). + +-type queue() :: + queue:queue(beam_stats:t()). + +%% ============================================================================ +%% Consumer interface +%% ============================================================================ + +-callback init(Options :: term()) -> + {ConsumptionInterval :: erlang:time(), State :: term()}. + +-callback consume(queue(), State) -> + State. + +-callback terminate(State :: term()) -> + {}. + +%% ============================================================================ +%% Internal data +%% ============================================================================ + +-define(SIGNAL_CONSUMPTION , beam_stats_consumption_signal). + +-record(state, + { consumer_module :: atom() + , consumer_state :: term() + , consumption_interval :: erlang:time() + , beam_stats_queue :: queue() + }). + +%% ============================================================================ +%% Public API +%% ============================================================================ + +-spec add(atom(), term()) -> + supervisor:startchild_ret(). +add(ConsumerModule, ConsumerOptions) -> + beam_stats_sup_consumers:start_child(ConsumerModule, ConsumerOptions). + +%% ============================================================================ +%% Internal API +%% ============================================================================ + +start_link(ConsumerModule, ConsumerOptions) -> + GenServerModule = ?MODULE, + GenServerOpts = [], + InitArgs = [ConsumerModule, ConsumerOptions], + gen_server:start_link(GenServerModule, InitArgs, GenServerOpts). + +%% ============================================================================ +%% gen_server callbacks (unused) +%% ============================================================================ + +handle_call(_Request, _From, State) -> + ?METHOD_SHOULD_NOT_BE_USED(handle_call, State). + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%% ============================================================================ +%% gen_server callbacks +%% ============================================================================ + +init([ConsumerModule, ConsumerOptions]) -> + {ConsumptionInterval, ConsumerState} = ConsumerModule:init(ConsumerOptions), + State = #state + { consumer_module = ConsumerModule + , consumer_state = ConsumerState + , consumption_interval = ConsumptionInterval + , beam_stats_queue = queue:new() + }, + ok = beam_stats_producer:subscribe(self()), + ok = schedule_first_consumption(), + {ok, State}. + +terminate(_Reason, _State) -> + ok = beam_stats_producer:unsubscribe(self()). + +handle_cast(#beam_stats{}=BEAMStats, #state{beam_stats_queue=Q1}=State) -> + Q2 = queue:in(BEAMStats, Q1), + {noreply, State#state{beam_stats_queue = Q2}}. + +handle_info( + ?SIGNAL_CONSUMPTION, + #state + { consumer_module = ConsumerModule + , consumer_state = ConsumerState + , consumption_interval = ConsumptionInterval + , beam_stats_queue = Q + }=State1 +) -> + State2 = State1#state + { consumer_state = ConsumerModule:consume(Q, ConsumerState) + , beam_stats_queue = queue:new() + }, + ok = schedule_next_consumption(ConsumptionInterval), + {noreply, State2}. + +%% ============================================================================ +%% Internal +%% ============================================================================ + +-spec schedule_first_consumption() -> + ok. +schedule_first_consumption() -> + _ = self() ! ?SIGNAL_CONSUMPTION, + ok. + +-spec schedule_next_consumption(erlang:time()) -> + ok. +schedule_next_consumption(Time) -> + _ = erlang:send_after(Time, self(), ?SIGNAL_CONSUMPTION), + ok. diff --git a/src/beam_stats_consumer_csv.erl b/src/beam_stats_consumer_csv.erl new file mode 100644 index 0000000..c00c28f --- /dev/null +++ b/src/beam_stats_consumer_csv.erl @@ -0,0 +1,155 @@ +-module(beam_stats_consumer_csv). + +-include("include/beam_stats.hrl"). + +-behaviour(beam_stats_consumer). + +-export_type( + [ option/0 + ]). + +-export( + [ init/1 + , consume/2 + , terminate/1 + ]). + +-type option() :: + {path , file:filename()} + | {consumption_interval , erlang:time()} + . + +-record(state, + { path :: file:filename() + , file = none :: hope_option:t(file:io_device()) + }). + +-type state() :: + #state{}. + +-spec init([option()]) -> + {erlang:time(), state()}. +init(Options) -> + ConsumptionInterval = hope_kv_list:get(Options, consumption_interval, 60000), + {some, Path} = hope_kv_list:get(Options, path), + State = #state + { path = Path + , file = none + }, + {ConsumptionInterval, State}. + +-spec consume(beam_stats_consumer:queue(), state()) -> + state(). +consume(Q, #state{}=State1) -> + Payload = beam_stats_queue_to_binary(Q), + State2 = try_to_open_if_no_file(State1), + try_to_write(State2, Payload). + +-spec terminate(state()) -> + {}. +terminate(#state{file=FileOpt}) -> + ok = hope_option:iter(FileOpt, fun file:close/1), + {}. + +%% ============================================================================ + +-spec try_to_write(state(), binary()) -> + state(). +try_to_write(#state{file=none, path=Path}=State, _) -> + io:format("error: file closed: ~s~n", [Path]), + State; +try_to_write(#state{file={some, File}}=State, Payload) -> + case file:write(File, Payload) + of ok -> + State + ; {error, _}=Error -> + io:format("error: file:write/2 failed: ~p~n", [Error]), + % TODO: Maybe schedule retry? + ok = file:close(File), + State#state{file=none} + end. + +-spec try_to_open_if_no_file(state()) -> + state(). +try_to_open_if_no_file(#state{file={some, _}}=State) -> + State; +try_to_open_if_no_file(#state{file=none, path=Path}=State) -> + case file:open(Path, [append]) + of {ok, File} -> + State#state{file = {some, File}} + ; {error, _}=Error -> + io:format("error: file:open/2 failed: ~p~n", [Error]), + State#state{file = none} + end. + +-spec beam_stats_queue_to_binary(beam_stats_consumer:queue()) -> + binary(). +beam_stats_queue_to_binary(BEAMStatsQ) -> + Bins = [beam_stats_to_bin(B) || B <- queue:to_list(BEAMStatsQ)], + iolist_to_binary(Bins). + + +-spec beam_stats_to_bin(beam_stats:t()) -> + binary(). +beam_stats_to_bin(#beam_stats + { timestamp = Timestamp + , node_id = NodeID + , memory = Memory + } +) -> + <> = timestamp_to_bin(Timestamp), + <> = node_id_to_bin(NodeID), + PairToBin = make_pair_to_bin(NodeIDBin, TimestampBin), + MemoryBinPairs = lists:map(fun atom_int_to_bin_bin/1, Memory), + MemoryBins = lists:map(PairToBin, MemoryBinPairs), + AllBins = + [ MemoryBins + ], + iolist_to_binary(AllBins). + +-spec timestamp_to_bin(erlang:timestamp()) -> + binary(). +timestamp_to_bin(Timestamp) -> + TimestampFloat = timestamp_to_float(Timestamp), + {{Year, Month, Day}, {Hour, Min, Sec}} = calendar:now_to_local_time(Timestamp), + SecondsFloat = Sec + (TimestampFloat - trunc(TimestampFloat)), + Fmt2Digits = "~2.10.0b", + FmtDate = string:join(["~b" , Fmt2Digits, Fmt2Digits], "-"), + FmtTime = string:join([Fmt2Digits, Fmt2Digits, "~9..0f" ], ":"), + Separator = " ", + Fmt = FmtDate ++ Separator ++ FmtTime, + IOList = io_lib:format(Fmt, [Year, Month, Day, Hour, Min, SecondsFloat]), + iolist_to_binary(IOList). + +-spec timestamp_to_float(erlang:timestamp()) -> + float(). +timestamp_to_float({ComponentMega, ComponentWhole, ComponentMicro}) -> + OneMillion = 1000000, + TotalWholeSeconds = ComponentMega * OneMillion + ComponentWhole, + TotalMicroSeconds = (TotalWholeSeconds * OneMillion) + ComponentMicro, + TotalMicroSeconds / OneMillion. + +-spec make_pair_to_bin(binary(), binary()) -> + fun(({binary(), binary()}) -> binary()). +make_pair_to_bin(<>, <>) -> + fun ({<>, <>}) -> + << TimestampBin/binary + , "|" + , NodeID/binary + , "|" + , K/binary + , "|" + , V/binary + , "\n" + >> + end. + +-spec node_id_to_bin(node()) -> + binary(). +node_id_to_bin(NodeID) -> + atom_to_binary(NodeID, utf8). + +-spec atom_int_to_bin_bin({atom(), integer()}) -> + {binary(), binary()}. +atom_int_to_bin_bin({K, V}) -> + {atom_to_binary(K, latin1), integer_to_binary(V)}. diff --git a/src/beam_stats_consumer_graphite.erl b/src/beam_stats_consumer_graphite.erl new file mode 100644 index 0000000..c60c6e8 --- /dev/null +++ b/src/beam_stats_consumer_graphite.erl @@ -0,0 +1,157 @@ +-module(beam_stats_consumer_graphite). + +-include("include/beam_stats.hrl"). + +-behaviour(beam_stats_consumer). + +-export_type( + [ option/0 + , connect_option/0 + ]). + +-export( + [ init/1 + , consume/2 + , terminate/1 + ]). + +-type connect_option() :: + {host , inet:ip_address() | inet:hostname()} + | {port , inet:port_number()} + | {timeout , timeout()} + . + +-type option() :: + {connect_options , [connect_option()]} + | {consumption_interval , erlang:time()} + . + +-record(state, + { connect_options = [] :: [connect_option()] + , sock = none :: hope_option:t(gen_tcp:socket()) + }). + +-type state() :: + #state{}. + +-define(GRAPHITE_PATH_PREFIX, "beam_stats"). + +-spec init([option()]) -> + {erlang:time(), state()}. +init(Options) -> + ConnectOptions = hope_kv_list:get(Options, connect_options , []), + ConsumptionInterval = hope_kv_list:get(Options, consumption_interval, 60000), + State = #state + { connect_options = ConnectOptions + , sock = none + }, + {ConsumptionInterval, State}. + +-spec consume(beam_stats_consumer:queue(), state()) -> + state(). +consume(Q, #state{}=State1) -> + Payload = beam_stats_queue_to_binary(Q), + State2 = try_to_connect_if_no_socket(State1), + try_to_send(State2, Payload). + +-spec terminate(state()) -> + {}. +terminate(#state{sock=SockOpt}) -> + ok = hope_option:iter(SockOpt, fun gen_tcp:close/1), + {}. + +%% ============================================================================ + +-spec try_to_send(state(), binary()) -> + state(). +try_to_send(#state{sock=none}=State, _) -> + io:format("error: socket closed~n"), + % TODO: Maybe schedule retry? + State; +try_to_send(#state{sock={some, Sock}}=State, Payload) -> + case gen_tcp:send(Sock, Payload) + of ok -> + State + ; {error, _}=Error -> + io:format("error: gen_tcp:send/2 failed: ~p~n", [Error]), + % TODO: Maybe schedule retry? + ok = gen_tcp:close(Sock), + State#state{sock=none} + end. + +-spec try_to_connect_if_no_socket(state()) -> + state(). +try_to_connect_if_no_socket(#state{sock={some, _}}=State) -> + State; +try_to_connect_if_no_socket(#state{sock=none, connect_options=Options}=State) -> + DefaultHost = "localhost", + DefaultPort = 2003, + DefaultTimeout = 5000, + Host = hope_kv_list:get(Options, host , DefaultHost), + Port = hope_kv_list:get(Options, port , DefaultPort), + Timeout = hope_kv_list:get(Options, timeout, DefaultTimeout), + case gen_tcp:connect(Host, Port, [binary, {active, false}], Timeout) + of {ok, Sock} -> + State#state{sock = {some, Sock}} + ; {error, _}=Error -> + io:format("error: gen_tcp:connect/4 failed: ~p~n", [Error]), + State#state{sock = none} + end. + +-spec beam_stats_queue_to_binary(beam_stats_consumer:queue()) -> + binary(). +beam_stats_queue_to_binary(Q) -> + Bins = [beam_stats_to_bin(B) || B <- queue:to_list(Q)], + iolist_to_binary(Bins). + +-spec beam_stats_to_bin(beam_stats:t()) -> + binary(). +beam_stats_to_bin(#beam_stats + { timestamp = Timestamp + , node_id = NodeID + , memory = Memory + } +) -> + TimestampInt = timestamp_to_integer(Timestamp), + TimestampBin = integer_to_binary(TimestampInt), + <> = node_id_to_bin(NodeID), + PairToBin = make_pair_to_bin(NodeIDBin, TimestampBin), + MemoryBinPairs = lists:map(fun atom_int_to_bin_bin/1, Memory), + MemoryBins = lists:map(PairToBin, MemoryBinPairs), + AllBins = + [ MemoryBins + ], + iolist_to_binary(AllBins). + +-spec timestamp_to_integer(erlang:timestamp()) -> + non_neg_integer(). +timestamp_to_integer({Megaseconds, Seconds, _}) -> + Megaseconds * 1000000 + Seconds. + +-spec make_pair_to_bin(binary(), binary()) -> + fun(({binary(), binary()}) -> binary()). +make_pair_to_bin(<>, <>) -> + fun ({<>, <>}) -> + << ?GRAPHITE_PATH_PREFIX + , "." + , NodeID/binary + , "." + , K/binary + , " " + , V/binary + , " " + , TimestampBin/binary + , "\n" + >> + end. + +-spec node_id_to_bin(node()) -> + binary(). +node_id_to_bin(NodeID) -> + NodeIDBin = atom_to_binary(NodeID, utf8), + re:replace(NodeIDBin, "[\@\.]", "_", [global, {return, binary}]). + +-spec atom_int_to_bin_bin({atom(), integer()}) -> + {binary(), binary()}. +atom_int_to_bin_bin({K, V}) -> + {atom_to_binary(K, latin1), integer_to_binary(V)}. diff --git a/src/beam_stats_producer.erl b/src/beam_stats_producer.erl new file mode 100644 index 0000000..5c47951 --- /dev/null +++ b/src/beam_stats_producer.erl @@ -0,0 +1,109 @@ +-module(beam_stats_producer). + +-include("beam_stats.hrl"). + +-behaviour(gen_server). + +%% API +-export( + [ start_link/0 + , subscribe/1 + , unsubscribe/1 + ]). + +%% gen_server callbacks +-export( + [ init/1 + , handle_call/3 + , handle_cast/2 + , handle_info/2 + , terminate/2 + , code_change/3 + ]). + +%% ============================================================================ +%% Internal data +%% ============================================================================ + +-define(SIGNAL_PRODUCTION , beam_stats_production_signal). + +-record(state, + { consumers = ordsets:new() :: ordsets:ordset(pid()) + }). + +%% ============================================================================ +%% API +%% ============================================================================ + +start_link() -> + gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). + +-spec subscribe(pid()) -> + ok. +subscribe(PID) -> + gen_server:cast(?MODULE, {subscribe, PID}). + +-spec unsubscribe(pid()) -> + ok. +unsubscribe(PID) -> + gen_server:cast(?MODULE, {unsubscribe, PID}). + +%% ============================================================================ +%% gen_server callbacks (unused) +%% ============================================================================ + +handle_call(_Request, _From, State) -> + ?METHOD_SHOULD_NOT_BE_USED(handle_call, State). + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +terminate(_Reason, _State) -> + ok. + +%% ============================================================================ +%% gen_server callbacks +%% ============================================================================ + +init([]) -> + ok = schedule_first_production(), + Consumers = ordsets:new(), + {ok, #state{consumers=Consumers}}. + +handle_cast({subscribe, PID}, #state{consumers=Consumers1}=State) -> + Consumers2 = ordsets:add_element(PID, Consumers1), + {noreply, State#state{consumers=Consumers2}}; + +handle_cast({unsubscribe, PID}, #state{consumers=Consumers1}=State) -> + Consumers2 = ordsets:del_element(PID, Consumers1), + {noreply, State#state{consumers=Consumers2}}. + +handle_info(?SIGNAL_PRODUCTION, #state{consumers=ConsumersSet}=State) -> + ConsumersList = ordsets:to_list(ConsumersSet), + ok = collect_and_push_to_consumers(ConsumersList), + ok = schedule_next_production(), + {noreply, State}. + +%% ============================================================================ +%% Private +%% ============================================================================ + +-spec schedule_first_production() -> + ok. +schedule_first_production() -> + _ = self() ! ?SIGNAL_PRODUCTION, + ok. + +-spec schedule_next_production() -> + ok. +schedule_next_production() -> + ProductionInterval = beam_stats_config:production_interval(), + _ = erlang:send_after(ProductionInterval, self(), ?SIGNAL_PRODUCTION), + ok. + +-spec collect_and_push_to_consumers([pid()]) -> + ok. +collect_and_push_to_consumers(Consumers) -> + BEAMStats = beam_stats:collect(), + Push = fun (Consumer) -> gen_server:cast(Consumer, BEAMStats) end, + lists:foreach(Push, Consumers). diff --git a/src/beam_stats_sup.erl b/src/beam_stats_sup.erl new file mode 100644 index 0000000..7cfec55 --- /dev/null +++ b/src/beam_stats_sup.erl @@ -0,0 +1,32 @@ +-module(beam_stats_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). + +%% Supervisor callbacks +-export([init/1]). + +%% Helper macro for declaring children of supervisor +-define(CHILD(Type, Module), + {Module, {Module, start_link, []}, permanent, 5000, Type, [Module]}). + +%% =================================================================== +%% API functions +%% =================================================================== + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +%% =================================================================== +%% Supervisor callbacks +%% =================================================================== + +init([]) -> + Children = + [ ?CHILD(worker , beam_stats_producer) + , ?CHILD(supervisor , beam_stats_sup_consumers) + ], + SupFlags = {one_for_one, 5, 10}, + {ok, {SupFlags, Children}}. diff --git a/src/beam_stats_sup_consumers.erl b/src/beam_stats_sup_consumers.erl new file mode 100644 index 0000000..727cf3d --- /dev/null +++ b/src/beam_stats_sup_consumers.erl @@ -0,0 +1,41 @@ +-module(beam_stats_sup_consumers). + +-behaviour(supervisor). + +%% API +-export( + [ start_link/0 + , start_child/2 + ]). + +%% Supervisor callbacks +-export([init/1]). + +%% Helper macro for declaring children of supervisor +-define(CHILD(Type, Module, Args), + {make_ref(), {Module, start_link, Args}, permanent, 5000, Type, [Module]}). + +%% =================================================================== +%% API +%% =================================================================== + +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +start_child(Module, Options) -> + Child = ?CHILD(worker, beam_stats_consumer, [Module, Options]), + supervisor:start_child(?MODULE, Child). + +%% =================================================================== +%% Supervisor callbacks +%% =================================================================== + +init([]) -> + Consumers = beam_stats_config:consumers(), + ConsumerSpecToChild = + fun ({Module, Options}) -> + ?CHILD(worker, beam_stats_consumer, [Module, Options]) + end, + Children = lists:map(ConsumerSpecToChild, Consumers), + SupFlags = {one_for_one, 5, 10}, + {ok, {SupFlags, Children}}. -- 2.20.1