Anchor passenger graphs to zero
[chef.git] / cookbooks / munin / files / default / plugins / passenger_processes
index 59f9cdaa86932e921fb53ba10d2b37a67a7b71c9..863ff86106bbca36d533ea9d6e52bd0157acee39 100755 (executable)
@@ -1,32 +1,43 @@
 #!/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_category passenger
-graph_title Passenger processes
-graph_order active inactive
-graph_vlabel processes
-graph_total total
-
-active.label busy servers
-active.draw AREA
-inactive.label idle servers
-inactive.draw STACK
-END
+  puts <<~CONFIG
+    graph_args --lower-limit 0
+    graph_category passenger
+    graph_title Passenger processes
+    graph_order active inactive
+    graph_vlabel processes
+    graph_total total
+
+    active.label busy servers
+    active.draw AREA
+    inactive.label idle servers
+    inactive.draw STACK
+  CONFIG
   exit 0
 end
 
 def output_values
-  status = `/usr/sbin/passenger-status`
-  unless $CHILD_STATUS.success?
-    $stderr.puts "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"