Commit Graph

213 Commits

Author SHA1 Message Date
Michael Klishin c7e8ab9b56 New command: version, closes #314 2019-02-14 15:10:22 +03:00
Daniil Fedotov 8bae6cd929 Add behaviour helpers.
Instead of calling function_exported? every time to access behaviour
functions, call CommandBehaviour.function.

Isolate all function defaults in the CommandBehaviour module.

Add a macro to define constant command functions.
2019-02-11 14:03:19 -05:00
Daniil Fedotov d6789e60f2 A new way to display basic usage.
Do not show additional parameters info.
List commands as names and descriptions.
Group commands in sections.

New behaviour callbacks:
help_section/0 - atom name of a group to put command to. Default is :other
description/0 - single line description of the command. Printed in the commands list

Sections ans descriptions are WIP.
2019-02-08 15:33:17 -05:00
Michael Klishin b452733d73 Improve error message produced by `rabbitmqctl shutdown`
References #309.
2019-02-07 04:24:13 +03:00
Michael Klishin 41148d2f4d Mention --longnames in the generic diagnostics message
Note that more specific errors are coming from
rabbit_nodes_common.
2019-02-05 21:11:00 +03:00
Luke Bakken 95e5b78af6 Output a friendly error if a long node name is used but --longnames not specified 2019-02-05 08:56:04 -08:00
Michael Klishin a392d8e432 This clause is no longer necessary 2019-02-03 22:01:29 +03:00
Michael Klishin 56ac8d1cf7 shutdown: correctly wrap badrpc responses in validate/2 2019-02-03 22:00:11 +03:00
Michael Klishin 0053f67485 Support bare --help
Note that there's a different between the case with no arguments
(exits with EX_USAGE) and --help (exits successfully).

Per discussion with the team.

Closes #307.
2019-02-01 19:47:09 +03:00
Daniil Fedotov 5e5f4d461c Make it possible to get command help by typing 'rabbitmqctl mycommand --help'
Add a new default switch `help`
Add an alias `?`

Make rabbitmqctl display command help if this option is true for known commands.
2019-01-30 16:47:18 -05:00
Michael Klishin 94b55d71fa Format with `gmake format` 2019-01-30 22:20:29 +03:00
Michael Klishin 7c44eeb0d9 Move get_formatter/2, get_printer/2 and friends to RabbitMQ.CLI.Core.Config
To avoid RabbitMQCtl being used as a library module and because
they both are effectively generic configurable settings.
2019-01-24 11:11:04 +03:00
Daniil Fedotov e6530d6799 Make it possible for formatters to define arguments.
Add new callbacks to formatter_behavior: switches/0 and aliases/0
Merge them with command switches and aliases on parsing.

There is an example switch in the table formatter, enabling header padding.
2019-01-23 18:04:12 -05:00
Michael Klishin 5c4ed6b912 Format generic error triplets 2019-01-23 10:44:19 +03:00
Michael Klishin 4bc3e51461 Introduce rabbitmq-diagnostics check[_local]_alarms
References #292.
2019-01-22 13:28:42 +03:00
Michael Klishin b6f4d75afc Update (c) year 2019-01-20 06:10:59 +03:00
Michael Klishin ac653965f4 Improve error message formatting for rabbitmq-plugins commands
There are two main types of errors that I see in practice:

 * Insufficient enabled plugins file permission (or the file does not exist)
 * Enabled plugins file used by CLI tools does not match that of
   the target node

