ADSLモデムの監視

プロバイダに連絡したところ、何とかつながるようにはなったが、元のリンク速度よりはるかに遅い。調べると、ADSLにはビットマップモードというのがあり、それをFBMというのに変更している。これだと、回線が安定するかわりに、速度が低下するらしい。
さらにネットで調べると、現在回線事業者からレンタルしている富士通製のADSLモデムは故障が多く、FBMモードでもしばしばリンクダウンになってしまうとのこと。

そこで、しばらく様子を見るために、ADSLモデムのリンク状況を監視することにした。
モデムにはWeb管理画面がついているので、ここにリクエストを飛ばしてHTMLを解析する。
ソースは以下。

#!/bin/ruby
# vim:ts=4:ai:

require 'rubygems'
require 'hpricot'
require 'kconv'
require 'net/http'



class ADSLStatus < Array
    def initialize
        self.push Time.now.strftime('%Y-%m-%d %H:%M:%S')
    end

    def csv
        self.join(',')
    end
end


Net::HTTP.version_1_2
req = Net::HTTP::Get.new('/sum/LineCondition.html?31400,0,0,0,0,0,0,0,0')
req.basic_auth 'admin', 'admin'
while true
    Net::HTTP.start('192.168.0.1', 80) do |http|
        res = http.request(req)
        doc = Hpricot(res.body)
        datum = ADSLStatus.new
        doc.search("//font[@class=plain]").each do |e|
            inn = e.inner_html.gsub(/\&nbsp;/,' ')
            inn = '' if inn.nil?
            inn = inn.gsub(/\s+/, ' ').gsub(/(^\s|\s$)/, '').tosjis
            datum.push(inn)
        end
        puts datum.csv
    end
    sleep 60
end

1分ごとに192.168.0.1のモデムにアクセスし、回線状況をCSV出力する。
Rubyは久しぶりなので、効率的ではなさそうだが、動けばいいのでこれでよしとした。
出力結果は以下。

2008-08-24 16:03:20,ADSLリンクアップ (G.DMT FBM FDM),Interleave,G.DMT,FBM,1760 k
bps,256 kbps,13.5 dB,-,8 msec,8 msec,37 dB,14 dB,0,45356,2,6869,0,2511,510823,36
0613,約 0.62 Km