chore(modules): Get the status by conf

This commit is contained in:
Turtle 2021-07-29 15:32:33 +08:00 committed by turtleDeng
parent cdc8000493
commit 76e3dd1905
4 changed files with 32 additions and 29 deletions

View File

@ -43,8 +43,7 @@
]). ]).
%% gen_server callbacks %% gen_server callbacks
-export([ get_status/0 -export([ enable/0
, enable/0
, disable/0 , disable/0
]). ]).
@ -90,7 +89,11 @@ on_message_publish(Msg = #message{
end, end,
PubMsg = Msg#message{topic = Topic1}, PubMsg = Msg#message{topic = Topic1},
Headers = PubMsg#message.headers, Headers = PubMsg#message.headers,
ok = store(#delayed_message{key = {PubAt, Id}, msg = PubMsg}), case store(#delayed_message{key = {PubAt, Id}, msg = PubMsg}) of
ok -> ok;
{error, Error} ->
?LOG(error, "Store delayed message fail: ~p", [Error])
end,
{stop, PubMsg#message{headers = Headers#{allow_publish => false}}}; {stop, PubMsg#message{headers = Headers#{allow_publish => false}}};
on_message_publish(Msg) -> on_message_publish(Msg) ->
@ -109,9 +112,6 @@ start_link() ->
store(DelayedMsg) -> store(DelayedMsg) ->
gen_server:call(?SERVER, {store, DelayedMsg}, infinity). gen_server:call(?SERVER, {store, DelayedMsg}, infinity).
get_status() ->
gen_server:call(?SERVER, get_status).
enable() -> enable() ->
gen_server:call(?SERVER, enable). gen_server:call(?SERVER, enable).
@ -122,17 +122,31 @@ disable() ->
%% gen_server callback %% gen_server callback
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
init([_Opts]) -> init([Opts]) ->
MaxDelayedMessages = maps:get(max_delayed_messages, Opts, 0),
{ok, ensure_stats_event( {ok, ensure_stats_event(
ensure_publish_timer(#{timer => undefined, ensure_publish_timer(#{timer => undefined,
publish_at => 0, publish_at => 0,
enabled => false}))}. max_delayed_messages => MaxDelayedMessages}))}.
handle_call({store, DelayedMsg = #delayed_message{key = Key}}, _From, State) -> handle_call({store, DelayedMsg = #delayed_message{key = Key}},
_From, State = #{max_delayed_messages := 0}) ->
ok = ekka_mnesia:dirty_write(?TAB, DelayedMsg), ok = ekka_mnesia:dirty_write(?TAB, DelayedMsg),
emqx_metrics:inc('messages.delayed'), emqx_metrics:inc('messages.delayed'),
{reply, ok, ensure_publish_timer(Key, State)}; {reply, ok, ensure_publish_timer(Key, State)};
handle_call({store, DelayedMsg = #delayed_message{key = Key}},
_From, State = #{max_delayed_messages := Val}) ->
Size = mnesia:table_info(?TAB, size),
case Size > Val of
true ->
{reply, {error, max_delayed_messages_full}, State};
false ->
ok = ekka_mnesia:dirty_write(?TAB, DelayedMsg),
emqx_metrics:inc('messages.delayed'),
{reply, ok, ensure_publish_timer(Key, State)}
end;
handle_call(enable, _From, State) -> handle_call(enable, _From, State) ->
emqx_hooks:put('message.publish', {?MODULE, on_message_publish, []}), emqx_hooks:put('message.publish', {?MODULE, on_message_publish, []}),
{reply, ok, State}; {reply, ok, State};
@ -141,9 +155,6 @@ handle_call(disable, _From, State) ->
emqx_hooks:del('message.publish', {?MODULE, on_message_publish}), emqx_hooks:del('message.publish', {?MODULE, on_message_publish}),
{reply, ok, State}; {reply, ok, State};
handle_call(get_status, _From, State = #{enabled := Enabled}) ->
{reply, Enabled, State};
handle_call(Req, _From, State) -> handle_call(Req, _From, State) ->
?LOG(error, "Unexpected call: ~p", [Req]), ?LOG(error, "Unexpected call: ~p", [Req]),
{reply, ignored, State}. {reply, ignored, State}.

View File

@ -50,9 +50,9 @@
, disable/0 , disable/0
]). ]).
-export([ get_status/0 -export([ get_uuid/0
, get_uuid/0
, get_telemetry/0 , get_telemetry/0
, get_status/0
]). ]).
-export([official_version/1]). -export([official_version/1]).
@ -73,7 +73,6 @@
-record(state, { -record(state, {
uuid :: undefined | binary(), uuid :: undefined | binary(),
enabled :: undefined | boolean(),
url :: string(), url :: string(),
report_interval :: undefined | non_neg_integer(), report_interval :: undefined | non_neg_integer(),
timer = undefined :: undefined | reference() timer = undefined :: undefined | reference()
@ -121,7 +120,7 @@ disable() ->
gen_server:call(?MODULE, disable). gen_server:call(?MODULE, disable).
get_status() -> get_status() ->
gen_server:call(?MODULE, get_status). emqx_config:get([telemetry, enable], true).
get_uuid() -> get_uuid() ->
gen_server:call(?MODULE, get_uuid). gen_server:call(?MODULE, get_uuid).
@ -151,14 +150,13 @@ init(_Opts) ->
end, end,
{ok, #state{url = ?TELEMETRY_URL, {ok, #state{url = ?TELEMETRY_URL,
report_interval = timer:seconds(?REPORT_INTERVAR), report_interval = timer:seconds(?REPORT_INTERVAR),
enabled = false,
uuid = UUID1}}. uuid = UUID1}}.
handle_call(enable, _From, State) -> handle_call(enable, _From, State) ->
case ?MODULE:official_version(emqx_app:get_release()) of case ?MODULE:official_version(emqx_app:get_release()) of
true -> true ->
report_telemetry(State), report_telemetry(State),
{reply, ok, ensure_report_timer(State#state{enabled = true})}; {reply, ok, ensure_report_timer(State)};
false -> false ->
{reply, {error, not_official_version}, State} {reply, {error, not_official_version}, State}
end; end;
@ -167,14 +165,11 @@ handle_call(disable, _From, State = #state{timer = Timer}) ->
case ?MODULE:official_version(emqx_app:get_release()) of case ?MODULE:official_version(emqx_app:get_release()) of
true -> true ->
emqx_misc:cancel_timer(Timer), emqx_misc:cancel_timer(Timer),
{reply, ok, State#state{enabled = false, timer = undefined}}; {reply, ok, State#state{timer = undefined}};
false -> false ->
{reply, {error, not_official_version}, State} {reply, {error, not_official_version}, State}
end; end;
handle_call(get_status, _From, State = #state{enabled = Enabled}) ->
{reply, Enabled, State};
handle_call(get_uuid, _From, State = #state{uuid = UUID}) -> handle_call(get_uuid, _From, State = #state{uuid = UUID}) ->
{reply, {ok, UUID}, State}; {reply, {ok, UUID}, State};
@ -193,11 +188,11 @@ handle_continue(Continue, State) ->
?LOG(error, "Unexpected continue: ~p", [Continue]), ?LOG(error, "Unexpected continue: ~p", [Continue]),
{noreply, State}. {noreply, State}.
handle_info({timeout, TRef, time_to_report_telemetry_data}, State = #state{timer = TRef,
enabled = false}) ->
{noreply, State};
handle_info({timeout, TRef, time_to_report_telemetry_data}, State = #state{timer = TRef}) -> handle_info({timeout, TRef, time_to_report_telemetry_data}, State = #state{timer = TRef}) ->
report_telemetry(State), case get_status() of
true -> report_telemetry(State);
false -> ok
end,
{noreply, ensure_report_timer(State)}; {noreply, ensure_report_timer(State)};
handle_info(Info, State) -> handle_info(Info, State) ->

View File

@ -53,7 +53,6 @@ t_load_case(_) ->
?assertEqual(false, lists:keyfind(MFA, 2, Hooks)), ?assertEqual(false, lists:keyfind(MFA, 2, Hooks)),
ok = emqx_delayed:enable(), ok = emqx_delayed:enable(),
Hooks1 = emqx_hooks:lookup('message.publish'), Hooks1 = emqx_hooks:lookup('message.publish'),
ct:pal("----~p~n", [Hooks1]),
?assertNotEqual(false, lists:keyfind(MFA, 2, Hooks1)), ?assertNotEqual(false, lists:keyfind(MFA, 2, Hooks1)),
ok. ok.

View File

@ -72,9 +72,7 @@ t_enable(_) ->
ok = meck:new(emqx_telemetry, [non_strict, passthrough, no_history, no_link]), ok = meck:new(emqx_telemetry, [non_strict, passthrough, no_history, no_link]),
ok = meck:expect(emqx_telemetry, official_version, fun(_) -> true end), ok = meck:expect(emqx_telemetry, official_version, fun(_) -> true end),
ok = emqx_telemetry:enable(), ok = emqx_telemetry:enable(),
?assertEqual(true, emqx_telemetry:get_status()),
ok = emqx_telemetry:disable(), ok = emqx_telemetry:disable(),
?assertEqual(false, emqx_telemetry:get_status()),
meck:unload([emqx_telemetry]). meck:unload([emqx_telemetry]).
t_send_after_enable(_) -> t_send_after_enable(_) ->