root / plugins / streaming / icecast2_simple @ e5ce7492
Historique | Voir | Annoter | Télécharger (1,84 ko)
| 1 | 20ec1339 | Gunnar Wolf | #!/usr/bin/ruby |
|---|---|---|---|
| 2 | # |
||
| 3 | # Plugin author: Gunnar Wolf <gwolf@gwolf.org> |
||
| 4 | # |
||
| 5 | # You are hereby granted authorization to copy, use, modify, distribute, |
||
| 6 | # and in general do anything you please with this plugin. It is too simple |
||
| 7 | # even to GPL-protect it. |
||
| 8 | # |
||
| 9 | # This plugin expects to receive via environment variables: |
||
| 10 | # |
||
| 11 | # icecast_host - Which host to monitor (default: 127.0.0.1) |
||
| 12 | # icecast_username - Username to connect with (default: admin) |
||
| 13 | # icecast_password - Password to connect with (default: hackme) |
||
| 14 | # icecast_realm - Realm to connect with (default: 'Icecast2 server') |
||
| 15 | # |
||
| 16 | require 'hpricot' |
||
| 17 | require 'open-uri' |
||
| 18 | |||
| 19 | def get_conf |
||
| 20 | # Default values |
||
| 21 | conf = {:host => '127.0.0.1', :port => 8000,
|
||
| 22 | :username => 'admin', :password => 'hackme' } |
||
| 23 | conf.keys.each do |key| |
||
| 24 | env_key = sprintf('icecast_%s', key)
|
||
| 25 | conf[key] = ENV[env_key] if ENV.has_key?(env_key) |
||
| 26 | end |
||
| 27 | conf |
||
| 28 | end |
||
| 29 | |||
| 30 | def get_data(conf) |
||
| 31 | begin |
||
| 32 | data = Hpricot(open(sprintf('http://%s:%s/admin/stats',
|
||
| 33 | conf[:host], conf[:port]), |
||
| 34 | :http_basic_authentication=>[conf[:username], |
||
| 35 | conf[:password]])) |
||
| 36 | rescue OpenURI::HTTPError |
||
| 37 | puts "Cannot connect: HTTP connection error" |
||
| 38 | exit 1 |
||
| 39 | end |
||
| 40 | data |
||
| 41 | end |
||
| 42 | |||
| 43 | def get_values(data) |
||
| 44 | vals = {}
|
||
| 45 | [:sources, :clients].each do |key| |
||
| 46 | elem = data/key |
||
| 47 | if elem.nil? |
||
| 48 | vals[key] = 0 |
||
| 49 | else |
||
| 50 | vals[key] = elem.innerHTML |
||
| 51 | end |
||
| 52 | end |
||
| 53 | vals |
||
| 54 | end |
||
| 55 | |||
| 56 | data = get_data(get_conf) |
||
| 57 | vals = get_values(data) |
||
| 58 | |||
| 59 | if ARGV[0] == 'autoconf' |
||
| 60 | puts 'yes' |
||
| 61 | elsif ARGV[0] == 'config' |
||
| 62 | puts "graph_title Total sources and clients for Icecast" |
||
| 63 | puts "graph_vlabel listeners" |
||
| 64 | puts "graph_category Icecast" |
||
| 65 | puts "sources.label Total number of sources" |
||
| 66 | puts "clients.label Total number of clients" |
||
| 67 | else |
||
| 68 | puts "sources.value " + vals[:sources] |
||
| 69 | puts "clients.value " + vals[:clients] |
||
| 70 | end |
