chore: refactor ms2qs function type

This commit is contained in:
JianBo He 2022-11-24 15:02:16 +08:00 committed by Zaiming (Stone) Shi
parent 9786a6c267
commit edb35c08a8
10 changed files with 41 additions and 20 deletions

View File

@ -274,9 +274,12 @@ list_users(QueryString, #{user_group := UserGroup}) ->
%%--------------------------------------------------------------------
%% QueryString to MatchSpec
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {QString, Fuzzy}) ->
{ms_from_qstring(QString), fuzzy_filter_fun(Fuzzy)}.
#{
match_spec => ms_from_qstring(QString),
fuzzy_fun => fuzzy_filter_fun(Fuzzy)
}.
%% Fuzzy username funcs
fuzzy_filter_fun([]) ->

View File

@ -300,9 +300,12 @@ list_users(QueryString, #{user_group := UserGroup}) ->
%%--------------------------------------------------------------------
%% QueryString to MatchSpec
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {QString, FuzzyQString}) ->
{ms_from_qstring(QString), fuzzy_filter_fun(FuzzyQString)}.
#{
match_spec => ms_from_qstring(QString),
fuzzy_fun => fuzzy_filter_fun(FuzzyQString)
}.
%% Fuzzy username funcs
fuzzy_filter_fun([]) ->

View File

@ -268,9 +268,9 @@ extra_sub_props(Props) ->
%%--------------------------------------------------------------------
%% QueryString to MatchSpec
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {Qs, Fuzzy}) ->
{qs2ms(Qs), fuzzy_filter_fun(Fuzzy)}.
#{match_spec => qs2ms(Qs), fuzzy_fun => fuzzy_filter_fun(Fuzzy)}.
qs2ms(Qs) ->
{MtchHead, Conds} = qs2ms(Qs, 2, {#{}, []}),

View File

@ -127,8 +127,9 @@ limit(Params) ->
{Key :: binary(), Type :: atom | binary | integer | timestamp | ip | ip_port}
].
-type query_to_match_spec_fun() ::
fun((list(), list()) -> {ets:match_spec(), fuzzy_filter_fun()}).
-type query_to_match_spec_fun() :: fun((list(), list()) -> match_spec_and_filter()).
-type match_spec_and_filter() :: #{match_spec := ets:match_spec(), fuzzy_fun := fuzzy_filter_fun()}.
-type fuzzy_filter_fun() :: undefined | {fun(), list()}.
@ -270,7 +271,7 @@ collect_total_from_tail_nodes(Nodes, QueryState, ResultAcc = #{total := TotalAcc
%% msfun := query_to_match_spec_fun()
%% }
init_query_state(Tab, QString, MsFun, _Meta = #{page := Page, limit := Limit}) ->
{Ms, FuzzyFun} = erlang:apply(MsFun, [Tab, QString]),
#{match_spec := Ms, fuzzy_fun := FuzzyFun} = erlang:apply(MsFun, [Tab, QString]),
%% assert FuzzyFun type
_ =
case FuzzyFun of

View File

@ -136,9 +136,9 @@ alarms(delete, _Params) ->
%%%==============================================================================================
%% internal
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {_Qs, _Fuzzy}) ->
{[{'$1', [], ['$1']}], undefined}.
#{match_spec => [{'$1', [], ['$1']}], fuzzy_fun => undefined}.
format_alarm(WhichNode, Alarm) ->
emqx_alarm:format(WhichNode, Alarm).

View File

@ -786,9 +786,12 @@ do_unsubscribe(ClientID, Topic) ->
%%--------------------------------------------------------------------
%% QueryString to Match Spec
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {QString, FuzzyQString}) ->
{qs2ms(QString), fuzzy_filter_fun(FuzzyQString)}.
#{
match_spec => qs2ms(QString),
fuzzy_fun => fuzzy_filter_fun(FuzzyQString)
}.
-spec qs2ms(list()) -> ets:match_spec().
qs2ms(Qs) ->

View File

@ -190,9 +190,9 @@ get_topic(Topic, _) ->
%% QueryString to MatchSpec
%%--------------------------------------------------------------------
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {Qs, Fuzzy}) ->
{gen_match_spec(Qs), fuzzy_filter_fun(Fuzzy)}.
#{match_spec => gen_match_spec(Qs), fuzzy_fun => fuzzy_filter_fun(Fuzzy)}.
gen_match_spec(Qs) ->
MtchHead = gen_match_spec(Qs, {{'_', '_'}, #{}}),

View File

@ -143,8 +143,12 @@ generate_topic(Params = #{topic := Topic}) ->
generate_topic(Params) ->
Params.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {Qs, _}) ->
{gen_match_spec(Qs, [{{route, '_', '_'}, [], ['$_']}]), undefined}.
#{
match_spec => gen_match_spec(Qs, [{{route, '_', '_'}, [], ['$_']}]),
fuzzy_fun => undefined
}.
gen_match_spec([], Res) ->
Res;

View File

@ -178,9 +178,12 @@ cluster_list(Params) ->
fun ?MODULE:format_delayed/2
).
-spec qs2ms(atom(), {list(), list()}) -> {ets:match_spec(), fun() | undefined}.
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Table, {_Qs, _Fuzzy}) ->
{[{'$1', [], ['$1']}], undefined}.
#{
match_spec => [{'$1', [], ['$1']}],
fuzzy_fun => undefined
}.
format_delayed(Delayed) ->
format_delayed(node(), Delayed).

View File

@ -553,12 +553,16 @@ filter_out_request_body(Conf) ->
],
maps:without(ExtraConfs, Conf).
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {Qs, Fuzzy}) ->
case lists:keytake(from, 1, Qs) of
false ->
{generate_match_spec(Qs), fuzzy_match_fun(Fuzzy)};
#{match_spec => generate_match_spec(Qs), fuzzy_fun => fuzzy_match_fun(Fuzzy)};
{value, {from, '=:=', From}, Ls} ->
{generate_match_spec(Ls), fuzzy_match_fun([{from, '=:=', From} | Fuzzy])}
#{
match_spec => generate_match_spec(Ls),
fuzzy_fun => fuzzy_match_fun([{from, '=:=', From} | Fuzzy])
}
end.
generate_match_spec(Qs) ->