diff --git a/apps/emqx_exhook/docs/design-cn.md b/apps/emqx_exhook/docs/design-cn.md index 7ab870cd3..a8c34ac0f 100644 --- a/apps/emqx_exhook/docs/design-cn.md +++ b/apps/emqx_exhook/docs/design-cn.md @@ -50,7 +50,7 @@ ```protobuff syntax = "proto3"; -package emqx.exhook.v1; +package emqx.exhook.v2; service HookProvider { diff --git a/apps/emqx_exhook/priv/protos/exhook.proto b/apps/emqx_exhook/priv/protos/exhook.proto index 33ceed869..9a6923b0c 100644 --- a/apps/emqx_exhook/priv/protos/exhook.proto +++ b/apps/emqx_exhook/priv/protos/exhook.proto @@ -16,13 +16,15 @@ syntax = "proto3"; -option csharp_namespace = "Emqx.Exhook.V1"; +option csharp_namespace = "Emqx.Exhook.V2"; option go_package = "emqx.io/grpc/exhook"; option java_multiple_files = true; option java_package = "io.emqx.exhook"; option java_outer_classname = "EmqxExHookProto"; -package emqx.exhook.v1; +// The exhook proto version should be fixed as `v2` in EMQX v5.x +// to make sure the exhook proto version is compatible +package emqx.exhook.v2; service HookProvider { @@ -70,21 +72,21 @@ service HookProvider { } //------------------------------------------------------------------------------ -// Request & Response +// Request //------------------------------------------------------------------------------ message ProviderLoadedRequest { BrokerInfo broker = 1; + + RequestMeta meta = 2; } -message LoadedResponse { +message ProviderUnloadedRequest { - repeated HookSpec hooks = 1; + RequestMeta meta = 1; } -message ProviderUnloadedRequest { } - message ClientConnectRequest { ConnInfo conninfo = 1; @@ -93,6 +95,8 @@ message ClientConnectRequest { // // It should be empty on MQTT v3.1.1/v3.1 or others protocol repeated Property props = 2; + + RequestMeta meta = 3; } message ClientConnackRequest { @@ -102,11 +106,15 @@ message ClientConnackRequest { string result_code = 2; repeated Property props = 3; + + RequestMeta meta = 4; } message ClientConnectedRequest { ClientInfo clientinfo = 1; + + RequestMeta meta = 2; } message ClientDisconnectedRequest { @@ -114,6 +122,8 @@ message ClientDisconnectedRequest { ClientInfo clientinfo = 1; string reason = 2; + + RequestMeta meta = 3; } message ClientAuthenticateRequest { @@ -121,6 +131,8 @@ message ClientAuthenticateRequest { ClientInfo clientinfo = 1; bool result = 2; + + RequestMeta meta = 3; } message ClientAuthorizeRequest { @@ -139,6 +151,8 @@ message ClientAuthorizeRequest { string topic = 3; bool result = 4; + + RequestMeta meta = 5; } message ClientSubscribeRequest { @@ -148,6 +162,8 @@ message ClientSubscribeRequest { repeated Property props = 2; repeated TopicFilter topic_filters = 3; + + RequestMeta meta = 4; } message ClientUnsubscribeRequest { @@ -157,11 +173,15 @@ message ClientUnsubscribeRequest { repeated Property props = 2; repeated TopicFilter topic_filters = 3; + + RequestMeta meta = 4; } message SessionCreatedRequest { ClientInfo clientinfo = 1; + + RequestMeta meta = 2; } message SessionSubscribedRequest { @@ -171,6 +191,8 @@ message SessionSubscribedRequest { string topic = 2; SubOpts subopts = 3; + + RequestMeta meta = 4; } message SessionUnsubscribedRequest { @@ -178,21 +200,29 @@ message SessionUnsubscribedRequest { ClientInfo clientinfo = 1; string topic = 2; + + RequestMeta meta = 3; } message SessionResumedRequest { ClientInfo clientinfo = 1; + + RequestMeta meta = 2; } message SessionDiscardedRequest { ClientInfo clientinfo = 1; + + RequestMeta meta = 2; } message SessionTakenoverRequest { ClientInfo clientinfo = 1; + + RequestMeta meta = 2; } message SessionTerminatedRequest { @@ -200,11 +230,15 @@ message SessionTerminatedRequest { ClientInfo clientinfo = 1; string reason = 2; + + RequestMeta meta = 3; } message MessagePublishRequest { Message message = 1; + + RequestMeta meta = 2; } message MessageDeliveredRequest { @@ -212,6 +246,8 @@ message MessageDeliveredRequest { ClientInfo clientinfo = 1; Message message = 2; + + RequestMeta meta = 3; } message MessageDroppedRequest { @@ -219,6 +255,8 @@ message MessageDroppedRequest { Message message = 1; string reason = 2; + + RequestMeta meta = 3; } message MessageAckedRequest { @@ -226,13 +264,22 @@ message MessageAckedRequest { ClientInfo clientinfo = 1; Message message = 2; + + RequestMeta meta = 3; } //------------------------------------------------------------------------------ -// Basic data types +// Response //------------------------------------------------------------------------------ -message EmptySuccess { } +// Responsed by `ProviderLoadedRequest` + +message LoadedResponse { + + repeated HookSpec hooks = 1; +} + +// Responsed by `ClientAuthenticateRequest` `ClientAuthorizeRequest` `MessagePublishRequest` message ValuedResponse { @@ -261,6 +308,14 @@ message ValuedResponse { } } +// no Response by other Requests + +message EmptySuccess { } + +//------------------------------------------------------------------------------ +// Basic data types +//------------------------------------------------------------------------------ + message BrokerInfo { string version = 1; @@ -272,6 +327,7 @@ message BrokerInfo { string datetime = 4; } + message HookSpec { // The registered hooks name @@ -430,3 +486,14 @@ message SubOpts { // connection with a ClientID equal to the ClientID of the publishing uint32 nl = 5; } + +message RequestMeta { + + string node = 1; + + string version = 2; + + string sysdescr = 3; + + string cluster_name = 4; +} diff --git a/apps/emqx_exhook/src/emqx_exhook_handler.erl b/apps/emqx_exhook/src/emqx_exhook_handler.erl index 0d6f2897d..eace7a52f 100644 --- a/apps/emqx_exhook/src/emqx_exhook_handler.erl +++ b/apps/emqx_exhook/src/emqx_exhook_handler.erl @@ -57,7 +57,8 @@ merge_responsed_bool/2, merge_responsed_message/2, assign_to_message/2, - clientinfo/1 + clientinfo/1, + request_meta/0 ]). -import( @@ -455,3 +456,11 @@ merge_responsed_message(_Req, Resp) -> ret('CONTINUE') -> ok; ret('STOP_AND_RETURN') -> stop. + +request_meta() -> + #{ + node => stringfy(node()), + version => emqx_sys:version(), + sysdescr => emqx_sys:sysdescr(), + cluster_name => emqx_sys:cluster_name() + }. diff --git a/apps/emqx_exhook/src/emqx_exhook_server.erl b/apps/emqx_exhook/src/emqx_exhook_server.erl index 36f5f403a..88aee8e7d 100644 --- a/apps/emqx_exhook/src/emqx_exhook_server.erl +++ b/apps/emqx_exhook/src/emqx_exhook_server.erl @@ -19,7 +19,9 @@ -include("emqx_exhook.hrl"). -include_lib("emqx/include/logger.hrl"). --define(PB_CLIENT_MOD, emqx_exhook_v_1_hook_provider_client). +%% The exhook proto version should be fixed as `v2` in EMQX v5.x +%% to make sure the exhook proto version is compatible +-define(PB_CLIENT_MOD, emqx_exhook_v_2_hook_provider_client). %% Load/Unload -export([ @@ -362,14 +364,15 @@ match_topic_filter(TopicName, TopicFilter) -> -spec do_call(binary(), atom(), atom(), map(), map()) -> {ok, map()} | {error, term()}. do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) -> Options = ReqOpts#{channel => ChannName}, + NReq = Req#{meta => emqx_exhook_handler:request_meta()}, ?SLOG(debug, #{ msg => "do_call", module => ?PB_CLIENT_MOD, function => Fun, - req => Req, + req => NReq, options => Options }), - case catch ?CALL_PB_CLIENT(ChanneName, Fun, Req, Options) of + case catch ?CALL_PB_CLIENT(ChanneName, Fun, NReq, Options) of {ok, Resp, Metadata} -> ?SLOG(debug, #{msg => "do_call_ok", resp => Resp, metadata => Metadata}), update_metrics(Hookpoint, ChannName, fun emqx_exhook_metrics:succeed/2), @@ -379,7 +382,7 @@ do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) -> msg => "exhook_call_error", module => ?PB_CLIENT_MOD, function => Fun, - req => Req, + req => NReq, options => Options, code => Code, packet => Msg @@ -391,7 +394,7 @@ do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) -> msg => "exhook_call_error", module => ?PB_CLIENT_MOD, function => Fun, - req => Req, + req => NReq, options => Options, reason => Reason }), @@ -402,7 +405,7 @@ do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) -> msg => "exhook_call_exception", module => ?PB_CLIENT_MOD, function => Fun, - req => Req, + req => NReq, options => Options, stacktrace => Stk }),