Commit Graph

95 Commits

Author SHA1 Message Date
Michael Klishin f7d32d69f8 Introduce a new CLI tool (scope), rabbitmq-tanzu
For Tanzu (commercial) plugins to attach their commands to instead of
polluting rabbitmqctl.

Pair: @pjk25
(cherry picked from commit 6e0f2436fa)
2021-11-30 14:54:09 +00:00
Michael Klishin 040f8cc912
Replace a few more leftover MPLv1.1 license headers
Most files have been using the MPLv2 headers for months now.
These were detected by the OSL process.
2021-05-19 21:20:47 +03:00
Michael Klishin a5373d71d6
Make it possible to update virtual host tags
Currently they can only be specified at creation time
2021-05-01 21:48:50 +03:00
Jean-Sébastien Pédron cdcf602749
Switch from Lager to the new Erlang Logger API for logging
The configuration remains the same for the end-user. The only exception
is the log root directory: it is now set through the `log_root`
application env. variable in `rabbit`. People using the Cuttlefish-based
configuration file are not affected by this exception.

The main change is how the logging facility is configured. It now
happens in `rabbit_prelaunch_logging`. The `rabbit_lager` module is
removed.

The supported outputs remain the same: the console, text files, the
`amq.rabbitmq.log` exchange and syslog.

The message text format slightly changed: the timestamp is more precise
(now to the microsecond) and the level can be abbreviated to always be
4-character long to align all messages and improve readability. Here is
an example:

    2021-03-03 10:22:30.377392+01:00 [dbug] <0.229.0> == Prelaunch DONE ==
    2021-03-03 10:22:30.377860+01:00 [info] <0.229.0>
    2021-03-03 10:22:30.377860+01:00 [info] <0.229.0>  Starting RabbitMQ 3.8.10+115.g071f3fb on Erlang 23.2.5
    2021-03-03 10:22:30.377860+01:00 [info] <0.229.0>  Licensed under the MPL 2.0. Website: https://rabbitmq.com

The example above also shows that multiline messages are supported and
each line is prepended with the same prefix (the timestamp, the level
and the Erlang process PID).

JSON is also supported as a message format and now for any outputs.
Indeed, it is possible to use it with e.g. syslog or the exchange. Here
is an example of a JSON-formatted message sent to syslog:

    Mar  3 11:23:06 localhost rabbitmq-server[27908] <0.229.0> - {"time":"2021-03-03T11:23:06.998466+01:00","level":"notice","msg":"Logging: configured log handlers are now ACTIVE","meta":{"domain":"rabbitmq.prelaunch","file":"src/rabbit_prelaunch_logging.erl","gl":"<0.228.0>","line":311,"mfa":["rabbit_prelaunch_logging","configure_logger",1],"pid":"<0.229.0>"}}

For quick testing, the values accepted by the `$RABBITMQ_LOGS`
environment variables were extended:
  * `-` still means stdout
  * `-stderr` means stderr
  * `syslog:` means syslog on localhost
  * `exchange:` means logging to `amq.rabbitmq.log`

`$RABBITMQ_LOG` was also extended. It now accepts a `+json` modifier (in
addition to the existing `+color` one). With that modifier, messages are
formatted as JSON intead of plain text.

The `rabbitmqctl rotate_logs` command is deprecated. The reason is
Logger does not expose a function to force log rotation. However, it
will detect when a file was rotated by an external tool.

From a developer point of view, the old `rabbit_log*` API remains
supported, though it is now deprecated. It is implemented as regular
modules: there is no `parse_transform` involved anymore.

