contrib-munin/plugins/icecast/icecast2_simple

71 lines
1.8 KiB
Plaintext
Raw Normal View History

2008-01-21 19:41:15 +01:00
#!/usr/bin/ruby
#
# Plugin author: Gunnar Wolf <gwolf@gwolf.org>
#
# You are hereby granted authorization to copy, use, modify, distribute,
# and in general do anything you please with this plugin. It is too simple
# even to GPL-protect it.
#
# This plugin expects to receive via environment variables:
#
# icecast_host - Which host to monitor (default: 127.0.0.1)
# icecast_username - Username to connect with (default: admin)
# icecast_password - Password to connect with (default: hackme)
# icecast_realm - Realm to connect with (default: 'Icecast2 server')
#
require 'hpricot'
require 'open-uri'
def get_conf
# Default values
conf = {:host => '127.0.0.1', :port => 8000,
:username => 'admin', :password => 'hackme' }
conf.keys.each do |key|
env_key = sprintf('icecast_%s', key)
conf[key] = ENV[env_key] if ENV.has_key?(env_key)
end
conf
end
def get_data(conf)
begin
data = Hpricot(open(sprintf('http://%s:%s/admin/stats',
conf[:host], conf[:port]),
:http_basic_authentication=>[conf[:username],
conf[:password]]))
rescue OpenURI::HTTPError
puts "Cannot connect: HTTP connection error"
exit 1
end
data
end
def get_values(data)
vals = {}
[:sources, :clients].each do |key|
elem = data/key
if elem.nil?
vals[key] = 0
else
vals[key] = elem.innerHTML
end
end
vals
end
data = get_data(get_conf)
vals = get_values(data)
if ARGV[0] == 'autoconf'
puts 'yes'
elsif ARGV[0] == 'config'
puts "graph_title Total sources and clients for Icecast"
puts "graph_vlabel listeners"
puts "graph_category Icecast"
puts "sources.label Total number of sources"
puts "clients.label Total number of clients"
else
puts "sources.value " + vals[:sources]
puts "clients.value " + vals[:clients]
end