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 %% 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}) -> 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 username funcs
fuzzy_filter_fun([]) -> fuzzy_filter_fun([]) ->

View File

@ -300,9 +300,12 @@ list_users(QueryString, #{user_group := UserGroup}) ->
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% QueryString to MatchSpec %% 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}) -> 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 username funcs
fuzzy_filter_fun([]) -> fuzzy_filter_fun([]) ->

View File

@ -268,9 +268,9 @@ extra_sub_props(Props) ->
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% QueryString to MatchSpec %% 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(_Tab, {Qs, Fuzzy}) ->
{qs2ms(Qs), fuzzy_filter_fun(Fuzzy)}. #{match_spec => qs2ms(Qs), fuzzy_fun => fuzzy_filter_fun(Fuzzy)}.
qs2ms(Qs) -> qs2ms(Qs) ->
{MtchHead, Conds} = qs2ms(Qs, 2, {#{}, []}), {MtchHead, Conds} = qs2ms(Qs, 2, {#{}, []}),

View File

@ -127,8 +127,9 @@ limit(Params) ->
{Key :: binary(), Type :: atom | binary | integer | timestamp | ip | ip_port} {Key :: binary(), Type :: atom | binary | integer | timestamp | ip | ip_port}
]. ].
-type query_to_match_spec_fun() :: -type query_to_match_spec_fun() :: fun((list(), list()) -> match_spec_and_filter()).
fun((list(), list()) -> {ets:match_spec(), fuzzy_filter_fun()}).
-type match_spec_and_filter() :: #{match_spec := ets:match_spec(), fuzzy_fun := fuzzy_filter_fun()}.
-type fuzzy_filter_fun() :: undefined | {fun(), list()}. -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() %% msfun := query_to_match_spec_fun()
%% } %% }
init_query_state(Tab, QString, MsFun, _Meta = #{page := Page, limit := Limit}) -> 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 %% assert FuzzyFun type
_ = _ =
case FuzzyFun of case FuzzyFun of

View File

@ -136,9 +136,9 @@ alarms(delete, _Params) ->
%%%============================================================================================== %%%==============================================================================================
%% internal %% 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}) -> qs2ms(_Tab, {_Qs, _Fuzzy}) ->
{[{'$1', [], ['$1']}], undefined}. #{match_spec => [{'$1', [], ['$1']}], fuzzy_fun => undefined}.
format_alarm(WhichNode, Alarm) -> format_alarm(WhichNode, Alarm) ->
emqx_alarm:format(WhichNode, Alarm). emqx_alarm:format(WhichNode, Alarm).

View File

@ -786,9 +786,12 @@ do_unsubscribe(ClientID, Topic) ->
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% QueryString to Match Spec %% 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(_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(). -spec qs2ms(list()) -> ets:match_spec().
qs2ms(Qs) -> qs2ms(Qs) ->

View File

@ -190,9 +190,9 @@ get_topic(Topic, _) ->
%% QueryString to MatchSpec %% 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(_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) -> gen_match_spec(Qs) ->
MtchHead = gen_match_spec(Qs, {{'_', '_'}, #{}}), MtchHead = gen_match_spec(Qs, {{'_', '_'}, #{}}),

View File

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

View File

@ -178,9 +178,12 @@ cluster_list(Params) ->
fun ?MODULE:format_delayed/2 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}) -> qs2ms(_Table, {_Qs, _Fuzzy}) ->
{[{'$1', [], ['$1']}], undefined}. #{
match_spec => [{'$1', [], ['$1']}],
fuzzy_fun => undefined
}.
format_delayed(Delayed) -> format_delayed(Delayed) ->
format_delayed(node(), Delayed). format_delayed(node(), Delayed).

View File

@ -553,12 +553,16 @@ filter_out_request_body(Conf) ->
], ],
maps:without(ExtraConfs, Conf). maps:without(ExtraConfs, Conf).
-spec qs2ms(atom(), {list(), list()}) -> emqx_mgmt_api:match_spec_and_filter().
qs2ms(_Tab, {Qs, Fuzzy}) -> qs2ms(_Tab, {Qs, Fuzzy}) ->
case lists:keytake(from, 1, Qs) of case lists:keytake(from, 1, Qs) of
false -> 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} -> {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. end.
generate_match_spec(Qs) -> generate_match_spec(Qs) ->