Outages on my virginmedia broadband connection

Another frustrating day with my broadband connection - thank you Virgin Media - not!

I got so frustrated with my broadband connection going down I set up nagios2 on my work machine (where the connection is virtually 100% reliable). Incidentally, with ubuntu and nagios2 this was so much easier than I remember when I set it up years ago by hand.

A graph of the last 24 hours is below (over 30% down time). My connection is so erratic I've even had problems posting to the virginmedia broadband help news group where eventually I've been told my power levels are going up and down and asked what my modem lights are doing. I still await an real solution and it is still going up and down like a yoyo.

Comments

Monitoring modem settings

After posting on virgin broadband help news group I was asked to monitor the power and SNR settings especially when the connection was down. Problems a) I usually don't sit anywhere near the modem b) to do this I would have to either disconnect my cisco or change my VPN settings in the cisco as I VPN on 192.168.x.x and c) I would have to sit in a browser hitting refresh and noting down the changes.

Fortunately, the virgin modem is 192.168.100.1 and although we have a network using that I seldom need access to it so removing 192.100 from VPN fixed issue (b). Issues (a) and (c) are trickier, especially (c) since there is no way I'm going to sit in a browser repeatedly clicking on refresh and noting the values down. Fortunately a simple bit of Perl can do all that for me:

use LWP 5.64;
use strict;
use warnings;
use LWP::UserAgent;

# open file and disable buffering
my $fh;
open ($fh, ">>", "ntl.log");
my $old_fh = select($fh);
$| = 1;
select($old_fh);

my $browser = LWP::UserAgent->new;
$browser->credentials(
    '192.168.100.1:80', # ip address:port  to query
    'Virgin Media', # name of realm for authentication
    'root' => 'root' # username and password
  );

my $url =
    'http://192.168.100.1/CmDnstream.asp'; # url used for downstream values
while(1) {
    my $response = $browser->get($url);

    die "Error: ", $response->header('WWW-Authenticate') ||
        'Error accessing',
        #  ('WWW-Authenticate' is the realm-name)
        "\n ", $response->status_line, "\n at $url\n Aborting"
        unless $response->is_success;

    #print $response->content();
    my ($dspwr, $dssnr);
    if ($response->content() =~ /Downstream Receive Power Level : <\/font><\/td><td>(.*)<\/td><\/tr>/) {
        $dspwr = "$1";
        $dspwr =~ s/ //g;
    }
    if ($response->content() =~ /Downstream SNR : <\/font><\/td><td>(.*)<\/td><\/tr>/) {
        $dssnr = "$1";
        $dssnr =~ s/ //g;
    }
    my @a = localtime;
    print $fh join("-",@a), ",$dspwr, $dssnr\n";
    sleep 1;
}

(Appologies for those &lt; in the above which should be the '<' character but I'm not a drupal expert - if you know how to sort this please tell me - I have used a code-block div, pre and xmp).

Now ntl.log contains the SNR and power for downstream logged once a second (due to that sleep 1). There is a small issue if a GET fails since the above script will die if that happens but it is easily changed to avoid that. Also because I was lazy I just logged the localtime array but that could be formatted into a nice date/time string easily.

So now I run it and sit back knowing it is logging the changes in my modem and later it is a simply task to knock up another bit of Perl up to find the greatest and least SNR/Power values from the log file (even to group them by hour or day).

My Virgin Media broadband connection is fixed?

So an engineer arrived today (call was between 8am and 12pm and he arrived at 11:58am). I had to take a half a days holiday for this and as it turns out I could have done it in my lunch hour as I work very near to home. I wasn't going to comment but it appears his first call was the riverside Leeds city centre, his second me all the way out in Wetherby and his third back in Leeds city centre. Now I appreciate, Virgin want to offer their customers the choice of 3 slots in the day but from an operational standpoint this is total madness. Also, the engineer rang me 10 minutes before the appointment deadline to say he thought he may be late (which is no surprise to anyone who knows the area as driving from Leeds City Centre to Wetherby and back is not a 5 minute trip). A little suggestion for Virgin. As the engineer was obviously equipped with a phone the option to ring you 30 minutes before arrival would be good as I could have avoided taking holiday. Also, (and I appreciate you wanting to give customers flexibility of times) but if the engineer could have more input into the schedules you could save a fortune - the trip from Leeds to Wetherby and back to Leeds must cost you a lot in terms of fuel and time.

First thing he did was look at the modem settings as viewed from my browser connected to the modem. Apparently the SNR/Power was too close to the limit. Then he plugged my cable into his machine and made a similar pronouncement. Then he unscrewed the "attenuator" from the line and tested again - better. hmmm. If my new modem does not need this "attenuator" then why did Virgin not tell me this when they sent me a new modem?

After this adjustment and some changes in the cable box around the corner from my house my SNR/Power have changed massively and I wait to see if this solves the problem.

update on virgin broadband

Things seem to be working well since the engineer visited. I've had two major (over 2 hours) outages since this problem and that is a whole lot better than before. BUT, during the second outage I waited 22 minutes to get through to virgin - that is not acceptable in my view. There was a message on the way to waiting for a real person saying they were experiencing problems in the LSNN area but I don't live in the LSNN area and when I finally got through to a real person and mentioned this they said there as no problem in my area! Anyway, the script I posted now reports the following (if it is of any interest to anyone): 7-51-23-7-9-109-3-279-1,0.2dBmV, 41.4dB 9-51-23-7-9-109-3-279-1,0.2dBmV, 41.5dB 10-51-23-7-9-109-3-279-1,0.2dBmV, 41.5dB 11-51-23-7-9-109-3-279-1,0.1dBmV, 41.5dB 13-51-23-7-9-109-3-279-1,0.3dBmV, 41.4dB 14-51-23-7-9-109-3-279-1,0.2dBmV, 41.1dB 15-51-23-7-9-109-3-279-1,0.3dBmV, 41.5dB 16-51-23-7-9-109-3-279-1,0.2dBmV, 41.5dB 18-51-23-7-9-109-3-279-1,0.2dBmV, 41.5dB 19-51-23-7-9-109-3-279-1,0.1dBmV, 41.5dB 20-51-23-7-9-109-3-279-1,0.3dBmV, 41.4dB