summaryrefslogtreecommitdiff
path: root/deps/rabbitmq_management_agent
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2018-10-19 16:23:15 +0200
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2019-01-29 16:03:31 +0100
commitadbac7ddfc63d43c532758e934f4d80e221d82ea (patch)
treeffe3ca221d8adf01650a2480ba0142ea13bc177c /deps/rabbitmq_management_agent
parent1388df59de4f713f942dce4cd9f9a58bbdaec055 (diff)
downloadrabbitmq-server-git-adbac7ddfc63d43c532758e934f4d80e221d82ea.tar.gz
rabbit_mgmt_data: Convert several stats to RabbitMQ 3.7.x format if needed
I.e., if the `empty_basic_get_metric` feature flag is disabled, we remove the "get empty" queue metric from the slide, before returning it to the caller. [#159298729]
Diffstat (limited to 'deps/rabbitmq_management_agent')
-rw-r--r--deps/rabbitmq_management_agent/src/exometer_slide.erl10
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl27
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl49
-rw-r--r--deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl23
4 files changed, 105 insertions, 4 deletions
diff --git a/deps/rabbitmq_management_agent/src/exometer_slide.erl b/deps/rabbitmq_management_agent/src/exometer_slide.erl
index 2b1429b648..6eb52c8eff 100644
--- a/deps/rabbitmq_management_agent/src/exometer_slide.erl
+++ b/deps/rabbitmq_management_agent/src/exometer_slide.erl
@@ -55,6 +55,7 @@
to_list/2,
to_list/3,
foldl/5,
+ map/2,
to_normalized_list/5]).
-export([timestamp/0,
@@ -339,6 +340,15 @@ foldl(Now, Start0, Fun, Acc, #slide{max_n = _MaxN, buf2 = _Buf2,
interval = _Interval} = Slide) ->
lists:foldl(Fun, Acc, element(2, to_list_from(Now, Start0, Slide)) ++ [last]).
+map(Fun, #slide{buf1 = Buf1, buf2 = Buf2, total = Total} = Slide) ->
+ BufFun = fun({Timestamp, Value}) ->
+ {Timestamp, Fun(Value)}
+ end,
+ MappedBuf1 = lists:map(BufFun, Buf1),
+ MappedBuf2 = lists:map(BufFun, Buf2),
+ MappedTotal = Fun(Total),
+ Slide#slide{buf1 = MappedBuf1, buf2 = MappedBuf2, total = MappedTotal}.
+
maybe_add_last_sample(_Now, #slide{total = T, n = N,
buf1 = [{_, T} | _] = Buf1}) ->
{N, Buf1};
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl
index 72690188fd..c6d26ba76a 100644
--- a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data.erl
@@ -11,7 +11,7 @@
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is GoPivotal, Inc.
-%% Copyright (c) 2016 Pivotal Software, Inc. All rights reserved.
+%% Copyright (c) 2016-2018 Pivotal Software, Inc. All rights reserved.
%%
-module(rabbit_mgmt_data).
@@ -345,7 +345,8 @@ lookup_smaller_sample(Table, Id) ->
[] ->
not_found;
[{_, Slide}] ->
- exometer_slide:optimize(Slide)
+ Slide1 = exometer_slide:optimize(Slide),
+ maybe_convert_for_compatibility(Table, Slide1)
end.
-spec lookup_samples(atom(), any(), #range{}) -> maybe_slide().
@@ -354,7 +355,8 @@ lookup_samples(Table, Id, Range) ->
[] ->
not_found;
[{_, Slide}] ->
- exometer_slide:optimize(Slide)
+ Slide1 = exometer_slide:optimize(Slide),
+ maybe_convert_for_compatibility(Table, Slide1)
end.
lookup_all(Table, Ids, SecondKey) ->
@@ -370,9 +372,26 @@ lookup_all(Table, Ids, SecondKey) ->
[] ->
not_found;
_ ->
- exometer_slide:sum(Slides, empty(Table, 0))
+ Slide = exometer_slide:sum(Slides, empty(Table, 0)),
+ maybe_convert_for_compatibility(Table, Slide)
end.
+maybe_convert_for_compatibility(Table, Slide)
+ when Table =:= channel_queue_stats_deliver_stats orelse
+ Table =:= channel_stats_deliver_stats orelse
+ Table =:= queue_stats_deliver_stats orelse
+ Table =:= vhost_stats_deliver_stats ->
+ ConversionNeeded = rabbit_feature_flags:is_disabled(
+ empty_basic_get_metric),
+ case ConversionNeeded of
+ false ->
+ Slide;
+ true ->
+ rabbit_mgmt_data_compat:drop_get_empty_queue_metric(Slide)
+ end;
+maybe_convert_for_compatibility(_, Slide) ->
+ Slide.
+
get_table_keys(Table, Id0) ->
ets:select(Table, match_spec_keys(Id0)).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl
new file mode 100644
index 0000000000..9d48e1f336
--- /dev/null
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_data_compat.erl
@@ -0,0 +1,49 @@
+%% The contents of this file are subject to the Mozilla Public License
+%% Version 1.1 (the "License"); you may not use this file except in
+%% compliance with the License. You may obtain a copy of the License at
+%% http://www.mozilla.org/MPL/
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+%% License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% The Original Code is RabbitMQ.
+%%
+%% The Initial Developer of the Original Code is GoPivotal, Inc.
+%% Copyright (c) 2018 Pivotal Software, Inc. All rights reserved.
+%%
+
+-module(rabbit_mgmt_data_compat).
+
+-export([fill_get_empty_queue_metric/1,
+ drop_get_empty_queue_metric/1]).
+
+fill_get_empty_queue_metric(Slide) ->
+ exometer_slide:map(
+ fun
+ (Value) when is_tuple(Value) andalso size(Value) =:= 8 ->
+ Value;
+ (Value) when is_tuple(Value) andalso size(Value) =:= 7 ->
+ %% We want to remote the last element, which is
+ %% the count of basic.get on empty queues.
+ list_to_tuple(
+ tuple_to_list(Value) ++ [0]);
+ (Value) ->
+ Value
+ end, Slide).
+
+drop_get_empty_queue_metric(Slide) ->
+ exometer_slide:map(
+ fun
+ (Value) when is_tuple(Value) andalso size(Value) =:= 8 ->
+ %% We want to remote the last element, which is
+ %% the count of basic.get on empty queues.
+ list_to_tuple(
+ lists:sublist(
+ tuple_to_list(Value), size(Value) - 1));
+ (Value) when is_tuple(Value) andalso size(Value) =:= 7 ->
+ Value;
+ (Value) ->
+ Value
+ end, Slide).
diff --git a/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl b/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl
new file mode 100644
index 0000000000..16b58dcb3f
--- /dev/null
+++ b/deps/rabbitmq_management_agent/src/rabbit_mgmt_ff.erl
@@ -0,0 +1,23 @@
+%% The contents of this file are subject to the Mozilla Public License
+%% Version 1.1 (the "License"); you may not use this file except in
+%% compliance with the License. You may obtain a copy of the License
+%% at http://www.mozilla.org/MPL/
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and
+%% limitations under the License.
+%%
+%% The Original Code is RabbitMQ.
+%%
+%% The Initial Developer of the Original Code is GoPivotal, Inc.
+%% Copyright (c) 2018 Pivotal Software, Inc. All rights reserved.
+%%
+
+-module(rabbit_mgmt_ff).
+
+-rabbit_feature_flag(
+ {empty_basic_get_metric,
+ #{desc => "Count AMQP `basic.get` on empty queues in stats",
+ stability => stable
+ }}).