diff --git a/apps/emqx_telemetry/src/emqx_telemetry.erl b/apps/emqx_telemetry/src/emqx_telemetry.erl index e98e08c90..f5dc0de60 100644 --- a/apps/emqx_telemetry/src/emqx_telemetry.erl +++ b/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)}. diff --git a/apps/emqx_telemetry/test/emqx_telemetry_SUITE.erl b/apps/emqx_telemetry/test/emqx_telemetry_SUITE.erl index 2f3dc6941..8c4a2424b 100644 --- a/apps/emqx_telemetry/test/emqx_telemetry_SUITE.erl +++ b/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)),