feat(exhook): add field `meta` for grpc proto

This commit is contained in:
JimMoen 2022-04-01 14:32:59 +08:00
parent 0297dd723e
commit e7f5372fae
5 changed files with 79 additions and 8 deletions

View File

@ -25,5 +25,5 @@ data/
*.class *.class
Mnesia.nonode@nohost/ Mnesia.nonode@nohost/
src/emqx_exhook_pb.erl src/emqx_exhook_pb.erl
src/emqx_exhook_v_1_hook_provider_client.erl src/emqx_exhook_v_*_hook_provider_client.erl
src/emqx_exhook_v_1_hook_provider_bhvr.erl src/emqx_exhook_v_*_hook_provider_bhvr.erl

View File

@ -22,6 +22,7 @@ option java_multiple_files = true;
option java_package = "io.emqx.exhook"; option java_package = "io.emqx.exhook";
option java_outer_classname = "EmqxExHookProto"; option java_outer_classname = "EmqxExHookProto";
// Proto package compatible, Don't need an updated version..
package emqx.exhook.v1; package emqx.exhook.v1;
service HookProvider { service HookProvider {
@ -76,6 +77,8 @@ service HookProvider {
message ProviderLoadedRequest { message ProviderLoadedRequest {
BrokerInfo broker = 1; BrokerInfo broker = 1;
RequestMeta meta = 2;
} }
message LoadedResponse { message LoadedResponse {
@ -83,7 +86,11 @@ message LoadedResponse {
repeated HookSpec hooks = 1; repeated HookSpec hooks = 1;
} }
message ProviderUnloadedRequest { } message ProviderUnloadedRequest {
RequestMeta meta = 1;
}
message ClientConnectRequest { message ClientConnectRequest {
@ -93,6 +100,8 @@ message ClientConnectRequest {
// //
// It should be empty on MQTT v3.1.1/v3.1 or others protocol // It should be empty on MQTT v3.1.1/v3.1 or others protocol
repeated Property props = 2; repeated Property props = 2;
RequestMeta meta = 3;
} }
message ClientConnackRequest { message ClientConnackRequest {
@ -102,11 +111,15 @@ message ClientConnackRequest {
string result_code = 2; string result_code = 2;
repeated Property props = 3; repeated Property props = 3;
RequestMeta meta = 4;
} }
message ClientConnectedRequest { message ClientConnectedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
RequestMeta meta = 2;
} }
message ClientDisconnectedRequest { message ClientDisconnectedRequest {
@ -114,6 +127,8 @@ message ClientDisconnectedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
string reason = 2; string reason = 2;
RequestMeta meta = 3;
} }
message ClientAuthenticateRequest { message ClientAuthenticateRequest {
@ -121,6 +136,8 @@ message ClientAuthenticateRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
bool result = 2; bool result = 2;
RequestMeta meta = 3;
} }
message ClientCheckAclRequest { message ClientCheckAclRequest {
@ -139,6 +156,8 @@ message ClientCheckAclRequest {
string topic = 3; string topic = 3;
bool result = 4; bool result = 4;
RequestMeta meta = 5;
} }
message ClientSubscribeRequest { message ClientSubscribeRequest {
@ -148,6 +167,8 @@ message ClientSubscribeRequest {
repeated Property props = 2; repeated Property props = 2;
repeated TopicFilter topic_filters = 3; repeated TopicFilter topic_filters = 3;
RequestMeta meta = 4;
} }
message ClientUnsubscribeRequest { message ClientUnsubscribeRequest {
@ -157,11 +178,15 @@ message ClientUnsubscribeRequest {
repeated Property props = 2; repeated Property props = 2;
repeated TopicFilter topic_filters = 3; repeated TopicFilter topic_filters = 3;
RequestMeta meta = 4;
} }
message SessionCreatedRequest { message SessionCreatedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
RequestMeta meta = 2;
} }
message SessionSubscribedRequest { message SessionSubscribedRequest {
@ -171,6 +196,8 @@ message SessionSubscribedRequest {
string topic = 2; string topic = 2;
SubOpts subopts = 3; SubOpts subopts = 3;
RequestMeta meta = 4;
} }
message SessionUnsubscribedRequest { message SessionUnsubscribedRequest {
@ -178,21 +205,29 @@ message SessionUnsubscribedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
string topic = 2; string topic = 2;
RequestMeta meta = 3;
} }
message SessionResumedRequest { message SessionResumedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
RequestMeta meta = 2;
} }
message SessionDiscardedRequest { message SessionDiscardedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
RequestMeta meta = 2;
} }
message SessionTakeoveredRequest { message SessionTakeoveredRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
RequestMeta meta = 2;
} }
message SessionTerminatedRequest { message SessionTerminatedRequest {
@ -200,11 +235,15 @@ message SessionTerminatedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
string reason = 2; string reason = 2;
RequestMeta meta = 3;
} }
message MessagePublishRequest { message MessagePublishRequest {
Message message = 1; Message message = 1;
RequestMeta meta = 2;
} }
message MessageDeliveredRequest { message MessageDeliveredRequest {
@ -212,6 +251,8 @@ message MessageDeliveredRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
Message message = 2; Message message = 2;
RequestMeta meta = 3;
} }
message MessageDroppedRequest { message MessageDroppedRequest {
@ -219,6 +260,8 @@ message MessageDroppedRequest {
Message message = 1; Message message = 1;
string reason = 2; string reason = 2;
RequestMeta meta = 3;
} }
message MessageAckedRequest { message MessageAckedRequest {
@ -226,6 +269,8 @@ message MessageAckedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
Message message = 2; Message message = 2;
RequestMeta meta = 3;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -405,3 +450,14 @@ message SubOpts {
// connection with a ClientID equal to the ClientID of the publishing // connection with a ClientID equal to the ClientID of the publishing
uint32 nl = 5; uint32 nl = 5;
} }
message RequestMeta {
string node = 1;
string version = 2;
string sysdescr = 3;
string cluster_name = 4;
}

View File

@ -30,6 +30,11 @@
, call_fold/3 , call_fold/3
]). ]).
-export([request_meta/0]).
-import(emqx_exhook_handler, [stringfy/1]).
%% TODO: move util functions to an independent module
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Mgmt APIs %% Mgmt APIs
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
@ -116,3 +121,10 @@ deny_action_result('message.publish', Msg) ->
%% TODO: Not support to deny a message %% TODO: Not support to deny a message
%% maybe we can put the 'allow_publish' into message header %% maybe we can put the 'allow_publish' into message header
Msg. Msg.
request_meta() ->
#{ node => stringfy(node())
, version => emqx_sys:version()
, sysdescr => emqx_sys:sysdescr()
, cluster_name => emqx_sys:cluster_name()
}.

View File

@ -288,6 +288,8 @@ stringfy(Term) when is_integer(Term) ->
integer_to_binary(Term); integer_to_binary(Term);
stringfy(Term) when is_atom(Term) -> stringfy(Term) when is_atom(Term) ->
atom_to_binary(Term, utf8); atom_to_binary(Term, utf8);
stringfy(Term) when is_list(Term) ->
list_to_binary(Term);
stringfy(Term) -> stringfy(Term) ->
unicode:characters_to_binary((io_lib:format("~0p", [Term]))). unicode:characters_to_binary((io_lib:format("~0p", [Term]))).

View File

@ -269,23 +269,24 @@ match_topic_filter(TopicName, TopicFilter) ->
-spec do_call(string(), atom(), map(), map()) -> {ok, map()} | {error, term()}. -spec do_call(string(), atom(), map(), map()) -> {ok, map()} | {error, term()}.
do_call(ChannName, Fun, Req, ReqOpts) -> do_call(ChannName, Fun, Req, ReqOpts) ->
NReq = Req#{meta => emqx_exhook:request_meta()},
Options = ReqOpts#{channel => ChannName}, Options = ReqOpts#{channel => ChannName},
?LOG(debug, "Call ~0p:~0p(~0p, ~0p)", [?PB_CLIENT_MOD, Fun, Req, Options]), ?LOG(debug, "Call ~0p:~0p(~0p, ~0p)", [?PB_CLIENT_MOD, Fun, NReq, Options]),
case catch apply(?PB_CLIENT_MOD, Fun, [Req, Options]) of case catch apply(?PB_CLIENT_MOD, Fun, [NReq, Options]) of
{ok, Resp, _Metadata} -> {ok, Resp, _Metadata} ->
?LOG(debug, "Response {ok, ~0p, ~0p}", [Resp, _Metadata]), ?LOG(debug, "Response {ok, ~0p, ~0p}", [Resp, _Metadata]),
{ok, Resp}; {ok, Resp};
{error, {Code, Msg}, _Metadata} -> {error, {Code, Msg}, _Metadata} ->
?LOG(error, "CALL ~0p:~0p(~0p, ~0p) response errcode: ~0p, errmsg: ~0p", ?LOG(error, "CALL ~0p:~0p(~0p, ~0p) response errcode: ~0p, errmsg: ~0p",
[?PB_CLIENT_MOD, Fun, Req, Options, Code, Msg]), [?PB_CLIENT_MOD, Fun, NReq, Options, Code, Msg]),
{error, {Code, Msg}}; {error, {Code, Msg}};
{error, Reason} -> {error, Reason} ->
?LOG(error, "CALL ~0p:~0p(~0p, ~0p) error: ~0p", ?LOG(error, "CALL ~0p:~0p(~0p, ~0p) error: ~0p",
[?PB_CLIENT_MOD, Fun, Req, Options, Reason]), [?PB_CLIENT_MOD, Fun, NReq, Options, Reason]),
{error, Reason}; {error, Reason};
{'EXIT', {Reason, Stk}} -> {'EXIT', {Reason, Stk}} ->
?LOG(error, "CALL ~0p:~0p(~0p, ~0p) throw an exception: ~0p, stacktrace: ~0p", ?LOG(error, "CALL ~0p:~0p(~0p, ~0p) throw an exception: ~0p, stacktrace: ~0p",
[?PB_CLIENT_MOD, Fun, Req, Options, Reason, Stk]), [?PB_CLIENT_MOD, Fun, NReq, Options, Reason, Stk]),
{error, Reason} {error, Reason}
end. end.