refactor(exhook): move command use macro

This commit is contained in:
JimMoen 2022-03-15 11:14:49 +08:00
parent 02ed2148d7
commit e83357895c
3 changed files with 32 additions and 32 deletions

View File

@ -46,7 +46,7 @@
-endif.
-define(CMD_MOVE_FRONT, {front, <<>>}).
-define(CMD_MOVE_REAR, {rear, <<>>}).
-define(CMD_MOVE_FRONT, front).
-define(CMD_MOVE_REAR, rear).
-define(CMD_MOVE_BEFORE(Before), {before, Before}).
-define(CMD_MOVE_AFTER(After), {'after', After}).

View File

@ -235,9 +235,9 @@ action_with_name(delete, #{bindings := #{name := Name}}) ->
move(post, #{bindings := #{name := Name}, body := #{<<"position">> := RawPosition}}) ->
case parse_position(RawPosition) of
{ok, {Position, Related}} ->
{ok, Position} ->
case emqx_exhook_mgr:update_config([exhook, servers],
{move, Name, Position, Related}) of
{move, Name, Position}) of
{ok, ok} ->
{204};
{ok, not_found} ->
@ -421,13 +421,13 @@ parse_position(<<"front">>) ->
{ok, ?CMD_MOVE_FRONT};
parse_position(<<"rear">>) ->
{ok, ?CMD_MOVE_REAR};
parse_position(<<"before:", Related/binary>>) ->
{ok, ?CMD_MOVE_BEFORE(Related)};
parse_position(<<"after:", Related/binary>>) ->
{ok, ?CMD_MOVE_AFTER(Related)};
parse_position(<<"before:">>) ->
{error, invalid_position};
parse_position(<<"after:">>) ->
{error, invalid_position};
parse_position(<<"before:", Related/binary>>) ->
{ok, ?CMD_MOVE_BEFORE(Related)};
parse_position(<<"after:", Related/binary>>) ->
{ok, ?CMD_MOVE_AFTER(Related)};
parse_position(_) ->
{error, invalid_position}.

View File

@ -74,10 +74,10 @@
-type server() :: server_options().
-type server_options() :: map().
-type move_direct() :: front
-type position() :: front
| rear
| before
| 'after'.
| {before, binary()}
| {'after', binary()}.
-type orders() :: #{server_name() => integer()}.
@ -157,8 +157,8 @@ pre_config_update(_, {delete, ToDelete}, OldConf) ->
{ok, lists:dropwhile(fun(#{<<"name">> := Name}) -> Name =:= ToDelete end,
OldConf)};
pre_config_update(_, {move, Name, Position, Relate}, OldConf) ->
case do_move(Name, Position, Relate, OldConf) of
pre_config_update(_, {move, Name, Position}, OldConf) ->
case do_move(Name, Position, OldConf) of
not_found -> {error, not_found};
NewConf -> {ok, NewConf}
end;
@ -226,7 +226,7 @@ handle_call(list, _From, State = #{running := Running,
{reply, OrderServers, State};
handle_call({update_config, {move, _Name, _Direct, _Related}, NewConfL},
handle_call({update_config, {move, _Name, _Position}, NewConfL},
_From,
State) ->
Orders = reorder(NewConfL),
@ -461,39 +461,39 @@ clean_reload_timer(Name, State = #{trefs := TRefs}) ->
State#{trefs := NTRefs}
end.
-spec do_move(binary(), move_direct(), binary(), list(server_options())) ->
-spec do_move(binary(), position(), list(server_options())) ->
not_found | list(server_options()).
do_move(Name, Direct, ToName, ConfL) ->
move(ConfL, Name, Direct, ToName, []).
do_move(Name, Position, ConfL) ->
move(ConfL, Name, Position, []).
move([#{<<"name">> := Name} = Server | T], Name, Direct, ToName, HeadL) ->
move_to(Direct, ToName, Server, lists:reverse(HeadL) ++ T);
move([#{<<"name">> := Name} = Server | T], Name, Position, HeadL) ->
move_to(Position, Server, lists:reverse(HeadL) ++ T);
move([Server | T], Name, Direct, ToName, HeadL) ->
move(T, Name, Direct, ToName, [Server | HeadL]);
move([Server | T], Name, Position, HeadL) ->
move(T, Name, Position, [Server | HeadL]);
move([], _Name, _Direct, _ToName, _HeadL) ->
move([], _Name, _Position, _HeadL) ->
not_found.
move_to(front, _, Server, ServerL) ->
move_to(?CMD_MOVE_FRONT, Server, ServerL) ->
[Server | ServerL];
move_to(rear, _, Server, ServerL) ->
move_to(?CMD_MOVE_REAR, Server, ServerL) ->
ServerL ++ [Server];
move_to(Direct, ToName, Server, ServerL) ->
move_to(ServerL, Direct, ToName, Server, []).
move_to(Position, Server, ServerL) ->
move_to(ServerL, Position, Server, []).
move_to([#{<<"name">> := Name} | _] = T, before, Name, Server, HeadL) ->
move_to([#{<<"name">> := Name} | _] = T, ?CMD_MOVE_BEFORE(Name), Server, HeadL) ->
lists:reverse(HeadL) ++ [Server | T];
move_to([#{<<"name">> := Name} = H | T], 'after', Name, Server, HeadL) ->
move_to([#{<<"name">> := Name} = H | T], ?CMD_MOVE_AFTER(Name), Server, HeadL) ->
lists:reverse(HeadL) ++ [H, Server | T];
move_to([H | T], Direct, Name, Server, HeadL) ->
move_to(T, Direct, Name, Server, [H | HeadL]);
move_to([H | T], Position, Server, HeadL) ->
move_to(T, Position, Server, [H | HeadL]);
move_to([], _Direct, _Name, _Server, _HeadL) ->
move_to([], _Position, _Server, _HeadL) ->
not_found.
-spec reorder(list(server_options())) -> orders().