summaryrefslogtreecommitdiff
path: root/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl
diff options
context:
space:
mode:
Diffstat (limited to 'deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl')
-rw-r--r--deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl84
1 files changed, 84 insertions, 0 deletions
diff --git a/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl
new file mode 100644
index 0000000000..8d062c692c
--- /dev/null
+++ b/deps/rabbitmq_federation/src/Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand.erl
@@ -0,0 +1,84 @@
+%% This Source Code Form is subject to the terms of the Mozilla Public
+%% License, v. 2.0. If a copy of the MPL was not distributed with this
+%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
+%%
+%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved.
+%%
+
+-module('Elixir.RabbitMQ.CLI.Ctl.Commands.RestartFederationLinkCommand').
+
+-include("rabbit_federation.hrl").
+
+-behaviour('Elixir.RabbitMQ.CLI.CommandBehaviour').
+
+-export([
+ usage/0,
+ usage_additional/0,
+ usage_doc_guides/0,
+ flags/0,
+ validate/2,
+ merge_defaults/2,
+ banner/2,
+ run/2,
+ aliases/0,
+ output/2,
+ help_section/0,
+ description/0
+ ]).
+
+
+%%----------------------------------------------------------------------------
+%% Callbacks
+%%----------------------------------------------------------------------------
+usage() ->
+ <<"restart_federation_link <link_id>">>.
+
+usage_additional() ->
+ [
+ {<<"<link_id>">>, <<"ID of the link to restart">>}
+ ].
+
+usage_doc_guides() ->
+ [?FEDERATION_GUIDE_URL].
+
+help_section() ->
+ {plugin, federation}.
+
+description() ->
+ <<"Restarts a running federation link">>.
+
+flags() ->
+ [].
+
+validate([], _Opts) ->
+ {validation_failure, not_enough_args};
+validate([_, _ | _], _Opts) ->
+ {validation_failure, too_many_args};
+validate([_], _) ->
+ ok.
+
+merge_defaults(A, O) ->
+ {A, O}.
+
+banner([Link], #{node := Node}) ->
+ erlang:iolist_to_binary([<<"Restarting federation link ">>, Link, << " on node ">>,
+ atom_to_binary(Node, utf8)]).
+
+run([Id], #{node := Node}) ->
+ case rabbit_misc:rpc_call(Node, rabbit_federation_status, lookup, [Id]) of
+ {badrpc, _} = Error ->
+ Error;
+ not_found ->
+ {error, <<"Link with the given ID was not found">>};
+ Obj ->
+ Upstream = proplists:get_value(upstream, Obj),
+ Supervisor = proplists:get_value(supervisor, Obj),
+ rabbit_misc:rpc_call(Node, rabbit_federation_link_sup, restart,
+ [Supervisor, Upstream])
+ end.
+
+aliases() ->
+ [].
+
+output(Output, _Opts) ->
+ 'Elixir.RabbitMQ.CLI.DefaultOutput':output(Output).