diff --git a/lib/outboxer/message.rb b/lib/outboxer/message.rb index e19a6381..70691695 100644 --- a/lib/outboxer/message.rb +++ b/lib/outboxer/message.rb @@ -712,48 +712,17 @@ def rollup_counts(time: Time) def count_by_status ActiveRecord::Base.connection_pool.with_connection do result = Models::Message::Count.select( - "COALESCE(SUM(queued), 0) AS queued", - "COALESCE(SUM(publishing), 0) AS publishing", - "COALESCE(SUM(published), 0) AS published", - "COALESCE(SUM(failed), 0) AS failed" + "COALESCE(SUM(queued), 0) AS queued", + "COALESCE(SUM(publishing), 0) AS publishing", + "COALESCE(SUM(published), 0) AS published", + "COALESCE(SUM(failed), 0) AS failed", + "COALESCE(SUM(queued + publishing + published + failed), 0) AS total" ).take result.attributes.symbolize_keys.slice( - :queued, :publishing, :published, :failed - ) - end - end - - # Retrieves and calculates metrics related to message statuses, - # using the unified Counter.total for all counts. - # Latency and throughput are placeholders (0) until time-series metrics are implemented. - # - # @return [Hash] detailed metrics across various message statuses. - def metrics - totals = count_by_status - - metrics = { - all: { - count: { - total: totals.values.sum - } - } - } - - { - queued: :queued, - publishing: :publishing, - published: :published, - failed: :failed - }.each do |status, field| - metrics[status] = { - count: { total: totals[field].to_i }, - latency: 0, - throughput: 0 - } + :queued, :publishing, :published, :failed, :total + ).transform_values(&:to_i) end - - metrics end end end diff --git a/lib/outboxer/web.rb b/lib/outboxer/web.rb index 005edd67..5c6fb213 100755 --- a/lib/outboxer/web.rb +++ b/lib/outboxer/web.rb @@ -215,12 +215,12 @@ def time_ago_in_words(time) per_page: denormalised_query_params[:per_page], time_zone: denormalised_query_params[:time_zone]) - messages_metrics = Message.metrics + message_count_by_status = Message.count_by_status publishers = Publisher.all erb :home, locals: { - messages_metrics: messages_metrics, + message_count_by_status: message_count_by_status, denormalised_query_params: denormalised_query_params, normalised_query_params: normalised_query_params, normalised_query_string: normalised_query_string, @@ -253,12 +253,12 @@ def time_ago_in_words(time) per_page: denormalised_query_params[:per_page], time_zone: denormalised_query_params[:time_zone]) - messages_metrics = Message.metrics + message_count_by_status = Message.count_by_status publishers = Publisher.all erb :home, locals: { - messages_metrics: messages_metrics, + message_count_by_status: message_count_by_status, denormalised_query_params: denormalised_query_params, normalised_query_params: normalised_query_params, normalised_query_string: normalised_query_string, @@ -311,7 +311,7 @@ def time_ago_in_words(time) per_page: denormalised_query_params[:per_page], time_zone: denormalised_query_params[:time_zone]) - messages_metrics = Message.metrics + message_count_by_status = Message.count_by_status paginated_messages = Message.list( status: denormalised_query_params[:status], @@ -327,7 +327,7 @@ def time_ago_in_words(time) denormalised_query_params: denormalised_query_params) erb :messages, locals: { - messages_metrics: messages_metrics, + message_count_by_status: message_count_by_status, messages: paginated_messages[:messages], denormalised_query_params: denormalised_query_params, normalised_query_params: normalised_query_params, @@ -627,7 +627,7 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, per_page: denormalised_query_params[:per_page], time_zone: denormalised_query_params[:time_zone]) - messages_metrics = Message.metrics + message_count_by_status = Message.count_by_status message = Message.find_by_id(id: params[:id]) @@ -638,7 +638,7 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, denormalised_query_params: denormalised_query_params, normalised_query_params: normalised_query_params, normalised_query_string: normalised_query_string, - messages_metrics: messages_metrics, + message_count_by_status: message_count_by_status, message: message, messageable: messageable } @@ -654,7 +654,7 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, time_zone: params[:time_zone]) message = Message.find_by_id(id: params[:id]) - messages_metrics = Message.metrics + message_count_by_status = Message.count_by_status messageable_class = message[:messageable_type]&.safe_constantize messageable = messageable_class&.find_by_id(id: message[:messageable_id]) @@ -662,7 +662,7 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, erb :messageable, locals: { message: message, messageable: messageable, - messages_metrics: messages_metrics, + message_count_by_status: message_count_by_status, denormalised_query_params: denormalised_query_params } end @@ -740,10 +740,10 @@ def normalise_query_string(status: Message::LIST_STATUS_DEFAULT, publisher = Publisher.find_by_id(id: params[:id]) - messages_metrics = Message.metrics + message_count_by_status = Message.count_by_status erb :publisher, locals: { - messages_metrics: messages_metrics, + message_count_by_status: message_count_by_status, denormalised_query_params: denormalised_query_params, normalised_query_params: normalised_query_params, normalised_query_string: normalised_query_string, diff --git a/lib/outboxer/web/views/home.erb b/lib/outboxer/web/views/home.erb index bc3d7479..708d803c 100644 --- a/lib/outboxer/web/views/home.erb +++ b/lib/outboxer/web/views/home.erb @@ -123,9 +123,9 @@ <%= status %> - <%= Outboxer::Web.pretty_number(number: messages_metrics[status.to_sym][:count][:total]) %> - <%= Outboxer::Web.pretty_throughput(per_second: messages_metrics[status.to_sym][:throughput]) %> - <%= Outboxer::Web.pretty_duration_from_seconds(seconds: messages_metrics[status.to_sym][:latency]) %> + <%= Outboxer::Web.pretty_number(number: message_count_by_status[status.to_sym]) %> + <%= Outboxer::Web.pretty_throughput(per_second: 0) %> + <%= Outboxer::Web.pretty_duration_from_seconds(seconds: 0) %> <% end %> diff --git a/lib/outboxer/web/views/layout.erb b/lib/outboxer/web/views/layout.erb index d65deb26..83e46732 100644 --- a/lib/outboxer/web/views/layout.erb +++ b/lib/outboxer/web/views/layout.erb @@ -55,7 +55,7 @@
Outboxer - <%= Outboxer::Web.pretty_number(number: messages_metrics[:published][:count][:total]) %> + <%= Outboxer::Web.pretty_number(number: message_count_by_status[:published]) %>