Przeglądaj źródła

Merge pull request #4163 from tigercl/fix/telemetry

fix(telemtry): report only in official version
Zaiming Shi 5 lat temu
rodzic
commit
1b0b742919

+ 14 - 1
apps/emqx_telemetry/src/emqx_telemetry.erl

@@ -157,7 +157,12 @@ init([Opts]) ->
                  [#telemetry{uuid = UUID, enabled = Enabled} | _] ->
                      State#state{enabled = Enabled, uuid = UUID}
              end,
-    {ok, ensure_report_timer(NState), {continue, first_report}}.
+    case official_version(emqx_version()) of
+        true ->
+            {ok, ensure_report_timer(NState), {continue, first_report}};
+        false ->
+            {ok, NState#state{enabled = false}}
+    end. 
 
 handle_call(enable, _From, State = #state{uuid = UUID}) ->
     mnesia:dirty_write(?TELEMETRY, #telemetry{id = ?UNIQUE_ID,
@@ -217,6 +222,14 @@ code_change(_OldVsn, State, _Extra) ->
 %% Internal functions
 %%------------------------------------------------------------------------------
 
+official_version(Version) ->
+    case re:run(Version,
+                "^\\d+\\.\\d+(?:(-(?:alpha|beta|rc)\\.[1-9][0-9]*)|\\.\\d+)$",
+                [{capture, none}]) of
+        match -> true;
+        nomatch -> false
+    end.
+
 ensure_report_timer(State = #state{report_interval = ReportInterval}) ->
     State#state{timer = emqx_misc:start_timer(ReportInterval, time_to_report_telemetry_data)}.
 

+ 14 - 0
apps/emqx_telemetry/test/emqx_telemetry_SUITE.erl

@@ -46,6 +46,20 @@ t_uuid(_) ->
     {ok, UUID3} = emqx_telemetry:get_uuid(),
     ?assertEqual(UUID2, UUID3).
 
+t_official_version(_) ->
+    true = emqx_telemetry:official_version("0.0.0"),
+    true = emqx_telemetry:official_version("1.1.1"),
+    true = emqx_telemetry:official_version("10.10.10"),
+    false = emqx_telemetry:official_version("0.0.0.0"),
+    false = emqx_telemetry:official_version("1.1.a"),
+    true = emqx_telemetry:official_version("0.0-alpha.1"),
+    true = emqx_telemetry:official_version("1.1-alpha.1"),
+    true = emqx_telemetry:official_version("10.10-alpha.10"),
+    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").
+
 t_get_telemetry(_) ->
     {ok, TelemetryData} = emqx_telemetry:get_telemetry(),
     OTPVersion = bin(erlang:system_info(otp_release)),