#!/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 graph_args --base 1000 graph_category passenger graph_title Passenger requests graph_vlabel requests / ${graph_period} 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 total_requests = 0 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" output_config else output_values end