feat(telemetry): enable/disable even in non-official versions

- Makes telemetry enabled by default on official versions.
- Allow enabling/disabling telemetry even on non-official versions.
This commit is contained in:
Thales Macedo Garitezi 2022-04-20 06:39:07 -03:00
parent 097b38e418
commit 6e819b5ecb
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
5 changed files with 44 additions and 34 deletions

View File

@ -84,7 +84,8 @@ remove_topic_metrics(Topic) ->
-spec is_telemetry_enabled() -> boolean(). -spec is_telemetry_enabled() -> boolean().
is_telemetry_enabled() -> is_telemetry_enabled() ->
emqx:get_config([telemetry, enable], true). IsOfficial = emqx_telemetry:official_version(emqx_release:version()),
emqx:get_config([telemetry, enable], IsOfficial).
-spec set_telemetry_status(boolean()) -> ok | {error, term()}. -spec set_telemetry_status(boolean()) -> ok | {error, term()}.
set_telemetry_status(Status) -> set_telemetry_status(Status) ->

View File

@ -116,7 +116,7 @@ stop() ->
gen_server:stop(?MODULE). gen_server:stop(?MODULE).
enable() -> enable() ->
gen_server:call(?MODULE, enable). gen_server:call(?MODULE, enable, 15_000).
disable() -> disable() ->
gen_server:call(?MODULE, disable). gen_server:call(?MODULE, disable).
@ -146,21 +146,11 @@ init(_Opts) ->
{ok, State0#state{node_uuid = NodeUUID, cluster_uuid = ClusterUUID}}. {ok, State0#state{node_uuid = NodeUUID, cluster_uuid = ClusterUUID}}.
handle_call(enable, _From, State0) -> handle_call(enable, _From, State0) ->
case ?MODULE:official_version(emqx_app:get_release()) of
true ->
State = report_telemetry(State0), State = report_telemetry(State0),
{reply, ok, ensure_report_timer(State)}; {reply, ok, ensure_report_timer(State)};
false ->
{reply, {error, not_official_version}, State0}
end;
handle_call(disable, _From, State = #state{timer = Timer}) -> handle_call(disable, _From, State = #state{timer = Timer}) ->
case ?MODULE:official_version(emqx_app:get_release()) of
true ->
emqx_misc:cancel_timer(Timer), emqx_misc:cancel_timer(Timer),
{reply, ok, State#state{timer = undefined}}; {reply, ok, State#state{timer = undefined}};
false ->
{reply, {error, not_official_version}, State}
end;
handle_call(get_node_uuid, _From, State = #state{node_uuid = UUID}) -> handle_call(get_node_uuid, _From, State = #state{node_uuid = UUID}) ->
{reply, {ok, UUID}, State}; {reply, {ok, UUID}, State};
handle_call(get_cluster_uuid, _From, State = #state{cluster_uuid = UUID}) -> handle_call(get_cluster_uuid, _From, State = #state{cluster_uuid = UUID}) ->
@ -200,7 +190,7 @@ code_change(_OldVsn, State, _Extra) ->
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
official_version(Version) -> official_version(Version) ->
Pt = "^\\d+\\.\\d+(?:(-(?:alpha|beta|rc)\\.[1-9][0-9]*)|\\.\\d+)$", Pt = "^\\d+\\.\\d+(?:\\.\\d+)?(?:(-(?:alpha|beta|rc)\\.[1-9][0-9]*))?$",
match =:= re:run(Version, Pt, [{capture, none}]). match =:= re:run(Version, Pt, [{capture, none}]).
ensure_report_timer(State = #state{report_interval = ReportInterval}) -> ensure_report_timer(State = #state{report_interval = ReportInterval}) ->
@ -454,6 +444,7 @@ advanced_mqtt_features() ->
maps:map(fun(_K, V) -> bool2int(V) end, AdvancedFeatures). maps:map(fun(_K, V) -> bool2int(V) end, AdvancedFeatures).
get_authn_authz_info() -> get_authn_authz_info() ->
try
#{ #{
authenticators := AuthnTypes, authenticators := AuthnTypes,
overridden_listeners := OverriddenListeners overridden_listeners := OverriddenListeners
@ -463,7 +454,15 @@ get_authn_authz_info() ->
authn => AuthnTypes, authn => AuthnTypes,
authn_listener => OverriddenListeners, authn_listener => OverriddenListeners,
authz => AuthzTypes authz => AuthzTypes
}. }
catch
_:_ ->
#{
authn => [],
authn_listener => [],
authz => []
}
end.
get_gateway_info() -> get_gateway_info() ->
try try

View File

@ -215,7 +215,7 @@ status(put, #{body := Body}) ->
Reason = Reason =
case Enable of case Enable of
true -> <<"Telemetry status is already enabled">>; true -> <<"Telemetry status is already enabled">>;
false -> <<"Telemetry status is already disable">> false -> <<"Telemetry status is already disabled">>
end, end,
{400, #{code => 'BAD_REQUEST', message => Reason}}; {400, #{code => 'BAD_REQUEST', message => Reason}};
false -> false ->

View File

@ -242,7 +242,18 @@ t_official_version(_) ->
false = emqx_telemetry:official_version("1.1-alpha.0"), false = emqx_telemetry:official_version("1.1-alpha.0"),
true = emqx_telemetry:official_version("1.1-beta.1"), true = emqx_telemetry:official_version("1.1-beta.1"),
true = emqx_telemetry:official_version("1.1-rc.1"), true = emqx_telemetry:official_version("1.1-rc.1"),
false = emqx_telemetry:official_version("1.1-alpha.a"). false = emqx_telemetry:official_version("1.1-alpha.a"),
true = emqx_telemetry:official_version("5.0.0"),
true = emqx_telemetry:official_version("5.0.0-alpha.1"),
true = emqx_telemetry:official_version("5.0.0-beta.4"),
true = emqx_telemetry:official_version("5.0-rc.1"),
true = emqx_telemetry:official_version("5.0.0-rc.1"),
false = emqx_telemetry:official_version("5.0.0-alpha.a"),
false = emqx_telemetry:official_version("5.0.0-beta.a"),
false = emqx_telemetry:official_version("5.0.0-rc.a"),
false = emqx_telemetry:official_version("5.0.0-foo"),
false = emqx_telemetry:official_version("5.0.0-rc.1-ccdf7920"),
ok.
t_get_telemetry(_Config) -> t_get_telemetry(_Config) ->
{ok, TelemetryData} = emqx_telemetry:get_telemetry(), {ok, TelemetryData} = emqx_telemetry:get_telemetry(),

View File

@ -52,19 +52,18 @@ end_per_suite(_Config) ->
]), ]),
ok. ok.
init_per_testcase(t_status_fail, Config) -> init_per_testcase(t_status_non_official, Config) ->
meck:new(emqx_telemetry, [non_strict, passthrough]), meck:new(emqx_telemetry, [non_strict, passthrough]),
meck:expect(emqx_telemetry, official_version, 1, false), meck:expect(emqx_telemetry, official_version, 1, false),
Config; Config;
init_per_testcase(t_status, Config) -> init_per_testcase(t_status, Config) ->
meck:new(emqx_telemetry, [non_strict, passthrough]), meck:new(emqx_telemetry, [non_strict, passthrough]),
meck:expect(emqx_telemetry, official_version, 1, true),
meck:expect(emqx_telemetry, enable, fun() -> ok end), meck:expect(emqx_telemetry, enable, fun() -> ok end),
Config; Config;
init_per_testcase(_TestCase, Config) -> init_per_testcase(_TestCase, Config) ->
Config. Config.
end_per_testcase(t_status_fail, _Config) -> end_per_testcase(t_status_non_official, _Config) ->
meck:unload(emqx_telemetry); meck:unload(emqx_telemetry);
end_per_testcase(t_status, _Config) -> end_per_testcase(t_status, _Config) ->
meck:unload(emqx_telemetry); meck:unload(emqx_telemetry);
@ -138,9 +137,9 @@ t_status(_) ->
) )
). ).
t_status_fail(_) -> t_status_non_official(_) ->
?assertMatch( ?assertMatch(
{ok, 400, _}, {ok, 200, _},
request( request(
put, put,
uri(["telemetry", "status"]), uri(["telemetry", "status"]),