From 2443500884b766214ddc7fec418c82543d3af0f6 Mon Sep 17 00:00:00 2001 From: Stefan Strigler Date: Thu, 1 Dec 2022 16:42:31 +0100 Subject: [PATCH] fix: return 404 for /telemetry/data in case it's disabled --- apps/emqx_modules/src/emqx_modules.app.src | 2 +- apps/emqx_modules/src/emqx_telemetry_api.erl | 25 ++++++++++++++---- .../test/emqx_telemetry_api_SUITE.erl | 26 ++++++++++++++++++- changes/v5.0.12-en.md | 2 ++ changes/v5.0.12-zh.md | 2 ++ 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/apps/emqx_modules/src/emqx_modules.app.src b/apps/emqx_modules/src/emqx_modules.app.src index 29a7d0362..fa68e17cb 100644 --- a/apps/emqx_modules/src/emqx_modules.app.src +++ b/apps/emqx_modules/src/emqx_modules.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_modules, [ {description, "EMQX Modules"}, - {vsn, "5.0.7"}, + {vsn, "5.0.8"}, {modules, []}, {applications, [kernel, stdlib, emqx]}, {mod, {emqx_modules_app, []}}, diff --git a/apps/emqx_modules/src/emqx_telemetry_api.erl b/apps/emqx_modules/src/emqx_telemetry_api.erl index a135ac3c3..4883de2fc 100644 --- a/apps/emqx_modules/src/emqx_telemetry_api.erl +++ b/apps/emqx_modules/src/emqx_telemetry_api.erl @@ -36,6 +36,7 @@ ]). -define(BAD_REQUEST, 'BAD_REQUEST'). +-define(NOT_FOUND, 'NOT_FOUND'). api_spec() -> emqx_dashboard_swagger:spec(?MODULE, #{check_schema => true}). @@ -63,7 +64,8 @@ schema("/telemetry/status") -> 'requestBody' => status_schema(?DESC(update_telemetry_status_api)), responses => #{ - 200 => status_schema(?DESC(update_telemetry_status_api)) + 200 => status_schema(?DESC(update_telemetry_status_api)), + 400 => emqx_dashboard_swagger:error_codes([?BAD_REQUEST], <<"Bad Request">>) } } }; @@ -75,7 +77,12 @@ schema("/telemetry/data") -> description => ?DESC(get_telemetry_data_api), tags => [<<"Telemetry">>], responses => - #{200 => mk(ref(?MODULE, telemetry), #{desc => ?DESC(get_telemetry_data_api)})} + #{ + 200 => mk(ref(?MODULE, telemetry), #{desc => ?DESC(get_telemetry_data_api)}), + 404 => emqx_dashboard_swagger:error_codes( + [?NOT_FOUND], <<"Telemetry is not enabled">> + ) + } } }. @@ -220,21 +227,29 @@ status(put, #{body := Body}) -> true -> <<"Telemetry status is already enabled">>; false -> <<"Telemetry status is already disabled">> end, - {400, #{code => 'BAD_REQUEST', message => Reason}}; + {400, #{code => ?BAD_REQUEST, message => Reason}}; false -> case enable_telemetry(Enable) of ok -> {200, get_telemetry_status()}; {error, Reason} -> {400, #{ - code => 'BAD_REQUEST', + code => ?BAD_REQUEST, message => Reason }} end end. data(get, _Request) -> - {200, emqx_json:encode(get_telemetry_data())}. + case emqx_modules_conf:is_telemetry_enabled() of + true -> + {200, emqx_json:encode(get_telemetry_data())}; + false -> + {404, #{ + code => ?NOT_FOUND, + message => <<"Telemetry is not enabled">> + }} + end. %%-------------------------------------------------------------------- %% Internal functions diff --git a/apps/emqx_modules/test/emqx_telemetry_api_SUITE.erl b/apps/emqx_modules/test/emqx_telemetry_api_SUITE.erl index d8e22cc1e..d2c8079b9 100644 --- a/apps/emqx_modules/test/emqx_telemetry_api_SUITE.erl +++ b/apps/emqx_modules/test/emqx_telemetry_api_SUITE.erl @@ -61,8 +61,20 @@ init_per_testcase(t_status_non_official, Config) -> init_per_testcase(t_status, Config) -> meck:new(emqx_telemetry, [non_strict, passthrough]), meck:expect(emqx_telemetry, enable, fun() -> ok end), + {ok, _, _} = + request( + put, + uri(["telemetry", "status"]), + #{<<"enable">> => true} + ), Config; init_per_testcase(_TestCase, Config) -> + {ok, _, _} = + request( + put, + uri(["telemetry", "status"]), + #{<<"enable">> => true} + ), Config. end_per_testcase(t_status_non_official, _Config) -> @@ -169,4 +181,16 @@ t_data(_) -> <<"vm_specs">> := _ }, jsx:decode(Result) - ). + ), + + {ok, 200, _} = + request( + put, + uri(["telemetry", "status"]), + #{<<"enable">> => false} + ), + + {ok, 404, _} = + request(get, uri(["telemetry", "data"])), + + ok. diff --git a/changes/v5.0.12-en.md b/changes/v5.0.12-en.md index 731719c7d..0b6a6feed 100644 --- a/changes/v5.0.12-en.md +++ b/changes/v5.0.12-en.md @@ -21,3 +21,5 @@ - Fix that the obsolete SSL files aren't deleted after the ExHook config update [#9432](https://github.com/emqx/emqx/pull/9432). - Fix doc and schema for `/trace` API [#9468](https://github.com/emqx/emqx/pull/9468). + +- Return `404` for `/telemetry/data` in case it's disabled [#9464](https://github.com/emqx/emqx/pull/9464). diff --git a/changes/v5.0.12-zh.md b/changes/v5.0.12-zh.md index e7cbd124c..cde03f3d8 100644 --- a/changes/v5.0.12-zh.md +++ b/changes/v5.0.12-zh.md @@ -20,3 +20,5 @@ - 修复 ExHook 更新 SSL 相关配置后,过时的 SSL 文件没有被删除的问题 [#9432](https://github.com/emqx/emqx/pull/9432)。 - 修复 /trace API 的返回值格式和相关文档 [#9468](https://github.com/emqx/emqx/pull/9468)。 + +- 在遥测功能未开启时,通过 /telemetry/data 请求其数据,将会返回 404 [#9464](https://github.com/emqx/emqx/pull/9464)。