diff --git a/apps/emqx_exhook/include/emqx_exhook.hrl b/apps/emqx_exhook/include/emqx_exhook.hrl index dd86833dc..466146212 100644 --- a/apps/emqx_exhook/include/emqx_exhook.hrl +++ b/apps/emqx_exhook/include/emqx_exhook.hrl @@ -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}). diff --git a/apps/emqx_exhook/src/emqx_exhook_api.erl b/apps/emqx_exhook/src/emqx_exhook_api.erl index 30510a457..f2e51dc0f 100644 --- a/apps/emqx_exhook/src/emqx_exhook_api.erl +++ b/apps/emqx_exhook/src/emqx_exhook_api.erl @@ -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}. diff --git a/apps/emqx_exhook/src/emqx_exhook_mgr.erl b/apps/emqx_exhook/src/emqx_exhook_mgr.erl index 7c6859ded..e34a8c046 100644 --- a/apps/emqx_exhook/src/emqx_exhook_mgr.erl +++ b/apps/emqx_exhook/src/emqx_exhook_mgr.erl @@ -74,10 +74,10 @@ -type server() :: server_options(). -type server_options() :: map(). --type move_direct() :: front - | rear - | before - | 'after'. +-type position() :: front + | rear + | {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().