In the code, it is recommended to use the new Logger macros. For
instance, `?LOG_INFO(Format, Args)`. If possible, messages should be
augmented with some metadata. For instance (note the map after the
message):

    ?LOG_NOTICE("Logging: switching to configured handler(s); following "
                "messages may not be visible in this log output",
                #{domain => ?RMQLOG_DOMAIN_PRELAUNCH}),

Domains in Erlang Logger parlance are the way to categorize messages.
Some predefined domains, matching previous categories, are currently
defined in `rabbit_common/include/logging.hrl` or headers in the
relevant plugins for plugin-specific categories.

At this point, very few messages have been converted from the old
`rabbit_log*` API to the new macros. It can be done gradually when
working on a particular module or logging.

The Erlang builtin console/file handler, `logger_std_h`, has been forked
because it lacks date-based file rotation. The configuration of
date-based rotation is identical to Lager. Once the dust has settled for
this feature, the goal is to submit it upstream for inclusion in Erlang.
The forked module is calld `rabbit_logger_std_h` and is based
`logger_std_h` in Erlang 23.0.
2021-03-11 15:17:36 +01:00
Michael Klishin 83ae131dea
Refactor this test in attempt to help a scoping issue on Concourse 2021-02-01 23:09:07 +03:00
Michael Klishin e735025b2c
Use await_condition/2 in these tests 2021-02-01 20:19:39 +03:00
Michal Kuratczyk ea1f4a355a New command: `rabbitmqctl close_all_user_connections` 2021-02-01 16:04:16 +01:00
Michal Kuratczyk ce65586405
Allow "all" as a feature flag name
`rabbitmqctl enable_feature_flag all` enables all currently disabled feature flags.
While https://github.com/rabbitmq/rabbitmq-cli/issues/455 asked for
`--all`, I decided to just use "all" for consistency with
`rabbitmq-queues rebalance all`.

Closes rabbitmq/rabbitmq-cli#455

(cherry picked from commit af9e877848)
2020-11-17 14:17:35 +03:00
Luke Bakken 6232f18eed mix format 2020-10-12 10:07:04 -07:00
Jean-Sébastien Pédron 15eef0b52a test: Remove assertions around `mnesia_dir_not_found`
... when no Mnesia directory is specified. The reason is that the
default behavior changed: if the node is unavailable and no Mnesia
directory is configured, we use the default directory.
2020-10-12 17:42:50 +02:00
Michael Klishin c691658476 Squash a couple of compiler warnings 2020-09-22 05:55:56 +03:00
Michael Klishin 9b8b7436e8 Wording 2020-08-25 19:09:00 +03:00
Ayanda-D 30160430b2 Update license, ref: #447 2020-07-17 15:59:20 +01:00
Anupama Singh 128201baa6 New command added to list user limits 2020-07-17 15:59:20 +01:00
Ayanda-D dbbe62e8a4 Test case added for command to set both max-connections and max-channels
Clearing all user limits
Testcase to test clearing all limits for user
2020-07-17 15:59:20 +01:00
Anupama Singh d1301e5ce5 Test cases for setting and clearing user connection/channel limits 2020-07-17 15:59:20 +01:00
Michael Klishin 35103fe7da Introduce 'rabbitmqctl {suspend,resume}_listeners'
Not directly related to rabbitmq/rabbitmq-server#2321
but useful on its own. We've had requests for and discussions
about such commands in the past and now that Ranch supports
listener suspension, there aren't many reasons not to do it.
2020-07-14 03:52:01 +03:00
dcorbacho 679ca254f3 Switch to Mozilla Public License 2.0 (MPL 2.0) 2020-07-11 19:23:07 +01:00
Michael Klishin 31550672da Squash a compiler warning 2020-07-03 10:57:23 +07:00
Michael Klishin 2101043257 Introduce a first class autocomplete command
Currently we have a --auto-complete magic argument which
does not show up in `help` and requires its argument to be
explcitly -- separated from the actual flag, which is
counter-intuitive.

This introduces a new autocomplete command which is delegated
to by --auto-complete, much like --help is simply a special
way of invoking the `help` command.

Closes #439
2020-07-02 07:29:40 +03:00
Michael Klishin a98e38dd80 Introduce 'rabbitmqctl eval_file [file path]'
for evaluation of scripts in environments where standard input
redirection is not an option or problematic, e.g.
certain Windows environments.

Closes #438
2020-07-01 03:11:13 +03:00
Michael Klishin 0f1f6d2be7 'rabbitmqctl eval': accept expression to evaluate from stdin
References #438
2020-07-01 02:29:22 +03:00
Michael Klishin 921d349e37 Make --help, help usage help messages consistent
* `help` printed an "Error:" at the top for no reason
 * `help [command]` with a non-existent command did not offer a suggestion
   like an attempt to invoke a non-existent command would
 * Exit codes were not consistent
 * `help --list-commands` had line break issues

With this change,

  * `help` is consistent with --help
  * `help [command]` is consistent with `[command] --help`
  * If a command is not found, either during the execution flow
    or `help [commnad]`, we consistently attempt a Jaro distance suggestion
  * Successful or effectively successful exits from the `help`
    command do not produce any error messages at the top
2020-06-29 03:57:52 +03:00
Michael Klishin ca815978dd Drop a low importance test that only fails in one environment 2020-06-26 06:35:55 +03:00
Michael Klishin 37c9a5cb75 An attempt to fix a test failing only on Concourse 2020-06-26 06:26:25 +03:00
Michael Klishin ef329b88b1 rabbitmqctl export_definitions: ensure that parameter value is a map
otherwise it would be serialised as a list of pairs, which is
not the format the import path (or an operator) expects

Closes #435
2020-06-26 05:55:57 +03:00
Michael Klishin d11bd12a97 Make 'rabbitmqctl hipe_compile' a no-op
HiPE has been deprecated/only partially supported in Erlang 22
and will be removed completely in Erlang 24 next year.

Part of rabbitmq/rabbitmq-server#2392
2020-06-25 18:39:12 +03:00
Michael Klishin 92bb8dee18 Cosmetics 2020-06-04 04:42:49 +03:00
Michael Klishin 61a927ffb6 Brush up encode and decode commands 2020-05-21 09:37:08 +03:00
Michael Klishin bc95259d29 Adapt one more test 2020-05-21 08:13:46 +03:00
Luke Bakken a4669adf94 Update for version 2 of credentials-obfuscation
Part of rabbitmq/credentials-obfuscation#5
2020-05-20 18:54:40 -07:00
Michael Klishin 56da1bb71e Update test assertion expectations 2020-05-19 06:59:03 +03:00
Michael Klishin a3d60d35c5 Be less generous in empty whitespace use in setup_all functions 2020-03-24 19:08:00 +03:00
Michael Klishin 58b404650a WaitCommandTest: make sure distribution is started before used 2020-03-24 17:49:42 +03:00
Jean-Sébastien Pédron 0e15591bf5 Update copyright (year 2020) 2020-03-10 15:39:56 +01:00
Michael Klishin 73776fbf04 (c) bump 2019-12-29 05:50:26 +03:00
Jean-Sébastien Pédron 8a5ab87038 Load `rabbit_env` context to know about node configuration
The context is either initialized from the CLI's process environment or
from the remote node's own context.

This is required to e.g. find plugins or Mnesia directory.

In `code_path`, we don't append `ebin` anymore to the code path because
the `rabbit` application is now packaged as an .ez archive like plugins.
This simplifies the overall layout of the project.
2019-12-11 15:08:00 +01:00
Michael Klishin 01e950fd18 Make tests that mess with node or quorum state sequential
As most tests already are. It's highly unlikely that these
were meant to execute in parallel by design.
2019-12-11 14:51:10 +01:00
Michael Klishin b49b639add ctl export_definitions: fail validation w/o positional args 2019-11-19 00:41:30 +03:00
Michael Klishin 7c5933052e Finish ctl import_definitions 2019-11-16 06:46:26 +03:00
Michael Klishin 7c0718800f Introduce rabbitmqctl export_definitions [path] 2019-11-15 02:20:02 +03:00
Whitespirit0 ea2ace438c Update set_parameter test to match new output 2019-09-20 11:41:33 +02:00
Michael Klishin 4505b9a85f ctl add_vhost: suggest a comma-separated list of tags
For consistency with user tags.
2019-08-15 15:52:09 +10:00
Michael Klishin 2c6f5a1146 ctl add_vhost: make it possible to provide a description 2019-08-15 15:42:06 +10:00
Michael Klishin d84340959b Make sure the app is started in these tests 2019-07-18 18:50:43 +03:00
Michael Klishin 37450cc0dc Drop --[no-]interactive support
Per discussion with @lukebakken.

It serves no purpose and to make scripting with stream
redirection work we had to make validation changes that make
that flag irrelevant and even confusing.

The only downside of this behavior is that something like

rabbitmqctl add_user --silent "a-username"

(without a password or redirected stream, with suppressed output)
would "hang" waiting for stdin input. If --silent is omitted
there would be an input prompt, making it clearer what's going on.

Closes #365 with a different behavior from the originally suggested.
2019-07-10 19:08:19 -07:00
Michael Klishin b890fe787b Ditto for ctl change_password
Part of #365.
2019-07-11 00:21:11 +03:00
Michael Klishin 865af70a98 ctl add_user: make password optional, accept it via stdin
Part of #365.
2019-07-10 23:27:29 +03:00
Michael Klishin 358aec5840 ctl authenticate_user: make password optional, accept it via stdin
Part of #365.
2019-07-10 02:17:12 +03:00
Jean-Sébastien Pédron 5b6b9a7a69 test: Increase some timeouts so the testsuite passes on slow VMs 2019-05-14 17:51:42 +02:00