refactor(exhook): move command use macro
This commit is contained in:
parent
02ed2148d7
commit
e83357895c
|
@ -46,7 +46,7 @@
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
|
||||||
-define(CMD_MOVE_FRONT, {front, <<>>}).
|
-define(CMD_MOVE_FRONT, front).
|
||||||
-define(CMD_MOVE_REAR, {rear, <<>>}).
|
-define(CMD_MOVE_REAR, rear).
|
||||||
-define(CMD_MOVE_BEFORE(Before), {before, Before}).
|
-define(CMD_MOVE_BEFORE(Before), {before, Before}).
|
||||||
-define(CMD_MOVE_AFTER(After), {'after', After}).
|
-define(CMD_MOVE_AFTER(After), {'after', After}).
|
||||||
|
|
|
@ -235,9 +235,9 @@ action_with_name(delete, #{bindings := #{name := Name}}) ->
|
||||||
|
|
||||||
move(post, #{bindings := #{name := Name}, body := #{<<"position">> := RawPosition}}) ->
|
move(post, #{bindings := #{name := Name}, body := #{<<"position">> := RawPosition}}) ->
|
||||||
case parse_position(RawPosition) of
|
case parse_position(RawPosition) of
|
||||||
{ok, {Position, Related}} ->
|
{ok, Position} ->
|
||||||
case emqx_exhook_mgr:update_config([exhook, servers],
|
case emqx_exhook_mgr:update_config([exhook, servers],
|
||||||
{move, Name, Position, Related}) of
|
{move, Name, Position}) of
|
||||||
{ok, ok} ->
|
{ok, ok} ->
|
||||||
{204};
|
{204};
|
||||||
{ok, not_found} ->
|
{ok, not_found} ->
|
||||||
|
@ -421,13 +421,13 @@ parse_position(<<"front">>) ->
|
||||||
{ok, ?CMD_MOVE_FRONT};
|
{ok, ?CMD_MOVE_FRONT};
|
||||||
parse_position(<<"rear">>) ->
|
parse_position(<<"rear">>) ->
|
||||||
{ok, ?CMD_MOVE_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:">>) ->
|
parse_position(<<"before:">>) ->
|
||||||
{error, invalid_position};
|
{error, invalid_position};
|
||||||
parse_position(<<"after:">>) ->
|
parse_position(<<"after:">>) ->
|
||||||
{error, invalid_position};
|
{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(_) ->
|
parse_position(_) ->
|
||||||
{error, invalid_position}.
|
{error, invalid_position}.
|
||||||
|
|
|
@ -74,10 +74,10 @@
|
||||||
-type server() :: server_options().
|
-type server() :: server_options().
|
||||||
-type server_options() :: map().
|
-type server_options() :: map().
|
||||||
|
|
||||||
-type move_direct() :: front
|
-type position() :: front
|
||||||
| rear
|
| rear
|
||||||
| before
|
| {before, binary()}
|
||||||
| 'after'.
|
| {'after', binary()}.
|
||||||
|
|
||||||
-type orders() :: #{server_name() => integer()}.
|
-type orders() :: #{server_name() => integer()}.
|
||||||
|
|
||||||
|
@ -157,8 +157,8 @@ pre_config_update(_, {delete, ToDelete}, OldConf) ->
|
||||||
{ok, lists:dropwhile(fun(#{<<"name">> := Name}) -> Name =:= ToDelete end,
|
{ok, lists:dropwhile(fun(#{<<"name">> := Name}) -> Name =:= ToDelete end,
|
||||||
OldConf)};
|
OldConf)};
|
||||||
|
|
||||||
pre_config_update(_, {move, Name, Position, Relate}, OldConf) ->
|
pre_config_update(_, {move, Name, Position}, OldConf) ->
|
||||||
case do_move(Name, Position, Relate, OldConf) of
|
case do_move(Name, Position, OldConf) of
|
||||||
not_found -> {error, not_found};
|
not_found -> {error, not_found};
|
||||||
NewConf -> {ok, NewConf}
|
NewConf -> {ok, NewConf}
|
||||||
end;
|
end;
|
||||||
|
@ -226,7 +226,7 @@ handle_call(list, _From, State = #{running := Running,
|
||||||
|
|
||||||
{reply, OrderServers, State};
|
{reply, OrderServers, State};
|
||||||
|
|
||||||
handle_call({update_config, {move, _Name, _Direct, _Related}, NewConfL},
|
handle_call({update_config, {move, _Name, _Position}, NewConfL},
|
||||||
_From,
|
_From,
|
||||||
State) ->
|
State) ->
|
||||||
Orders = reorder(NewConfL),
|
Orders = reorder(NewConfL),
|
||||||
|
@ -461,39 +461,39 @@ clean_reload_timer(Name, State = #{trefs := TRefs}) ->
|
||||||
State#{trefs := NTRefs}
|
State#{trefs := NTRefs}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec do_move(binary(), move_direct(), binary(), list(server_options())) ->
|
-spec do_move(binary(), position(), list(server_options())) ->
|
||||||
not_found | list(server_options()).
|
not_found | list(server_options()).
|
||||||
do_move(Name, Direct, ToName, ConfL) ->
|
do_move(Name, Position, ConfL) ->
|
||||||
move(ConfL, Name, Direct, ToName, []).
|
move(ConfL, Name, Position, []).
|
||||||
|
|
||||||
move([#{<<"name">> := Name} = Server | T], Name, Direct, ToName, HeadL) ->
|
move([#{<<"name">> := Name} = Server | T], Name, Position, HeadL) ->
|
||||||
move_to(Direct, ToName, Server, lists:reverse(HeadL) ++ T);
|
move_to(Position, Server, lists:reverse(HeadL) ++ T);
|
||||||
|
|
||||||
move([Server | T], Name, Direct, ToName, HeadL) ->
|
move([Server | T], Name, Position, HeadL) ->
|
||||||
move(T, Name, Direct, ToName, [Server | HeadL]);
|
move(T, Name, Position, [Server | HeadL]);
|
||||||
|
|
||||||
move([], _Name, _Direct, _ToName, _HeadL) ->
|
move([], _Name, _Position, _HeadL) ->
|
||||||
not_found.
|
not_found.
|
||||||
|
|
||||||
move_to(front, _, Server, ServerL) ->
|
move_to(?CMD_MOVE_FRONT, Server, ServerL) ->
|
||||||
[Server | ServerL];
|
[Server | ServerL];
|
||||||
|
|
||||||
move_to(rear, _, Server, ServerL) ->
|
move_to(?CMD_MOVE_REAR, Server, ServerL) ->
|
||||||
ServerL ++ [Server];
|
ServerL ++ [Server];
|
||||||
|
|
||||||
move_to(Direct, ToName, Server, ServerL) ->
|
move_to(Position, Server, ServerL) ->
|
||||||
move_to(ServerL, Direct, ToName, Server, []).
|
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];
|
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];
|
lists:reverse(HeadL) ++ [H, Server | T];
|
||||||
|
|
||||||
move_to([H | T], Direct, Name, Server, HeadL) ->
|
move_to([H | T], Position, Server, HeadL) ->
|
||||||
move_to(T, Direct, Name, Server, [H | HeadL]);
|
move_to(T, Position, Server, [H | HeadL]);
|
||||||
|
|
||||||
move_to([], _Direct, _Name, _Server, _HeadL) ->
|
move_to([], _Position, _Server, _HeadL) ->
|
||||||
not_found.
|
not_found.
|
||||||
|
|
||||||
-spec reorder(list(server_options())) -> orders().
|
-spec reorder(list(server_options())) -> orders().
|
||||||
|
|
Loading…
Reference in New Issue