class NewRelicRMQPlugin::Agent::Agent

> Import the NewRelic Agent Base

Public Instance Methods

poll_cycle() click to toggle source
# File lib/newrelic-rmq-plugin/agent.rb, line 27
def poll_cycle
  # => Collect Per-Queue Metrics
  per_queue

  # => Collect Global Metrics
  global_metrics

  # => Collect Cluster Status
  cluster_status

  # => Reset
  @overview = nil
end

Private Instance Methods

cluster_status() click to toggle source

> Cluster Status Monitoring

# File lib/newrelic-rmq-plugin/agent.rb, line 78
def cluster_status
  report_metric 'Cluster Status/Partitioned', 'nodes', rmq_manager.nodes.count { |n| Array(n['partitions']).any? }
  report_metric 'Cluster Status/Stopped', 'nodes', rmq_manager.nodes.count { |n| !n['running'] }
end
global_metrics() click to toggle source

> Global Metrics

# File lib/newrelic-rmq-plugin/agent.rb, line 48
def global_metrics # rubocop: disable AbcSize
  report_metric 'Global Queue Size/Total', 'messages', overview['queue_totals']['messages']
  report_metric 'Global Queue Size Components/Ready', 'messages', overview['queue_totals']['messages_ready']
  report_metric 'Global Queue Size Components/Unacked', 'messages', overview['queue_totals']['messages_unacknowledged']

  report_metric 'Global Message Rate/Deliver', 'messages/sec', rate_for('deliver')
  report_metric 'Global Message Rate/Acknowledge', 'messages/sec', rate_for('ack')
  report_metric 'Global Message Rate/Return', 'messages/sec', rate_for('return_unroutable')

  overview['object_totals'].each do |obj|
    report_metric "Global Object Totals/#{obj[0].capitalize}", nil, obj[1]
  end
end
overview() click to toggle source

> Only pull this once per Poll Cycle

# File lib/newrelic-rmq-plugin/agent.rb, line 108
def overview
  @overview ||= rmq_manager.overview
end
per_queue() click to toggle source

> Per-Queue Metrics

# File lib/newrelic-rmq-plugin/agent.rb, line 63
def per_queue # rubocop: disable AbcSize
  rmq_manager.queues.each do |queue|
    queue_name = queue['name'].split('queue.').last

    report_metric "Queue Size/#{queue_name}/Total", 'messages', queue['messages']
    report_metric "Queue Size Components/#{queue_name}/Ready", 'messages', queue['messages_ready']
    report_metric "Queue Size Components/#{queue_name}/Unacked", 'messages', queue['messages_unacknowledged']

    report_metric "Message Rate/#{queue_name}/Deliver", 'messages/sec', rate_for('deliver', queue)
    report_metric "Message Rate/#{queue_name}/Acknowledge", 'messages/sec', rate_for('ack', queue)
    report_metric "Message Rate/#{queue_name}/Return", 'messages/sec', rate_for('return_unroutable', queue)
  end
end
rate_for(type, source = overview) click to toggle source

> Helper Methods

# File lib/newrelic-rmq-plugin/agent.rb, line 87
def rate_for(type, source = overview)
  msg_stats = source['message_stats']

  if msg_stats.is_a?(Hash)
    details = msg_stats["#{type}_details"]
    details ? details['rate'] : 0
  else
    0
  end
end
rmq_manager() click to toggle source

> Define the RabbitMQ Connection

# File lib/newrelic-rmq-plugin/agent.rb, line 103
def rmq_manager
  @rmq_manager ||= ::RabbitMQManager.new(management_api_url, verify: verify_ssl)
end