]> git.openstreetmap.org Git - chef.git/blobdiff - cookbooks/munin/files/default/plugins/passenger_requests
Anchor passenger graphs to zero
[chef.git] / cookbooks / munin / files / default / plugins / passenger_requests
index 3eeb776d6e0ecf83b2c542b1c9e38f106ae2c92f..67dc34367766c8688b1a4323d1daa07f52e12b60 100755 (executable)
@@ -1,31 +1,54 @@
 #!/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 <<~END
-    graph_args --base 1000
+  puts <<~CONFIG
+    graph_args --base 1000 --lower-limit 0
     graph_category passenger
     graph_title Passenger requests
     graph_vlabel requests / ${graph_period}
 
-    requests.label requests
-    requests.type DERIVE
-    requests.max 1000000
-    requests.min 0
-  END
-  exit 0
+    total.label total
+    total.type DERIVE
+    total.max 1000000
+    total.min 0
+  CONFIG
+
+  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?
-    $stderr.puts "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"