From eafa36c3ae3a2d121ac869010fab0ab96c63cabf Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Tue, 16 May 2023 13:32:45 +0800 Subject: [PATCH 1/2] fix: webhook crash at on_client_connack --- apps/emqx_web_hook/src/emqx_web_hook.app.src | 2 +- .../emqx_web_hook/src/emqx_web_hook.appup.src | 36 +++++++++++++------ apps/emqx_web_hook/src/emqx_web_hook.erl | 17 ++++----- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/apps/emqx_web_hook/src/emqx_web_hook.app.src b/apps/emqx_web_hook/src/emqx_web_hook.app.src index cf1d53984..35c0489f9 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook.app.src +++ b/apps/emqx_web_hook/src/emqx_web_hook.app.src @@ -1,6 +1,6 @@ {application, emqx_web_hook, [{description, "EMQX WebHook Plugin"}, - {vsn, "4.3.18"}, % strict semver, bump manually! + {vsn, "4.3.19"}, % strict semver, bump manually! {modules, []}, {registered, [emqx_web_hook_sup]}, {applications, [kernel,stdlib,ehttpc]}, diff --git a/apps/emqx_web_hook/src/emqx_web_hook.appup.src b/apps/emqx_web_hook/src/emqx_web_hook.appup.src index cf4f5235d..865dfa233 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook.appup.src +++ b/apps/emqx_web_hook/src/emqx_web_hook.appup.src @@ -1,13 +1,20 @@ %% -*- mode: erlang -*- %% Unless you know what you are doing, DO NOT edit manually!! {VSN, - [{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, - {"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, + [{"4.3.18",[{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}]}, + {"4.3.17", + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, + {"4.3.16", + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {"4.3.15", - [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {"4.3.14", - [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {<<"4\\.3\\.[0-7]">>, [{apply,{application,stop,[emqx_web_hook]}}, @@ -31,16 +38,24 @@ {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook,brutal_purge,soft_purge,[]}]}, {<<"4\\.3\\.1[2-4]">>, - [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}], - [{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, - {"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, + [{"4.3.18",[{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}]}, + {"4.3.17", + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, + {"4.3.16", + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {"4.3.15", - [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {"4.3.14", - [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {<<"4\\.3\\.[0-7]">>, [{apply,{application,stop,[emqx_web_hook]}}, @@ -64,6 +79,7 @@ {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook,brutal_purge,soft_purge,[]}]}, {<<"4\\.3\\.1[2-4]">>, - [{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, + [{load_module,emqx_web_hook,brutal_purge,soft_purge,[]}, + {load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]}, {load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}]}. diff --git a/apps/emqx_web_hook/src/emqx_web_hook.erl b/apps/emqx_web_hook/src/emqx_web_hook.erl index 94b0f725b..708c86f23 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook.erl +++ b/apps/emqx_web_hook/src/emqx_web_hook.erl @@ -91,10 +91,8 @@ on_client_connect(ConnInfo = #{clientid := ClientId, username := Username, peern , clientid => ClientId , username => maybe(Username) , ipaddress => iolist_to_binary(ntoa(Peerhost)) - , keepalive => maps:get(keepalive, ConnInfo) - , proto_ver => maps:get(proto_ver, ConnInfo) }, - send_http_request(ClientId, Params). + send_http_request(ClientId, add_optional_conn_fields(Params, ConnInfo)). %%-------------------------------------------------------------------- %% Client connack @@ -107,12 +105,9 @@ on_client_connack(ConnInfo = #{clientid := ClientId, username := Username, peern , clientid => ClientId , username => maybe(Username) , ipaddress => iolist_to_binary(ntoa(Peerhost)) - , keepalive => maps:get(keepalive, ConnInfo) - , proto_ver => maps:get(proto_ver, ConnInfo) - , connected_at => maps:get(connected_at, ConnInfo) , conn_ack => Rc }, - send_http_request(ClientId, Params). + send_http_request(ClientId, add_optional_conn_fields(Params, ConnInfo)). %%-------------------------------------------------------------------- %% Client connected @@ -125,11 +120,8 @@ on_client_connected(#{clientid := ClientId, username := Username, peerhost := Pe , clientid => ClientId , username => maybe(Username) , ipaddress => iolist_to_binary(ntoa(Peerhost)) - , keepalive => maps:get(keepalive, ConnInfo) - , proto_ver => maps:get(proto_ver, ConnInfo) - , connected_at => maps:get(connected_at, ConnInfo) }, - send_http_request(ClientId, Params). + send_http_request(ClientId, add_optional_conn_fields(Params, ConnInfo)). %%-------------------------------------------------------------------- %% Client disconnected @@ -387,3 +379,6 @@ stringfy(Term) -> maybe(undefined) -> null; maybe(Str) -> Str. + +add_optional_conn_fields(Fields, ConnInfo) -> + maps:merge(Fields, maps:with([keepalive, proto_ver, connected_at], ConnInfo)). From b19136a12fb40eb97612d4bf52bc52951641e78b Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Tue, 16 May 2023 13:48:04 +0800 Subject: [PATCH 2/2] chore: update change logs --- apps/emqx_web_hook/src/emqx_web_hook.erl | 13 ++++++++----- changes/v4.4.19-en.md | 4 ++++ changes/v4.4.19-zh.md | 4 ++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/emqx_web_hook/src/emqx_web_hook.erl b/apps/emqx_web_hook/src/emqx_web_hook.erl index 708c86f23..483f197ee 100644 --- a/apps/emqx_web_hook/src/emqx_web_hook.erl +++ b/apps/emqx_web_hook/src/emqx_web_hook.erl @@ -92,7 +92,8 @@ on_client_connect(ConnInfo = #{clientid := ClientId, username := Username, peern , username => maybe(Username) , ipaddress => iolist_to_binary(ntoa(Peerhost)) }, - send_http_request(ClientId, add_optional_conn_fields(Params, ConnInfo)). + OptFields = [keepalive, proto_ver], + send_http_request(ClientId, add_optional_conn_fields(Params, OptFields, ConnInfo)). %%-------------------------------------------------------------------- %% Client connack @@ -107,7 +108,8 @@ on_client_connack(ConnInfo = #{clientid := ClientId, username := Username, peern , ipaddress => iolist_to_binary(ntoa(Peerhost)) , conn_ack => Rc }, - send_http_request(ClientId, add_optional_conn_fields(Params, ConnInfo)). + OptFields = [keepalive, proto_ver, connected_at], + send_http_request(ClientId, add_optional_conn_fields(Params, OptFields, ConnInfo)). %%-------------------------------------------------------------------- %% Client connected @@ -121,7 +123,8 @@ on_client_connected(#{clientid := ClientId, username := Username, peerhost := Pe , username => maybe(Username) , ipaddress => iolist_to_binary(ntoa(Peerhost)) }, - send_http_request(ClientId, add_optional_conn_fields(Params, ConnInfo)). + OptFields = [keepalive, proto_ver, connected_at], + send_http_request(ClientId, add_optional_conn_fields(Params, OptFields, ConnInfo)). %%-------------------------------------------------------------------- %% Client disconnected @@ -380,5 +383,5 @@ stringfy(Term) -> maybe(undefined) -> null; maybe(Str) -> Str. -add_optional_conn_fields(Fields, ConnInfo) -> - maps:merge(Fields, maps:with([keepalive, proto_ver, connected_at], ConnInfo)). +add_optional_conn_fields(Params, OptFields, ConnInfo) -> + maps:merge(Params, maps:with(OptFields, ConnInfo)). diff --git a/changes/v4.4.19-en.md b/changes/v4.4.19-en.md index 93f604213..748291242 100644 --- a/changes/v4.4.19-en.md +++ b/changes/v4.4.19-en.md @@ -33,3 +33,7 @@ Prior to the fix, the `date` variable exported by `FOREACH` could not be accessed in the `DO` clause of the above SQL, resulting in the following output for the SQL statement: `[{"elem": "a","date": "undefined"}]`. After the fix, the output of the SQL statement is: `[{"elem": "a","date": "2023-05-06"}]` + +- Fixed an issue where the WebHook plugin failed to execute the `on_client_connack` hook [#10710](https://github.com/emqx/emqx/pull/10710). + + See https://github.com/emqx/emqx/issues/10628 for more details. diff --git a/changes/v4.4.19-zh.md b/changes/v4.4.19-zh.md index dc5a77fac..a17986b71 100644 --- a/changes/v4.4.19-zh.md +++ b/changes/v4.4.19-zh.md @@ -33,3 +33,7 @@ 修复前,以上 SQL 语句中 `FOREACH` 导出的 `date` 变量无法在 `DO` 子句中访问,导致以上 SQL 的输出为: `[{"elem": "a","date": "undefined"}]`。 修复后,SQL 的输出为:`[{"elem": "a","date": "2023-05-06"}]` + +- 修复 WebHook 插件执行 `on_client_connack` 钩子失败的问题 [#10710](https://github.com/emqx/emqx/pull/10710)。 + + 详见 https://github.com/emqx/emqx/issues/10628