Class: PassengerDatadog

Inherits:
Object
  • Object
show all
Defined in:
lib/passenger_datadog.rb

Constant Summary collapse

GROUP_STATS =
%w(capacity_used processes_being_spawned enabled_process_count disabling_process_count disabled_process_count).freeze
PROCESS_STATS =
%w(processed sessions busyness concurrency cpu rss private_dirty pss swap real_memory vmsize).freeze

Class Method Summary collapse

Class Method Details

.runObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/passenger_datadog.rb', line 9

def run
  status = `passenger-status --show=xml`
  return if status.empty?

  statsd = Statsd.new

  statsd.batch do |s|
    # Good job Passenger 4.0.10. Return non xml in your xml output.
    status = status.split("\n")[3..-1].join("\n") unless status.start_with?('<?xml')
    parsed = Nokogiri::XML(status)

    pool_used = parsed.xpath('//process_count').text
    s.gauge('passenger.pool.used', pool_used)

    pool_max = parsed.xpath('//max').text
    s.gauge('passenger.pool.max', pool_max)

    request_queue = parsed.xpath('//supergroups/supergroup/group/get_wait_list_size').text
    s.gauge('passenger.request_queue', request_queue)

    parsed.xpath('//supergroups/supergroup/group').each do |group|
      GROUP_STATS.each do |stat|
        s.gauge("passenger.#{stat}", group.xpath(stat).text)
      end
    end

    parsed.xpath('//supergroups/supergroup/group/processes/process').each_with_index do |process, index|
      PROCESS_STATS.each do |stat|
        s.gauge("passenger.#{stat}", process.xpath(stat).text, :tags => ["passenger-process:#{index}"])
      end
    end
  end
end