1%% This Source Code Form is subject to the terms of the Mozilla Public
2%% License, v. 2.0. If a copy of the MPL was not distributed with this
3%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
4%%
5%% Copyright (c) 2007-2021 VMware, Inc. or its affiliates.  All rights reserved.
6%%
7
8-type(event_type() :: queue_stats | queue_exchange_stats | vhost_stats
9                    | channel_queue_stats | channel_stats
10                    | channel_exchange_stats | exchange_stats
11                    | node_stats | node_node_stats | connection_stats).
12-type(type() :: deliver_get | fine_stats | queue_msg_rates | queue_msg_counts
13              | coarse_node_stats | coarse_node_node_stats | coarse_conn_stats
14              | process_stats).
15
16-type(table_name() :: atom()).
17
18-define(TABLES, [{connection_stats_coarse_conn_stats, set},
19                 {vhost_stats_coarse_conn_stats, set},
20                 {connection_created_stats, set},
21                 {connection_stats, set},
22                 {channel_created_stats, set},
23                 {channel_stats, set},
24                 {channel_stats_fine_stats, set},
25                 {channel_exchange_stats_fine_stats, set},
26                 {channel_queue_stats_deliver_stats, set},
27                 {vhost_stats_fine_stats, set},
28                 {queue_stats_deliver_stats, set},
29                 {vhost_stats_deliver_stats, set},
30                 {channel_stats_deliver_stats, set},
31                 {channel_process_stats, set},
32                 {queue_stats_publish, set},
33                 {queue_exchange_stats_publish, set},
34                 {exchange_stats_publish_out, set},
35                 {exchange_stats_publish_in, set},
36                 {consumer_stats, set},
37                 {queue_stats, set},
38                 {queue_msg_stats, set},
39                 {vhost_msg_stats, set},
40                 {queue_process_stats, set},
41                 {node_stats, set},
42                 {node_coarse_stats, set},
43                 {node_persister_stats, set},
44                 {node_node_stats, set},
45                 {node_node_coarse_stats, set},
46                 {queue_msg_rates, set},
47                 {vhost_msg_rates, set},
48                 {connection_churn_rates, set}]).
49
50-define(INDEX_TABLES, [consumer_stats_queue_index,
51                       consumer_stats_channel_index,
52                       channel_exchange_stats_fine_stats_exchange_index,
53                       channel_exchange_stats_fine_stats_channel_index,
54                       channel_queue_stats_deliver_stats_queue_index,
55                       channel_queue_stats_deliver_stats_channel_index,
56                       queue_exchange_stats_publish_queue_index,
57                       queue_exchange_stats_publish_exchange_index,
58                       node_node_coarse_stats_node_index]).
59
60-define(GC_EVENTS, [connection_closed, channel_closed, consumer_deleted,
61                    exchange_deleted, queue_deleted, vhost_deleted,
62                    node_node_deleted, channel_consumer_deleted]).
63
64-define(DELEGATE_PREFIX, "delegate_management_").
65
66%%------------------------------------------------------------------------------
67%% Only for documentation and testing purposes, so we keep track of the number and
68%% order of the metrics
69-define(connection_stats_coarse_conn_stats(Recv_oct, Send_oct, Reductions),
70        {Recv_oct, Send_oct, Reductions}).
71-define(vhost_stats_coarse_conn_stats(Recv_oct, Send_oct), {Recv_oct, Send_oct}).
72-define(connection_created_stats(Id, Name, Props), {Id, Name, Props}).
73-define(connection_stats(Id, Props), {Id, Props}).
74-define(channel_created_stats(Id, Name, Props), {Id, Name, Props}).
75-define(channel_consumer_created_stats(Queue, ChPid, ConsumerTag),
76        {Queue, {ChPid, ConsumerTag}}).
77-define(channel_stats(Id, Props), {Id, Props}).
78-define(channel_stats_fine_stats(Publish, Confirm, ReturnUnroutable, DropUnroutable),
79        {Publish, Confirm, ReturnUnroutable, DropUnroutable}).
80-define(channel_exchange_stats_fine_stats(Publish, Confirm, ReturnUnroutable, DropUnroutable),
81        {Publish, Confirm, ReturnUnroutable, DropUnroutable}).
82-define(channel_queue_stats_deliver_stats(Get, Get_no_ack, Deliver, Deliver_no_ack,
83                                          Redeliver, Ack, Deliver_get, Get_empty),
84        {Get, Get_no_ack, Deliver, Deliver_no_ack, Redeliver, Ack, Deliver_get,
85         Get_empty}).
86-define(vhost_stats_fine_stats(Publish, Confirm, ReturnUnroutable, DropUnroutable),
87        {Publish, Confirm, ReturnUnroutable, DropUnroutable}).
88-define(queue_stats_deliver_stats(Get, Get_no_ack, Deliver, Deliver_no_ack,
89                                  Redeliver, Ack, Deliver_get, Get_empty),
90        {Get, Get_no_ack, Deliver, Deliver_no_ack, Redeliver, Ack, Deliver_get,
91         Get_empty}).
92-define(vhost_stats_deliver_stats(Get, Get_no_ack, Deliver, Deliver_no_ack,
93                                  Redeliver, Ack, Deliver_get, Get_empty),
94        {Get, Get_no_ack, Deliver, Deliver_no_ack, Redeliver, Ack, Deliver_get,
95         Get_empty}).
96-define(channel_stats_deliver_stats(Get, Get_no_ack, Deliver, Deliver_no_ack,
97                                    Redeliver, Ack, Deliver_get, Get_empty),
98        {Get, Get_no_ack, Deliver, Deliver_no_ack, Redeliver, Ack, Deliver_get,
99         Get_empty}).
100-define(channel_process_stats(Reductions), {Reductions}).
101-define(queue_stats_publish(Publish), {Publish}).
102-define(queue_exchange_stats_publish(Publish), {Publish}).
103-define(exchange_stats_publish_out(Publish_out), {Publish_out}).
104-define(exchange_stats_publish_in(Publish_in), {Publish_in}).
105-define(consumer_stats(Id, Props), {Id, Props}).
106-define(queue_stats(Id, Props), {Id, Props}).
107-define(queue_msg_stats(Messages_ready, Messages_unacknowledged, Messages),
108        {Messages_ready, Messages_unacknowledged, Messages}).
109-define(vhost_msg_stats(Messages_ready, Messages_unacknowledged, Messages),
110        {Messages_ready, Messages_unacknowledged, Messages}).
111-define(queue_process_stats(Reductions), {Reductions}).
112-define(node_stats(Id, Props), {Id, Props}).
113-define(node_coarse_stats(Fd_used, Sockets_used, Mem_used, Disk_free, Proc_used,
114                          Gc_num, Gc_bytes_reclaimed, Context_switches),
115        {Fd_used, Sockets_used, Mem_used, Disk_free, Proc_used, Gc_num,
116         Gc_bytes_reclaimed, Context_switches}).
117-define(node_persister_stats(Io_read_count, Io_read_bytes, Io_read_avg_time, Io_write_count,
118                             Io_write_bytes, Io_write_avg_time, Io_sync_count, Io_sync_avg_time,
119                             Io_seek_count, Io_seek_avg_time, Io_reopen_count, Mnesia_ram_tx_count,
120                             Mnesia_disk_tx_count, Msg_store_read_count, Msg_store_write_count,
121                             Queue_index_journal_write_count, Queue_index_write_count,
122                             Queue_index_read_count, Io_file_handle_open_attempt_count,
123                             Io_file_handle_open_attempt_avg_time),
124        {Io_read_count, Io_read_bytes, Io_read_avg_time, Io_write_count, Io_write_bytes,
125         Io_write_avg_time, Io_sync_count, Io_sync_avg_time, Io_seek_count, Io_seek_avg_time,
126         Io_reopen_count, Mnesia_ram_tx_count, Mnesia_disk_tx_count, Msg_store_read_count,
127         Msg_store_write_count, Queue_index_journal_write_count, Queue_index_write_count,
128         Queue_index_read_count, Io_file_handle_open_attempt_count,
129         Io_file_handle_open_attempt_avg_time}).
130-define(node_node_stats(Send_bytes, Recv_bytes), {Send_bytes, Recv_bytes}).
131-define(node_node_coarse_stats(Send_bytes, Recv_bytes), {Send_bytes, Recv_bytes}).
132-define(queue_msg_rates(Disk_reads, Disk_writes), {Disk_reads, Disk_writes}).
133-define(vhost_msg_rates(Disk_reads, Disk_writes), {Disk_reads, Disk_writes}).
134-define(old_aggr_stats(Id, Stats), {Id, Stats}).
135-define(connection_churn_rates(Connection_created, Connection_closed, Channel_created,
136                               Channel_closed, Queue_declared, Queue_created,
137                               Queue_deleted),
138        {Connection_created, Connection_closed, Channel_created, Channel_closed,
139         Queue_declared, Queue_created, Queue_deleted}).
140
141-define(stats_per_table(Table),
142        case Table of
143            connection_stats_coarse_conn_stats ->
144                [recv_oct, send_oct, reductions];
145            vhost_stats_coarse_conn_stats ->
146                [recv_oct, send_oct];
147            T when T =:= channel_stats_fine_stats;
148                   T =:= channel_exchange_stats_fine_stats;
149                   T =:= vhost_stats_fine_stats ->
150                [publish, confirm, return_unroutable, drop_unroutable];
151            T when T =:= channel_queue_stats_deliver_stats;
152                   T =:= queue_stats_deliver_stats;
153                   T =:= vhost_stats_deliver_stats;
154                   T =:= channel_stats_deliver_stats ->
155                [get, get_no_ack, deliver, deliver_no_ack, redeliver, ack, deliver_get,
156                 get_empty];
157            T when T =:= channel_process_stats;
158                   T =:= queue_process_stats ->
159                [reductions];
160            T when T =:= queue_stats_publish;
161                   T =:= queue_exchange_stats_publish ->
162                [publish];
163            exchange_stats_publish_out ->
164                [publish_out];
165            exchange_stats_publish_in ->
166                [publish_in];
167            T when T =:= queue_msg_stats;
168                   T =:= vhost_msg_stats ->
169                [messages_ready, messages_unacknowledged, messages];
170            node_coarse_stats ->
171                [fd_used, sockets_used, mem_used, disk_free, proc_used, gc_num,
172                 gc_bytes_reclaimed, context_switches];
173            node_persister_stats ->
174                [io_read_count, io_read_bytes, io_read_avg_time, io_write_count,
175                 io_write_bytes, io_write_avg_time, io_sync_count, io_sync_avg_time,
176                 io_seek_count, io_seek_avg_time, io_reopen_count, mnesia_ram_tx_count,
177                 mnesia_disk_tx_count, msg_store_read_count, msg_store_write_count,
178                 queue_index_journal_write_count, queue_index_write_count,
179                 queue_index_read_count, io_file_handle_open_attempt_count,
180                 io_file_handle_open_attempt_avg_time];
181            node_node_coarse_stats ->
182                [send_bytes, recv_bytes];
183            T when T =:= queue_msg_rates;
184                   T =:= vhost_msg_rates ->
185                [disk_reads, disk_writes];
186            T when T =:= connection_churn_rates ->
187                [connection_created, connection_closed, channel_created, channel_closed, queue_declared, queue_created, queue_deleted]
188        end).
189%%------------------------------------------------------------------------------
190