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().
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()}.
set_telemetry_status(Status) ->

View File

@ -116,7 +116,7 @@ stop() ->
gen_server:stop(?MODULE).
enable() ->
gen_server:call(?MODULE, enable).
gen_server:call(?MODULE, enable, 15_000).
disable() ->
gen_server:call(?MODULE, disable).
@ -146,21 +146,11 @@ init(_Opts) ->
{ok, State0#state{node_uuid = NodeUUID, cluster_uuid = ClusterUUID}}.
handle_call(enable, _From, State0) ->
case ?MODULE:official_version(emqx_app:get_release()) of
true ->
State = report_telemetry(State0),
{reply, ok, ensure_report_timer(State)};
false ->
{reply, {error, not_official_version}, State0}
end;
State = report_telemetry(State0),
{reply, ok, ensure_report_timer(State)};
handle_call(disable, _From, State = #state{timer = Timer}) ->
case ?MODULE:official_version(emqx_app:get_release()) of
true ->
emqx_misc:cancel_timer(Timer),
{reply, ok, State#state{timer = undefined}};
false ->
{reply, {error, not_official_version}, State}
end;
emqx_misc:cancel_timer(Timer),
{reply, ok, State#state{timer = undefined}};
handle_call(get_node_uuid, _From, State = #state{node_uuid = UUID}) ->
{reply, {ok, UUID}, State};
handle_call(get_cluster_uuid, _From, State = #state{cluster_uuid = UUID}) ->
@ -200,7 +190,7 @@ code_change(_OldVsn, State, _Extra) ->
%%------------------------------------------------------------------------------
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}]).
ensure_report_timer(State = #state{report_interval = ReportInterval}) ->
@ -454,16 +444,25 @@ advanced_mqtt_features() ->
maps:map(fun(_K, V) -> bool2int(V) end, AdvancedFeatures).
get_authn_authz_info() ->
#{
authenticators := AuthnTypes,
overridden_listeners := OverriddenListeners
} = emqx_authn:get_enabled_authns(),
AuthzTypes = emqx_authz:get_enabled_authzs(),
#{
authn => AuthnTypes,
authn_listener => OverriddenListeners,
authz => AuthzTypes
}.
try
#{
authenticators := AuthnTypes,
overridden_listeners := OverriddenListeners
} = emqx_authn:get_enabled_authns(),
AuthzTypes = emqx_authz:get_enabled_authzs(),
#{
authn => AuthnTypes,
authn_listener => OverriddenListeners,
authz => AuthzTypes
}
catch
_:_ ->
#{
authn => [],
authn_listener => [],
authz => []
}
end.
get_gateway_info() ->
try

View File

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

View File

@ -242,7 +242,18 @@ t_official_version(_) ->
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-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) ->
{ok, TelemetryData} = emqx_telemetry:get_telemetry(),

View File

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