X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=src%2Fbeam_stats_producer.erl;h=eab1759df2a07425446bb07b02b743a1ee55845d;hb=39ff67a62324705869d1ee364e98b17d14e70438;hp=c7ebd5e02987fea54dd8efc5f1cf37982d1e3159;hpb=2086842d3832286088d0ca9646b23e3bfd50553c;p=beam_stats.git diff --git a/src/beam_stats_producer.erl b/src/beam_stats_producer.erl index c7ebd5e..eab1759 100644 --- a/src/beam_stats_producer.erl +++ b/src/beam_stats_producer.erl @@ -4,7 +4,7 @@ %% API -export( - [ start_link/0 + [ start_link/1 , subscribe/1 , unsubscribe/1 @@ -30,8 +30,8 @@ -define(PRODUCE_ASYNC , produce_async). -record(state, - { consumers = ordsets:new() :: ordsets:ordset(pid()) - , stats_state :: beam_stats_state:t() + { consumers = ordsets:new() :: ordsets:ordset(pid()) + , deltas_server :: beam_stats_delta:t() }). -type state() :: @@ -41,8 +41,8 @@ %% API %% ============================================================================ -start_link() -> - gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). +start_link(DeltasServer) -> + gen_server:start_link({local, ?MODULE}, ?MODULE, DeltasServer, []). -spec subscribe(pid()) -> ok. @@ -73,11 +73,10 @@ terminate(_Reason, _State) -> %% gen_server callbacks %% ============================================================================ -init([]) -> +init(DeltasServer) -> ok = schedule_first_production(), Consumers = ordsets:new(), - StatsState = beam_stats_state:new(), - {ok, #state{consumers=Consumers, stats_state=StatsState}}. + {ok, #state{consumers=Consumers, deltas_server=DeltasServer}}. handle_cast({subscribe, PID}, #state{consumers=Consumers1}=State) -> Consumers2 = ordsets:add_element(PID, Consumers1), @@ -114,17 +113,17 @@ produce_async(#state{}=State) -> state(). produce( #state - { consumers = ConsumersSet - , stats_state = StatsState1 + { consumers = ConsumersSet + , deltas_server = DeltasServer }=State, MsgSendFun ) -> - StatsState2 = beam_stats_state:update(StatsState1), - Stats = beam_stats_state:export(StatsState2), + Stats = beam_stats:collect(DeltasServer), ConsumersList = ordsets:to_list(ConsumersSet), Send = fun (Consumer) -> MsgSendFun(Consumer, Stats) end, ok = lists:foreach(Send, ConsumersList), - State#state{stats_state = StatsState2}. + beam_stats_delta:gc(DeltasServer), + State. -spec schedule_first_production() -> ok.