fix(rule): add SQL test examples for user properties

Porting from v4.4
This commit is contained in:
Shawn 2022-03-10 16:00:00 +08:00
parent 247b14c95f
commit c673e55a47
1 changed files with 48 additions and 2 deletions

View File

@ -526,12 +526,15 @@ columns_with_exam('message.publish') ->
, {<<"flags">>, #{}}
, {<<"headers">>, undefined}
, {<<"publish_received_at">>, erlang:system_time(millisecond)}
, columns_example_props(pub_props)
, {<<"timestamp">>, erlang:system_time(millisecond)}
, {<<"node">>, node()}
];
columns_with_exam('message.delivered') ->
columns_message_ack_delivered('message.delivered');
columns_with_exam('message.acked') ->
[ columns_example_props(puback_props)
] ++
columns_message_ack_delivered('message.acked');
columns_with_exam('message.dropped') ->
[ {<<"event">>, 'message.dropped'}
@ -545,6 +548,7 @@ columns_with_exam('message.dropped') ->
, {<<"qos">>, 1}
, {<<"flags">>, #{}}
, {<<"publish_received_at">>, erlang:system_time(millisecond)}
, columns_example_props(pub_props)
, {<<"timestamp">>, erlang:system_time(millisecond)}
, {<<"node">>, node()}
];
@ -561,6 +565,7 @@ columns_with_exam('delivery.dropped') ->
, {<<"topic">>, <<"t/a">>}
, {<<"qos">>, 1}
, {<<"flags">>, #{}}
, columns_example_props(pub_props)
, {<<"publish_received_at">>, erlang:system_time(millisecond)}
, {<<"timestamp">>, erlang:system_time(millisecond)}
, {<<"node">>, node()}
@ -578,6 +583,7 @@ columns_with_exam('client.connected') ->
, {<<"clean_start">>, true}
, {<<"expiry_interval">>, 3600}
, {<<"is_bridge">>, false}
, columns_example_props(conn_props)
, {<<"connected_at">>, erlang:system_time(millisecond)}
, {<<"timestamp">>, erlang:system_time(millisecond)}
, {<<"node">>, node()}
@ -589,14 +595,17 @@ columns_with_exam('client.disconnected') ->
, {<<"username">>, <<"u_emqx">>}
, {<<"peername">>, <<"192.168.0.10:56431">>}
, {<<"sockname">>, <<"0.0.0.0:1883">>}
, columns_example_props(disconn_props)
, {<<"disconnected_at">>, erlang:system_time(millisecond)}
, {<<"timestamp">>, erlang:system_time(millisecond)}
, {<<"node">>, node()}
];
columns_with_exam('session.subscribed') ->
columns_message_sub_unsub('session.subscribed');
[ columns_example_props(sub_props)
] ++ columns_message_sub_unsub('session.subscribed');
columns_with_exam('session.unsubscribed') ->
columns_message_sub_unsub('session.unsubscribed');
[ columns_example_props(unsub_props)
] ++ columns_message_sub_unsub('session.unsubscribed');
columns_with_exam(<<"$bridges/mqtt">>) ->
[ {<<"event">>, <<"$bridges/mqtt">>}
, {<<"id">>, emqx_guid:to_hexstr(emqx_guid:gen())}
@ -606,6 +615,7 @@ columns_with_exam(<<"$bridges/mqtt">>) ->
, {<<"qos">>, 1}
, {<<"dup">>, false}
, {<<"retain">>, false}
, columns_example_props(pub_props)
%% the time that we receiced the message from remote broker
, {<<"message_received_at">>, erlang:system_time(millisecond)}
%% the time that the rule is triggered
@ -637,10 +647,42 @@ columns_message_ack_delivered(EventName) ->
, {<<"qos">>, 1}
, {<<"flags">>, #{}}
, {<<"publish_received_at">>, erlang:system_time(millisecond)}
, columns_example_props(pub_props)
, {<<"timestamp">>, erlang:system_time(millisecond)}
, {<<"node">>, node()}
].
columns_example_props(PropType) ->
Props = columns_example_props_specific(PropType),
UserProps = #{
'User-Property' => #{<<"foo">> => <<"bar">>},
'User-Property-Pairs' => [
#{key => <<"foo">>}, #{value => <<"bar">>}
]
},
{PropType, maps:merge(Props, UserProps)}.
columns_example_props_specific(pub_props) ->
#{ 'Payload-Format-Indicator' => 0
, 'Message-Expiry-Interval' => 30
};
columns_example_props_specific(puback_props) ->
#{ 'Reason-String' => <<"OK">>
};
columns_example_props_specific(conn_props) ->
#{ 'Session-Expiry-Interval' => 7200
, 'Receive-Maximum' => 32
};
columns_example_props_specific(disconn_props) ->
#{ 'Session-Expiry-Interval' => 7200
, 'Reason-String' => <<"Redirect to another server">>
, 'Server Reference' => <<"192.168.22.129">>
};
columns_example_props_specific(sub_props) ->
#{};
columns_example_props_specific(unsub_props) ->
#{}.
%%--------------------------------------------------------------------
%% Helper functions
%%--------------------------------------------------------------------
@ -694,6 +736,10 @@ printable_maps(Headers) ->
AccIn#{K => ntoa(V0)};
('User-Property', V0, AccIn) when is_list(V0) ->
AccIn#{
%% The 'User-Property' field is for the convenience of querying properties
%% using the '.' syntax, e.g. "SELECT 'User-Property'.foo as foo"
%% However, this does not allow duplicate property keys. To allow
%% duplicate keys, we have to use the 'User-Property-Pairs' field instead.
'User-Property' => maps:from_list(V0),
'User-Property-Pairs' => [#{
key => Key,