From: Siraaj Khandkar Date: Wed, 19 Aug 2015 21:23:18 +0000 (-0400) Subject: Add produce method to force production on-demand. X-Git-Tag: 0.0.0~10 X-Git-Url: https://git.xandkar.net/?a=commitdiff_plain;h=4997ac36497070e00aeb48a83c197069c8f41dc2;p=beam_stats.git Add produce method to force production on-demand. To help with testing. --- diff --git a/src/beam_stats_producer.erl b/src/beam_stats_producer.erl index 5c47951..cd0933c 100644 --- a/src/beam_stats_producer.erl +++ b/src/beam_stats_producer.erl @@ -9,6 +9,9 @@ [ start_link/0 , subscribe/1 , unsubscribe/1 + + % Force production and distribution. Blocks. Mainly for testing. + , force_production/0 ]). %% gen_server callbacks @@ -26,11 +29,15 @@ %% ============================================================================ -define(SIGNAL_PRODUCTION , beam_stats_production_signal). +-define(FORCE_PRODUCTION , beam_stats_force_production). -record(state, { consumers = ordsets:new() :: ordsets:ordset(pid()) }). +-type state() :: + #state{}. + %% ============================================================================ %% API %% ============================================================================ @@ -48,13 +55,15 @@ subscribe(PID) -> unsubscribe(PID) -> gen_server:cast(?MODULE, {unsubscribe, PID}). +-spec force_production() -> + {}. +force_production() -> + gen_server:call(?MODULE, ?FORCE_PRODUCTION). + %% ============================================================================ %% gen_server callbacks (unused) %% ============================================================================ -handle_call(_Request, _From, State) -> - ?METHOD_SHOULD_NOT_BE_USED(handle_call, State). - code_change(_OldVsn, State, _Extra) -> {ok, State}. @@ -78,9 +87,12 @@ 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), +handle_call(?FORCE_PRODUCTION, _From, State) -> + {} = produce(State), + {reply, {}, State}. + +handle_info(?SIGNAL_PRODUCTION, #state{}=State) -> + {} = produce(State), ok = schedule_next_production(), {noreply, State}. @@ -88,6 +100,13 @@ handle_info(?SIGNAL_PRODUCTION, #state{consumers=ConsumersSet}=State) -> %% Private %% ============================================================================ +-spec produce(state()) -> + {}. +produce(#state{consumers=ConsumersSet}) -> + ConsumersList = ordsets:to_list(ConsumersSet), + ok = collect_and_push_to_consumers(ConsumersList), + {}. + -spec schedule_first_production() -> ok. schedule_first_production() ->