feat(exhook): provide meta data in `RequestMeta`
This commit is contained in:
parent
9a1e9c1465
commit
bbd843c68b
|
@ -50,7 +50,7 @@
|
||||||
```protobuff
|
```protobuff
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package emqx.exhook.v1;
|
package emqx.exhook.v2;
|
||||||
|
|
||||||
service HookProvider {
|
service HookProvider {
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}.
|
||||||
|
|
|
@ -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
|
||||||
}),
|
}),
|
||||||
|
|
Loading…
Reference in New Issue