<% @path = "/etc/collectd/plugins/passenger_info.rb" @perms = 0755 -%> #!/usr/bin/env ruby # Direct api access tricky to get working right with sudo, etc, so commenting out # and shelling out to passenger provided scripts for now # # require 'phusion_passenger' # require 'phusion_passenger/platform_info' # require 'phusion_passenger/admin_tools/memory_stats' # require 'phusion_passenger/admin_tools/server_instance' # # procs = PhusionPassenger::AdminTools::MemoryStats.new.passenger_processes # total_rss = procs.inject(0) {|sum, val| sum + val.rss } # puts "PUTVAL #{HOSTNAME}/passenger/gauge-total_rss interval=#{INTERVAL} N:#{total_rss}" # # server_instance = PhusionPassenger::AdminTools::ServerInstance.list.first # server_instance.connect(:passenger_status) do # stats = server_instance.stats # puts "PUTVAL #{HOSTNAME}/passenger/gauge-instances_max interval=#{INTERVAL} N:#{stats.max}" # puts "PUTVAL #{HOSTNAME}/passenger/gauge-instances_count interval=#{INTERVAL} N:#{stats.count}" # puts "PUTVAL #{HOSTNAME}/passenger/gauge-instances_active interval=#{INTERVAL} N:#{stats.active}" # # sessions = server_instance.groups.collect {|group| group.processes.collect {|process| process.sessions } }.flatten # total_sessions = sessions.inject(0) {|sum, val| sum + val } # puts "PUTVAL #{HOSTNAME}/passenger/gauge-total_sessions interval=#{INTERVAL} N:#{total_sessions}" # end STDOUT.sync = STDERR.sync = true HOSTNAME = ENV["COLLECTD_HOSTNAME"] || `hostname -f`.chomp INTERVAL = (ENV["COLLECTD_INTERVAL"] || 60).to_i loop do start_time = Time.now.to_i status = `sudo <%= rubber_env.rvm_gem_home %>/bin/passenger-status` unless $?.success? $stderr.puts "failed executing passenger-status" exit 1 end if status =~ /max\s+=\s+(\d+)/ puts "PUTVAL #{HOSTNAME}/passenger/gauge-instances_max interval=#{INTERVAL} N:#{$1}" end if status =~ /count\s+=\s+(\d+)/ puts "PUTVAL #{HOSTNAME}/passenger/gauge-instances_count interval=#{INTERVAL} N:#{$1}" end if status =~ /active\s+=\s+(\d+)/ puts "PUTVAL #{HOSTNAME}/passenger/gauge-instances_active interval=#{INTERVAL} N:#{$1}" end total_sessions = 0 status.scan(/Sessions: (\d+)/).flatten.each { |count| total_sessions += count.to_i } puts "PUTVAL #{HOSTNAME}/passenger/gauge-total_sessions interval=#{INTERVAL} N:#{total_sessions}" status = `sudo <%= rubber_env.rvm_gem_home %>/bin/passenger-memory-stats | tail -1` unless $?.success? $stderr.puts "failed executing passenger-memory-stats" exit 1 end if status =~ /(\d+\.\d+)/ puts "PUTVAL #{HOSTNAME}/passenger/gauge-total_rss interval=#{INTERVAL} N:#{$1}" end run_time = Time.now.to_i - start_time sleep_time = INTERVAL - run_time sleep_time = INTERVAL if sleep_time < 0 sleep sleep_time end