From: Tom Hughes Date: Mon, 2 Jul 2018 20:29:03 +0000 (+0100) Subject: Rework passenger munin plugins to work with current passenger versions X-Git-Url: https://git.openstreetmap.org/chef.git/commitdiff_plain/cd339413a12e7f5795beb67ee780850b85748e4b Rework passenger munin plugins to work with current passenger versions --- diff --git a/cookbooks/munin/files/default/plugins/passenger_processes b/cookbooks/munin/files/default/plugins/passenger_processes index 0611ccc0e..eddcf558a 100755 --- a/cookbooks/munin/files/default/plugins/passenger_processes +++ b/cookbooks/munin/files/default/plugins/passenger_processes @@ -1,6 +1,11 @@ #!/usr/bin/env ruby require "English" +require "rexml/document" + +def passenger_status + @passenger_status ||= REXML::Document.new(`/usr/sbin/passenger-status --show=xml`) +end def output_config puts <<~CONFIG @@ -19,16 +24,19 @@ def output_config end def output_values - status = `/usr/sbin/passenger-status` - unless $CHILD_STATUS.success? - warn "failed executing passenger-status" - exit 1 + active = 0 + inactive = 0 + + passenger_status.get_elements("//process").each do |process| + if process.text("sessions").to_i.positive? + active += 1 + else + inactive += 1 + end end - status =~ /active\s+=\s+(\d+)/ - puts "active.value #{Regexp.last_match[1]}" - status =~ /inactive\s+=\s+(\d+)/ - puts "inactive.value #{Regexp.last_match[1]}" + puts "active.value #{active}" + puts "inactive.value #{inactive}" end if ARGV[0] == "config" diff --git a/cookbooks/munin/files/default/plugins/passenger_queues b/cookbooks/munin/files/default/plugins/passenger_queues index 0850ed273..5e5785796 100755 --- a/cookbooks/munin/files/default/plugins/passenger_queues +++ b/cookbooks/munin/files/default/plugins/passenger_queues @@ -1,6 +1,11 @@ #!/usr/bin/env ruby require "English" +require "rexml/document" + +def passenger_status + @passenger_status ||= REXML::Document.new(`/usr/sbin/passenger-status --show=xml`) +end def output_config puts <<~CONFIG @@ -9,18 +14,30 @@ def output_config graph_vlabel count global.label global + global.draw AREA CONFIG - exit 0 + + groups = passenger_status.get_elements("//supergroup").map do |supergroup| + supergroup.text("name") + end + + groups.sort.each do |name| + puts "#{name}.label #{name}" + puts "#{name}.draw STACK" + end end def output_values - status = `/usr/sbin/passenger-status` - unless $CHILD_STATUS.success? - warn "failed executing passenger-status" - exit 1 + global = passenger_status.text("/item/get_wait_list").to_i + + puts "global.value #{global}" + + passenger_status.get_elements("//supergroup").each do |supergroup| + name = supergroup.text("name") + queue = supergroup.text("get_wait_list").to_i + + puts "#{name}.value #{queue}" end - status =~ /Requests in top-level queue :\s+(\d+)/ - puts "global.value #{Regexp.last_match[1]}" end if ARGV[0] == "config" diff --git a/cookbooks/munin/files/default/plugins/passenger_requests b/cookbooks/munin/files/default/plugins/passenger_requests index dac457e33..2e113bf50 100755 --- a/cookbooks/munin/files/default/plugins/passenger_requests +++ b/cookbooks/munin/files/default/plugins/passenger_requests @@ -1,6 +1,11 @@ #!/usr/bin/env ruby require "English" +require "rexml/document" + +def passenger_status + @passenger_status ||= REXML::Document.new(`/usr/sbin/passenger-status --show=xml`) +end def output_config puts <<~CONFIG @@ -9,23 +14,41 @@ def output_config graph_title Passenger requests graph_vlabel requests / ${graph_period} - requests.label requests - requests.type DERIVE - requests.max 1000000 - requests.min 0 + total.label total + total.type DERIVE + total.max 1000000 + total.min 0 CONFIG - exit 0 + + groups = passenger_status.get_elements("//supergroup").map do |supergroup| + supergroup.text("name") + end + + groups.sort.each do |name| + puts "#{name}.label #{name}" + puts "#{name}.type DERIVE" + puts "#{name}.max 1000000" + puts "#{name}.min 0" + end end def output_values - status = `/usr/sbin/passenger-status` - unless $CHILD_STATUS.success? - warn "failed executing passenger-status" - exit 1 - end total_requests = 0 - status.scan(/Processed: (\d+)/).flatten.each { |count| total_requests += count.to_i } - puts "requests.value #{total_requests}" + + passenger_status.get_elements("//supergroup").map do |supergroup| + name = supergroup.text("name") + requests = 0 + + supergroup.get_elements("group/processes/process").each do |process| + requests += process.text("processed").to_i + end + + total_requests += requests + + puts "#{name}.value #{requests}" + end + + puts "total.value #{total_requests}" end if ARGV[0] == "config"