summaryrefslogtreecommitdiff
path: root/src/rabbit.erl
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2020-04-24 14:32:50 +0200
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2020-04-30 18:19:28 +0200
commit151f10300115f5f100a39659486d1d496e9b5028 (patch)
treeb45402329ac99a17d9d639fa5925ed5ca48a9027 /src/rabbit.erl
parent17085c8004e6aa9e4e5a839ecffd7fe42c90a314 (diff)
downloadrabbitmq-server-git-151f10300115f5f100a39659486d1d496e9b5028.tar.gz
rabbit: Report base and overridden product info separately
Now, `rabbit:product_info/0` will report the base name & version ("RabbitMQ" and its actual version) separately from the final product name & version (if any). If the product name & version were not overridden in the configuration or the environment, they will be missing from the product info return value. It allows caller to distinguish situations where the product name & version were set or not. An example use case is `rabbitmqctl status`: we want to report the product name & version only if they were overridden. If they were not, the "Product name" and "Product version" won't be added to the output. Only "RabbitMQ version" will be displayed. To help with the above, the map returned by `rabbit:product_info/0` also contains a flag, `product_overridden`, set to true if they were. Finally, the RabbitMQ version is often associated with the Erlang/OTP release. So include this into the returned map. This will save an additional RPC call if the remote caller is interested in both.
Diffstat (limited to 'src/rabbit.erl')
-rw-r--r--src/rabbit.erl104
1 files changed, 65 insertions, 39 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index e109c10c46..eabd2dff07 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -673,15 +673,11 @@ maybe_print_boot_progress(true, IterationsLeft) ->
status() ->
Version = base_product_version(),
- #{name := ProductName,
- version := ProductVersion} = product_info(),
S1 = [{pid, list_to_integer(os:getpid())},
%% The timeout value used is twice that of gen_server:call/2.
{running_applications, rabbit_misc:which_applications()},
{os, os:type()},
{rabbitmq_version, Version},
- {product_name, ProductName},
- {product_version, ProductVersion},
{erlang_version, erlang:system_info(system_version)},
{memory, rabbit_vm:memory()},
{alarms, alarms()},
@@ -723,7 +719,16 @@ status() ->
[]
end,
S7 = [{totals, Totals}],
- S1 ++ S2 ++ S3 ++ S4 ++ S5 ++ S6 ++ S7.
+ S8 = lists:filter(
+ fun
+ ({product_base_name, _}) -> true;
+ ({product_base_version, _}) -> true;
+ ({product_name, _}) -> true;
+ ({product_version, _}) -> true;
+ (_) -> false
+ end,
+ maps:to_list(product_info())),
+ S1 ++ S2 ++ S3 ++ S4 ++ S5 ++ S6 ++ S7 ++ S8.
alarms() ->
Alarms = rabbit_misc:with_exit_handler(rabbit_misc:const([]),
@@ -1283,17 +1288,25 @@ validate_msg_store_io_batch_size_and_credit_disc_bound(CreditDiscBound,
-spec product_name() -> string().
product_name() ->
- #{name := ProductName} = product_info(),
- ProductName.
+ case product_info() of
+ #{product_name := ProductName} -> ProductName;
+ #{product_base_name := BaseName} -> BaseName
+ end.
-spec product_version() -> string().
product_version() ->
- #{version := ProductVersion} = product_info(),
- ProductVersion.
+ case product_info() of
+ #{product_version := ProductVersion} -> ProductVersion;
+ #{product_base_version := BaseVersion} -> BaseVersion
+ end.
--spec product_info() -> #{name := string(),
- version := string()}.
+-spec product_info() -> #{product_base_name := string(),
+ product_base_version := string(),
+ product_overridden := boolean(),
+ product_name => string(),
+ product_version => string(),
+ otp_release := string()}.
product_info() ->
PTKey = {?MODULE, product},
@@ -1303,6 +1316,12 @@ product_info() ->
persistent_term:get(PTKey)
catch
error:badarg ->
+ BaseName = base_product_name(),
+ BaseVersion = base_product_version(),
+ Info0 = #{product_base_name => BaseName,
+ product_base_version => BaseVersion,
+ otp_release => rabbit_misc:otp_release()},
+
{NameFromEnv, VersionFromEnv} =
case rabbit_env:get_context() of
#{product_name := NFE,
@@ -1310,34 +1329,41 @@ product_info() ->
_ -> {undefined, undefined}
end,
- Info =
- if
- NameFromEnv =/= undefined andalso
- VersionFromEnv =/= undefined ->
- #{name => NameFromEnv,
- version => VersionFromEnv};
- true ->
- Name = case NameFromEnv of
- undefined ->
- string_from_app_env(
- product_name,
- base_product_name());
- _ ->
- NameFromEnv
- end,
- Version = case VersionFromEnv of
- undefined ->
- string_from_app_env(
- product_version,
- base_product_version());
- _ ->
- VersionFromEnv
- end,
- #{name => Name,
- version => Version}
- end,
- persistent_term:put(PTKey, Info),
- Info
+ Info1 = case NameFromEnv of
+ undefined ->
+ NameFromApp = string_from_app_env(
+ product_name,
+ undefined),
+ case NameFromApp of
+ undefined ->
+ Info0;
+ _ ->
+ Info0#{product_name => NameFromApp,
+ product_overridden => true}
+ end;
+ _ ->
+ Info0#{product_name => NameFromEnv,
+ product_overridden => true}
+ end,
+
+ Info2 = case VersionFromEnv of
+ undefined ->
+ VersionFromApp = string_from_app_env(
+ product_version,
+ undefined),
+ case VersionFromApp of
+ undefined ->
+ Info1;
+ _ ->
+ Info1#{product_version => VersionFromApp,
+ product_overridden => true}
+ end;
+ _ ->
+ Info1#{product_version => VersionFromEnv,
+ product_overridden => true}
+ end,
+ persistent_term:put(PTKey, Info2),
+ Info2
end.
string_from_app_env(Key, Default) ->