Просмотр исходного кода

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.
Thales Macedo Garitezi 3 лет назад
Родитель
Сommit
6e819b5ecb

+ 2 - 1
apps/emqx_modules/src/emqx_modules_conf.erl

@@ -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) ->

+ 25 - 26
apps/emqx_modules/src/emqx_telemetry.erl

@@ -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),
-            {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}) ->
 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}) ->
 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,16 +444,25 @@ 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() ->
-    #{
-        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() ->
 get_gateway_info() ->
     try
     try

+ 1 - 1
apps/emqx_modules/src/emqx_telemetry_api.erl

@@ -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 ->

+ 12 - 1
apps/emqx_modules/test/emqx_telemetry_SUITE.erl

@@ -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(),

+ 4 - 5
apps/emqx_modules/test/emqx_telemetry_api_SUITE.erl

@@ -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"]),