feat(exhook): provide meta data in `RequestMeta`

This commit is contained in:
JimMoen 2022-04-22 14:56:33 +08:00
parent 9a1e9c1465
commit bbd843c68b
4 changed files with 96 additions and 17 deletions

View File

@ -50,7 +50,7 @@
```protobuff ```protobuff
syntax = "proto3"; syntax = "proto3";
package emqx.exhook.v1; package emqx.exhook.v2;
service HookProvider { service HookProvider {

View File

@ -16,13 +16,15 @@
syntax = "proto3"; syntax = "proto3";
option csharp_namespace = "Emqx.Exhook.V1"; option csharp_namespace = "Emqx.Exhook.V2";
option go_package = "emqx.io/grpc/exhook"; option go_package = "emqx.io/grpc/exhook";
option java_multiple_files = true; 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";
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 { service HookProvider {
@ -70,21 +72,21 @@ service HookProvider {
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// Request & Response // Request
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
message ProviderLoadedRequest { message ProviderLoadedRequest {
BrokerInfo broker = 1; BrokerInfo broker = 1;
RequestMeta meta = 2;
} }
message LoadedResponse { message ProviderUnloadedRequest {
repeated HookSpec hooks = 1; RequestMeta meta = 1;
} }
message ProviderUnloadedRequest { }
message ClientConnectRequest { message ClientConnectRequest {
ConnInfo conninfo = 1; ConnInfo conninfo = 1;
@ -93,6 +95,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 +106,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 +122,8 @@ message ClientDisconnectedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
string reason = 2; string reason = 2;
RequestMeta meta = 3;
} }
message ClientAuthenticateRequest { message ClientAuthenticateRequest {
@ -121,6 +131,8 @@ message ClientAuthenticateRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
bool result = 2; bool result = 2;
RequestMeta meta = 3;
} }
message ClientAuthorizeRequest { message ClientAuthorizeRequest {
@ -139,6 +151,8 @@ message ClientAuthorizeRequest {
string topic = 3; string topic = 3;
bool result = 4; bool result = 4;
RequestMeta meta = 5;
} }
message ClientSubscribeRequest { message ClientSubscribeRequest {
@ -148,6 +162,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 +173,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 +191,8 @@ message SessionSubscribedRequest {
string topic = 2; string topic = 2;
SubOpts subopts = 3; SubOpts subopts = 3;
RequestMeta meta = 4;
} }
message SessionUnsubscribedRequest { message SessionUnsubscribedRequest {
@ -178,21 +200,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 SessionTakenoverRequest { message SessionTakenoverRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
RequestMeta meta = 2;
} }
message SessionTerminatedRequest { message SessionTerminatedRequest {
@ -200,11 +230,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 +246,8 @@ message MessageDeliveredRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
Message message = 2; Message message = 2;
RequestMeta meta = 3;
} }
message MessageDroppedRequest { message MessageDroppedRequest {
@ -219,6 +255,8 @@ message MessageDroppedRequest {
Message message = 1; Message message = 1;
string reason = 2; string reason = 2;
RequestMeta meta = 3;
} }
message MessageAckedRequest { message MessageAckedRequest {
@ -226,13 +264,22 @@ message MessageAckedRequest {
ClientInfo clientinfo = 1; ClientInfo clientinfo = 1;
Message message = 2; 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 { message ValuedResponse {
@ -261,6 +308,14 @@ message ValuedResponse {
} }
} }
// no Response by other Requests
message EmptySuccess { }
//------------------------------------------------------------------------------
// Basic data types
//------------------------------------------------------------------------------
message BrokerInfo { message BrokerInfo {
string version = 1; string version = 1;
@ -272,6 +327,7 @@ message BrokerInfo {
string datetime = 4; string datetime = 4;
} }
message HookSpec { message HookSpec {
// The registered hooks name // The registered hooks name
@ -430,3 +486,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

@ -57,7 +57,8 @@
merge_responsed_bool/2, merge_responsed_bool/2,
merge_responsed_message/2, merge_responsed_message/2,
assign_to_message/2, assign_to_message/2,
clientinfo/1 clientinfo/1,
request_meta/0
]). ]).
-import( -import(
@ -455,3 +456,11 @@ merge_responsed_message(_Req, Resp) ->
ret('CONTINUE') -> ok; ret('CONTINUE') -> ok;
ret('STOP_AND_RETURN') -> stop. ret('STOP_AND_RETURN') -> stop.
request_meta() ->
#{
node => stringfy(node()),
version => emqx_sys:version(),
sysdescr => emqx_sys:sysdescr(),
cluster_name => emqx_sys:cluster_name()
}.

View File

@ -19,7 +19,9 @@
-include("emqx_exhook.hrl"). -include("emqx_exhook.hrl").
-include_lib("emqx/include/logger.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 %% Load/Unload
-export([ -export([
@ -362,14 +364,15 @@ match_topic_filter(TopicName, TopicFilter) ->
-spec do_call(binary(), atom(), atom(), map(), map()) -> {ok, map()} | {error, term()}. -spec do_call(binary(), atom(), atom(), map(), map()) -> {ok, map()} | {error, term()}.
do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) -> do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) ->
Options = ReqOpts#{channel => ChannName}, Options = ReqOpts#{channel => ChannName},
NReq = Req#{meta => emqx_exhook_handler:request_meta()},
?SLOG(debug, #{ ?SLOG(debug, #{
msg => "do_call", msg => "do_call",
module => ?PB_CLIENT_MOD, module => ?PB_CLIENT_MOD,
function => Fun, function => Fun,
req => Req, req => NReq,
options => Options 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} -> {ok, Resp, Metadata} ->
?SLOG(debug, #{msg => "do_call_ok", resp => Resp, metadata => Metadata}), ?SLOG(debug, #{msg => "do_call_ok", resp => Resp, metadata => Metadata}),
update_metrics(Hookpoint, ChannName, fun emqx_exhook_metrics:succeed/2), 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", msg => "exhook_call_error",
module => ?PB_CLIENT_MOD, module => ?PB_CLIENT_MOD,
function => Fun, function => Fun,
req => Req, req => NReq,
options => Options, options => Options,
code => Code, code => Code,
packet => Msg packet => Msg
@ -391,7 +394,7 @@ do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) ->
msg => "exhook_call_error", msg => "exhook_call_error",
module => ?PB_CLIENT_MOD, module => ?PB_CLIENT_MOD,
function => Fun, function => Fun,
req => Req, req => NReq,
options => Options, options => Options,
reason => Reason reason => Reason
}), }),
@ -402,7 +405,7 @@ do_call(ChannName, Hookpoint, Fun, Req, ReqOpts) ->
msg => "exhook_call_exception", msg => "exhook_call_exception",
module => ?PB_CLIENT_MOD, module => ?PB_CLIENT_MOD,
function => Fun, function => Fun,
req => Req, req => NReq,
options => Options, options => Options,
stacktrace => Stk stacktrace => Stk
}), }),