75 lines
1.9 KiB
Ruby
Executable File
75 lines
1.9 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
host = Regexp.last_match(1) if $0 =~ %r{^(?:|.*/)http_([^_]+)_}
|
|
abort "# Error: couldn't understand what I'm supposed to monitor." unless host
|
|
|
|
user = ENV['user'] || 'user'
|
|
password = ENV['password'] || 'user'
|
|
|
|
if ARGV[0] == 'config'
|
|
puts "host_name #{host}" unless host == 'localhost'
|
|
|
|
puts 'multigraph dsl_rate'
|
|
puts 'graph_title DSL line speed'
|
|
puts 'graph_args --base 1000 -l 0'
|
|
puts 'graph_vlabel bps'
|
|
puts 'graph_category network'
|
|
puts 'downstream.label downstream'
|
|
puts 'downstream.type GAUGE'
|
|
puts 'downstream.min 0'
|
|
puts 'downstream.cdef downstream,1000,*'
|
|
puts 'upstream.label upstream'
|
|
puts 'upstream.type GAUGE'
|
|
puts 'upstream.min 0'
|
|
puts 'upstream.cdef upstream,1000,*'
|
|
|
|
puts 'multigraph dsl_snr'
|
|
puts 'graph_title DSL SNR'
|
|
puts 'graph_args --base 1000 -l 0'
|
|
puts 'graph_vlabel dB'
|
|
puts 'graph_scale no'
|
|
puts 'graph_category network'
|
|
puts 'downstream.label downstream'
|
|
puts 'downstream.type GAUGE'
|
|
puts 'downstream.min 0'
|
|
puts 'upstream.label upstream'
|
|
puts 'upstream.type GAUGE'
|
|
puts 'upstream.min 0'
|
|
|
|
exit 0
|
|
end
|
|
|
|
require 'net/http'
|
|
|
|
class TPAdslStats
|
|
def initialize(host, user, password)
|
|
Net::HTTP.start(host) do |http|
|
|
req = Net::HTTP::Get.new('/statsadsl.html')
|
|
req.basic_auth user, password
|
|
response = http.request(req)
|
|
abort "# Error: #{response.code} received fetching stats" unless response.is_a?(Net::HTTPSuccess)
|
|
@html = response.body
|
|
end
|
|
end
|
|
|
|
def field_values(label)
|
|
if @html =~ />#{label}.*?<td>([0-9.]+).*?([0-9.]+)/m
|
|
[Regexp.last_match(1), Regexp.last_match(2)]
|
|
else
|
|
%w[U U]
|
|
end
|
|
end
|
|
end
|
|
|
|
stats = TPAdslStats.new(host, user, password)
|
|
|
|
puts 'multigraph dsl_rate'
|
|
rate = stats.field_values('Rate')
|
|
puts "downstream.value #{rate[0]}"
|
|
puts "upstream.value #{rate[1]}"
|
|
|
|
puts 'multigraph dsl_snr'
|
|
snr = stats.field_values('SNR')
|
|
puts "downstream.value #{snr[0]}"
|
|
puts "upstream.value #{snr[1]}"
|