New channel metric: dropped unroutable messages

Part of rabbitmq/rabbitmq-server#1904.

[#165548314]
This commit is contained in:
Michael Klishin 2019-04-23 23:25:26 +03:00
parent 470d80d0a4
commit cc5e931377
4 changed files with 36 additions and 15 deletions

View File

@ -84,16 +84,16 @@
-define(channel_consumer_created_stats(Queue, ChPid, ConsumerTag),
{Queue, {ChPid, ConsumerTag}}).
-define(channel_stats(Id, Props), {Id, Props}).
-define(channel_stats_fine_stats(Publish, Confirm, Return_unroutable),
{Publish, Confirm, Return_unroutable}).
-define(channel_exchange_stats_fine_stats(Publish, Confirm, Return_unroutable),
{Publish, Confirm, Return_unroutable}).
-define(channel_stats_fine_stats(Publish, Confirm, ReturnUnroutable, DropUnroutable),
{Publish, Confirm, ReturnUnroutable, DropUnroutable}).
-define(channel_exchange_stats_fine_stats(Publish, Confirm, ReturnUnroutable, DropUnroutable),
{Publish, Confirm, ReturnUnroutable, DropUnroutable}).
-define(channel_queue_stats_deliver_stats(Get, Get_no_ack, Deliver, Deliver_no_ack,
Redeliver, Ack, Deliver_get, Get_empty),
{Get, Get_no_ack, Deliver, Deliver_no_ack, Redeliver, Ack, Deliver_get,
Get_empty}).
-define(vhost_stats_fine_stats(Publish, Confirm, Return_unroutable),
{Publish, Confirm, Return_unroutable}).
-define(vhost_stats_fine_stats(Publish, Confirm, ReturnUnroutable, DropUnroutable),
{Publish, Confirm, ReturnUnroutable, DropUnroutable}).
-define(queue_stats_deliver_stats(Get, Get_no_ack, Deliver, Deliver_no_ack,
Redeliver, Ack, Deliver_get, Get_empty),
{Get, Get_no_ack, Deliver, Deliver_no_ack, Redeliver, Ack, Deliver_get,
@ -156,7 +156,7 @@
T when T =:= channel_stats_fine_stats;
T =:= channel_exchange_stats_fine_stats;
T =:= vhost_stats_fine_stats ->
[publish, confirm, return_unroutable];
[publish, confirm, return_unroutable, drop_unroutable];
T when T =:= channel_queue_stats_deliver_stats;
T =:= queue_stats_deliver_stats;
T =:= vhost_stats_deliver_stats;

View File

@ -214,6 +214,12 @@ add_to_total({A0, A1}, {B0, B1}) ->
{B0 + A0, B1 + A1};
add_to_total({A0, A1, A2}, {B0, B1, B2}) ->
{B0 + A0, B1 + A1, B2 + A2};
add_to_total({A0, A1, A2, A3}, {B0, B1, B2, B3}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3};
add_to_total({A0, A1, A2, A3, A4}, {B0, B1, B2, B3, B4}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3, B4 + A4};
add_to_total({A0, A1, A2, A3, A4, A5}, {B0, B1, B2, B3, B4, B5}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3, B4 + A4, B5 + A5};
add_to_total({A0, A1, A2, A3, A4, A5, A6}, {B0, B1, B2, B3, B4, B5, B6}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3, B4 + A4, B5 + A5, B6 + A6};
add_to_total({A0, A1, A2, A3, A4, A5, A6, A7}, {B0, B1, B2, B3, B4, B5, B6, B7}) ->
@ -234,6 +240,12 @@ is_zeros({0, 0}) ->
true;
is_zeros({0, 0, 0}) ->
true;
is_zeros({0, 0, 0, 0}) ->
true;
is_zeros({0, 0, 0, 0, 0}) ->
true;
is_zeros({0, 0, 0, 0, 0, 0}) ->
true;
is_zeros({0, 0, 0, 0, 0, 0, 0}) ->
true;
is_zeros({0, 0, 0, 0, 0, 0, 0, 0, 0}) ->

View File

@ -472,12 +472,13 @@ second(Id) ->
{'_', Id}.
empty(Type, V) when Type =:= connection_stats_coarse_conn_stats;
Type =:= channel_stats_fine_stats;
Type =:= channel_exchange_stats_fine_stats;
Type =:= vhost_stats_fine_stats;
Type =:= queue_msg_stats;
Type =:= vhost_msg_stats ->
{V, V, V};
empty(Type, V) when Type =:= channel_stats_fine_stats;
Type =:= channel_exchange_stats_fine_stats;
Type =:= vhost_stats_fine_stats ->
{V, V, V, V};
empty(Type, V) when Type =:= channel_queue_stats_deliver_stats;
Type =:= queue_stats_deliver_stats;
Type =:= vhost_stats_deliver_stats;

View File

@ -254,14 +254,14 @@ aggregate_entry({Id, Metrics}, NextStats, Ops0,
Entry = ?channel_stats(Id, Ftd),
Ops = insert_op(channel_stats, Id, Entry, Ops0),
{NextStats, Ops, State};
aggregate_entry({{Ch, X} = Id, Publish0, Confirm, ReturnUnroutable, 0},
aggregate_entry({{Ch, X} = Id, Publish0, Confirm, ReturnUnroutable, DropUnroutable, 0},
NextStats, Ops0,
#state{table = channel_exchange_metrics,
policies = {BPolicies, DPolicies, GPolicies},
rates_mode = RatesMode,
lookup_exchange = ExchangeFun} = State) ->
Stats = ?channel_stats_fine_stats(Publish0, Confirm, ReturnUnroutable),
{Publish, _, _} = Diff = get_difference(Id, Stats, State),
Stats = ?channel_stats_fine_stats(Publish0, Confirm, ReturnUnroutable, DropUnroutable),
{Publish, _, _, _} = Diff = get_difference(Id, Stats, State),
Ops1 = insert_entry_ops(channel_stats_fine_stats, Ch, true, Diff, Ops0,
BPolicies),
@ -282,12 +282,12 @@ aggregate_entry({{Ch, X} = Id, Publish0, Confirm, ReturnUnroutable, 0},
Ops2
end,
{insert_old_aggr_stats(NextStats, Id, Stats), Ops3, State};
aggregate_entry({{_Ch, X} = Id, Publish0, Confirm, ReturnUnroutable, 1},
aggregate_entry({{_Ch, X} = Id, Publish0, Confirm, ReturnUnroutable, DropUnroutable, 1},
NextStats, Ops0,
#state{table = channel_exchange_metrics,
policies = {_BPolicies, DPolicies, GPolicies},
lookup_exchange = ExchangeFun} = State) ->
Stats = ?channel_stats_fine_stats(Publish0, Confirm, ReturnUnroutable),
Stats = ?channel_stats_fine_stats(Publish0, Confirm, ReturnUnroutable, DropUnroutable),
{Publish, _, _} = Diff = get_difference(Id, Stats, State),
Ops1 = insert_entry_ops(vhost_stats_fine_stats, vhost(X), true, Diff, Ops0,
GPolicies),
@ -612,6 +612,10 @@ sum_entry({A0, A1}, {B0, B1}) ->
{B0 + A0, B1 + A1};
sum_entry({A0, A1, A2}, {B0, B1, B2}) ->
{B0 + A0, B1 + A1, B2 + A2};
sum_entry({A0, A1, A2, A3}, {B0, B1, B2, B3}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3};
sum_entry({A0, A1, A2, A3, A4}, {B0, B1, B2, B3, B4}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3, B4 + A4};
sum_entry({A0, A1, A2, A3, A4, A5}, {B0, B1, B2, B3, B4, B5}) ->
{B0 + A0, B1 + A1, B2 + A2, B3 + A3, B4 + A4, B5 + A5};
sum_entry({A0, A1, A2, A3, A4, A5, A6}, {B0, B1, B2, B3, B4, B5, B6}) ->
@ -625,6 +629,10 @@ difference({A0, A1}, {B0, B1}) ->
{B0 - A0, B1 - A1};
difference({A0, A1, A2}, {B0, B1, B2}) ->
{B0 - A0, B1 - A1, B2 - A2};
difference({A0, A1, A2, A3}, {B0, B1, B2, B3}) ->
{B0 - A0, B1 - A1, B2 - A2, B3 - A3};
difference({A0, A1, A2, A3, A4}, {B0, B1, B2, B3, B4}) ->
{B0 - A0, B1 - A1, B2 - A2, B3 - A3, B4 - A4};
difference({A0, A1, A2, A3, A4, A5}, {B0, B1, B2, B3, B4, B5}) ->
{B0 - A0, B1 - A1, B2 - A2, B3 - A3, B4 - A4, B5 - A5};
difference({A0, A1, A2, A3, A4, A5, A6}, {B0, B1, B2, B3, B4, B5, B6}) ->