#!/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}.*?([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]}"