[#162757498]
2018-12-19 15:54:23 +03:00
Luke Bakken b523093c3e Port Erlang/OTP node name code to Elixir
Follow-up to #278

Add another test case, fix bugs

Add another test

Start converting to new code

Node name related code is in NodeName module

Distribution not needed for Helpers tests

Add test for rabbit@localhost when longnames in use

No need to guess on domain in this spot

Fix behavior on OS X
2018-12-05 11:23:17 -08:00
Luke Bakken 1d878c79e1 Fix merge defaults test, fix warnings 2018-11-30 14:48:47 -08:00
Luke Bakken c8e766dec7 Add function to normalise :node option after distribution started
Fixes #278
2018-11-30 07:00:18 -08:00
Luke Bakken 8ab22299a8 Document --no-table-headers
Fixes #274

Switch no_table_headers to table_headers

update tests

Integrate --silent
2018-11-19 15:25:36 -08:00
Ayanda Dube c88cfd940d Reduce code footprint on aliases 2018-07-23 06:06:18 +01:00
Daniil Fedotov b5de2236ce Add a callback to control erlang distribution.
The callback cab be used to disable distribution (offline commands)
or to have command-specific node name and distribution parameters.
2017-12-06 18:10:11 +00:00
Daniil Fedotov 32cf46e5c8 Fix rabbitmq-plugins enable/disable/set behavior for --online flag.
If flag is set to `--online` the commands should fail if node is not
running.
If flag is not set, they should fallback to offline mode if the
node is not running.
This corresponds to the rabbitmq-plugins.8 manpage.

Made validation aware of online flag.
Define best_effort mode to fallback if node is not running.
Requires rabbitmq/rabbitmq-server#1433

Fixes #226
[#153184802]
2017-11-27 18:49:08 +00:00
Daniil Fedotov e34bfe2297 Merge branch 'master' into rabbitmq-cli-214-take-two 2017-08-14 14:40:35 +01:00
Daniil Fedotov 568874033d Run dialyzer tests. Fix warnings.
Some types were named wrongly (list(), map())
MapSet cannot be matched to be empty. `%MapSet{}` only matches the type.
2017-08-14 14:36:38 +01:00
Luke Bakken cb65a340d5 Add single quotes around commands given in output 2017-08-11 17:00:20 -07:00
Michael Klishin 6b007ab1cf Make sure we format errors here 2017-08-11 18:04:00 +03:00
Michael Klishin efe8725f3c Merge branch 'master' into rabbitmq-cli-214-take-two 2017-08-10 14:21:42 +03:00
Michael Klishin 2eda5ea31c Make sure *validation_error_output/2 functions are used correctly 2017-08-09 15:52:04 +03:00
Michael Klishin 0031c4fdf6 Make validate/2 and validate_execution_environment/2 use the same tuple tag
Per discussion with @hairyhum.
2017-08-09 01:11:14 +03:00
Michael Klishin c227843e32 Make validate_execution_environment/2 use a different tuple tag for failures
Per discussion with @hairyhum.
2017-08-08 18:29:04 +03:00
Diana Corbacho 9d6dfddb3e Set a timeout on list_queues and a warning if unresponsive ones are found
Related to rabbitmq-cli#207
2017-08-07 17:38:24 +02:00
Michael Klishin 8e9b114eac Fold execution environment validation into a single optional fn
While at it, move Ctl.Validators => Core.Validators.

If the function is not defined we skip validation. Note that
individual commands need to be revisited and refactored to use
this mechanism; this is yet to come.

Per discussion with @hairyhum and @lukebakken.
2017-08-04 18:40:17 +03:00
Michael Klishin d92b78b49e Simplify, explain 2017-08-04 15:20:57 +03:00
Michael Klishin 032482cec6 Factor in rabbit app state and execution env validation
This introduces two other "validation steps" that have little or nothing
to do with CLI argument validation.

Per discussion with @hairyhum.
2017-08-04 15:08:37 +03:00
Michael Klishin 9919700303 Inline validate_and_run_command/3 for greater flexibility
This way we can inject more "validation steps" between validate/2
return and command execution, such as checking whether the rabbit app
is running (or not running) on the remote node.

While at it, group functions that are used in a chain.
2017-08-04 14:09:37 +03:00
Michael Klishin a33b26105c Supress banners for machine readable format
Namely JSON and CSV.

Fixes #205.
2017-07-14 18:08:17 +03:00
Michael Klishin 3f21e0fac1 Make sure that command-provided defaults are available to output formatting fns 2017-07-13 15:46:31 +03:00
Michael Klishin 310ffe159e Wording 2017-07-04 22:41:32 +03:00
Michael Klishin ca20f8a0d6 Make CLI tools diagnostics message more detailed
Our current message is informative enough but it ends with a "nodedown".
Emperical evidence suggests that once a user sees it, they stop reading.
Providing a hint that there will be diagnostics output below is step 1.

Step 2 is improving the diagnostics section. It now

  * Calls out three most common groups of issues explicitly
  * Suggests what documentation guides can contain helpful information

There are rabbitmq-server and rabbitmq-common commits that make
similar improvements to the server-supplied part of the diagnostics
message.

Per discussion with the team.
2017-07-04 22:34:39 +03:00
Michael Klishin 88629421d1 Whitespace 2017-06-30 14:44:35 +03:00
Michael Klishin b7b5223a39 list_vhost_limits: handle errors before serialising results
Also update tests and format no_such_vhost errors in a more sensible
way.
2017-06-30 14:43:09 +03:00
Michael Klishin 31822baf8c Revert "Revert "Compile""
This reverts commit 7908b17f01.

Test failures were due to something tripping up test node start,
not the change in ec695461ab.
2017-06-16 17:55:31 +03:00
Michael Klishin 7908b17f01 Revert "Compile"
This reverts commit ec695461ab.

This introduced test failures.
2017-06-16 17:35:57 +03:00
Michael Klishin ec695461ab Compile 2017-06-16 17:34:29 +03:00
Diana Corbacho cb2b3bc667 Fix timed out message 2017-06-16 14:54:33 +01:00
Diana Corbacho dfa9827135 Use the output of multirpc to report the down or timed out nodes
Most commands do rpc's only to the target node, but join_cluster
triggers an rpc between nodes. If the rpc to the remote down returns
down/timeout, we must use that value to run the diagnostics.
Using the node from command options in diagnostics will report as down
the wrong node.

rabbitmq-cli#197
2017-06-16 12:41:11 +01:00
Daniil Fedotov 1641ecbc11 Improve wait command.
Do not call await_startup on rabbitmq node, instead do it on
rabbitmqctl node, so even if net_ticktime is low, it won't fail
with nodedown.
2017-06-08 18:15:21 +01:00
Daniil Fedotov b802fcdf87 Do not try to connect to the RabbitMQ node before executing command
Commands are supposed to return bardpc errors, which are handled by output,
so there is no need to connect to the node before calling the run function.
2017-06-07 16:21:53 +01:00
Daniil Fedotov 61eeab17c1 Callback for exec_command function to process output 2017-06-06 12:07:34 +01:00
Daniil Fedotov 769fe8e712 Better error management with stream outputs from list_ commands.
Fixed incorrect tuple matching.
Added support for error codes and messages for timeout with value.
2017-05-24 13:28:51 +01:00
Daniil Fedotov 60deb8514d Improve error reporting.
badrpc errors are handled in Rabbitmqctl module.
Report errors from node discovery
Add helpers to skip errors in formatters.
2017-05-24 12:08:03 +01:00
Daniil Fedotov 8ef4c404ab Do not import modules. Import only protocols and records.
Aliases is a convinient enough to reference elixir modules.
Imported functions can be confusing, especially mixed with aliases.
2017-04-05 11:59:54 +01:00
Daniil Fedotov 819d512038 Implement shutdown command 2017-04-04 19:23:50 +01:00
Daniil Fedotov 62a44ac641 Optimize rabbitmqctl startup.
Plugins dirs are added to ERL_LIBS by shell scripts, we try to load
enabled plugins first and scan plugins dir only if some of them
are not found.
When discovering plugins, we can load applications only for enabled ones.
EPMD can be started only after initial `net_kernel:start` call failed.
We don't need to discover all commands every time, only if a command is not
in the `rabbitmqctl` application modules.
[finishes #143025009]
2017-04-04 14:06:53 +01:00
Daniil Fedotov 04c1c2e2f9 Do not print "Command '' not found" for empty command 2017-01-25 15:24:47 +00:00
Daniil Fedotov a5857e13d8 Handle auto-completion line as argv, not a single argument
It's easier to detect a script name if passed as argv list.
Arguments can be parsed with quoted spaces (e.g. in directory path)
2017-01-24 14:40:31 +00:00
Daniil Fedotov 3871c4ccde Support autocompletion with different script names 2017-01-24 12:30:12 +00:00
Daniil Fedotov 6288d75472 Cleanup compiler warnings 2017-01-24 09:59:00 +00:00
Daniil Fedotov 2174446ff9 Auto complete command called with full path 2017-01-24 09:47:30 +00:00
Michael Klishin cbab77e34c Fix --auto-complete clauses
According to the completion script in rabbitmq/rabbitmq-server-release#14, the correct
way to invoke auto-completion is

    /path/to/rabbitmqctl --auto-complete [command prefix]

However, the above arguments were not matched by the existing
main heads.
2017-01-21 23:33:35 +03:00
Jean-Sébastien Pédron 5905f1c40a Update copyright line to year 2017 2017-01-10 15:42:40 +01:00
Daniil Fedotov 30b41ba267 Support start from common_test tests 2016-12-23 12:12:33 +00:00
Daniil Fedotov fc0ca12a91 Test commands suggestions 2016-12-06 12:19:25 +00:00
Daniil Fedotov 80dc953ee5 Suggest commands by Levenshtein distance 2016-12-05 18:59:58 +00:00
Michael Klishin cb41fe932d Unbreak with_distribution/1 2016-12-05 19:23:20 +03:00
Alexey Lebedeff 2d11e45625 Handle errors from distribution start attempts
Otherwise broken or misconfigured distribution is reported as an
unavailable broker node.
2016-12-05 17:51:22 +03:00
Daniil Fedotov c62d48380a Load command specific options from a single command 2016-11-30 16:51:59 +00:00
Michael Klishin c59b6c029f Make switches/0 and aliases/0 optional command callbacks
Fixes #120. Same as #124 but doesn't include any unrelated changes
and thus suffer from #126.
2016-11-22 16:11:25 +03:00
Michael Klishin e92022da11 Revert "Merge pull request #124 from rabbitmq/rabbitmq-cli-120"
This reverts commit c087a635c0, reversing
changes made to 59225a551d.

See https://github.com/rabbitmq/rabbitmq-cli/issues/126, which exposed
a serious flaw in the option parser split which was introduced
as part of #124.

Reopens #120.
2016-11-22 14:07:58 +03:00
Daniil Fedotov cc87a49f93 Make switches as aliases callbacks optional 2016-11-18 17:21:27 +00:00
Daniil Fedotov 59225a551d Remove `flags/0` callback. Remove command modules helpers from helpers to command_modules 2016-11-18 14:12:53 +00:00
Daniil Fedotov 36ac65d56a Remove dependencies 2016-11-15 16:14:22 +00:00
Daniil Fedotov ccb6bf116c Namespace refactoring 2016-11-14 17:52:08 +00:00
Daniil Fedotov 1dc8e90a70 Make tests happy 2016-11-10 17:40:43 +00:00
Daniil Fedotov 3c8e6d1ef7 Use seconds in timeout parameter. Better timeout error report 2016-11-10 14:53:59 +00:00
Daniil Fedotov ad90e60121 script name is overridable via argument 2016-11-08 14:21:31 +00:00
Daniil Fedotov b98470288d List plugins formatter 2016-11-08 14:19:11 +00:00
Daniil Fedotov 85d6868763 Make table formatter look like in the old CLI 2016-11-04 12:38:35 +00:00
Daniil Fedotov dcd831ec99 Correct IO device name 2016-11-04 11:12:14 +00:00
Daniil Fedotov 14d82eabdc Refactor error reporting to allow commands specify formatter 2016-11-04 11:11:03 +00:00
Daniil Fedotov 3f4abba717 Command specific formatters 2016-11-03 18:10:18 +00:00
Daniil Fedotov 4c13a51ac8 Reworking command outputs 2016-08-22 12:58:37 +01:00
Daniil Fedotov 0da30bd1d1 Help command return list of strings instead of printing them\ 2016-08-18 17:38:49 +01:00
Daniil Fedotov 35fc3d12cd Default output formatting and exit code selection. Inspect printer 2016-08-18 15:35:49 +01:00
Michael Klishin 1d911b4350 Delete a duplicate fn head 2016-08-14 08:07:19 +03:00
Michael Klishin cb209d834d Merge branch 'master' into rabbitmq-cli-rename-cluster-node-command
Conflicts:
	lib/rabbitmqctl.ex
2016-08-12 04:36:51 +03:00
Michael Klishin 0449004a6b Merge branch 'master' into rabbitmq-cli-change-cluster-node-type 2016-08-12 01:04:01 +03:00
Michael Klishin ad2b4627c7 Merge branch 'master' into rabbitmq-cli-9
Conflicts:
	lib/rabbitmq/cli/ctl/parser.ex
	lib/rabbitmqctl.ex
2016-08-11 11:52:54 +03:00
Daniil Fedotov 6f3f0854bd Rename auto complete option for consistency 2016-08-10 18:19:06 +01:00
Michael Klishin 31c3356c56 Use effective program name in help command output
Note that this solution is imperfect because
for tests the name of the tool is `mix`. But most
tests don't care.
2016-08-09 15:05:48 +03:00
Michael Klishin a06a4321d6 merge_defaults_defaults => merge_all_defaults 2016-08-08 21:46:47 +03:00
Daniil Fedotov 4d40649d44 Command auto completion 2016-07-28 17:46:37 +01:00
Daniil Fedotov 7b35c7c2cc More validation, error handling and tests 2016-07-27 11:48:24 +01:00
Daniil Fedotov f2c4986fcf Implementing rename_cluster_nodes command 2016-07-26 18:08:37 +01:00
Daniil Fedotov cd68b3ce9c Implement change_cluster_node_type command 2016-07-25 16:48:45 +01:00
Michael Klishin 70f486c27d Squash a few compilation warnings 2016-07-10 12:08:33 +03:00
Michael Klishin 941263e83c Eliminate several warnings 2016-06-26 22:47:37 +03:00
Daniil Fedotov 963f6a2ff9 tests for list plugins command 2016-06-23 10:50:01 +01:00