CUFP
zeno
<p>Our ISP at work is a bit unreliable, so we started keeping a log of how often our service goes up and down. I wrote this script to automate the task.</p>
<p>It works by using LWP to download the header of a reliable site every <i>$interval</i> seconds. It makes a log entry every time the service goes up or down.</p>
<p>Many thanks to [tye] and [arhuman], who helped me with a problem of autoflushing the log in [id://57525].<br>
<p><b>Update:</b> [ybiC] has posted a muchly improved version of this same program [id://59841|here].</p>
<READMORE>
<p>An improvement would be to tell it to check a second site if the first one fails.</p>
-[zeno]
</p>
<code>
=head1 NAME
inet_log.pl
=head1 DESCRIPTION
Keeps a log of internet up and down time
=head1 AUTHOR
zeno
=head1 SYNOPSIS
perl inet_log.pl [name_of_logfile interval url_of_website]
=head1 ARGUMENTS
name_of_logfile - text file to use as log file
[display (-) by default]
interval - interval in seconds between checks
[600 seconds by default]
url_of_website - URL of website to try
[http://www.perlmonks.com by default]
=cut
#!/usr/bin/perl -w
use LWP::Simple;
use strict;
use warnings;
# log file (display by default)
my $log = $ARGV[0] ||= '-';
# interval between checks (600)
my $interval = $ARGV[1] ||= 600;
# site to try (perlmonks by default)
my $site = $ARGV[2] ||= 'http://www.perlmonks.com';
my $old_state;
my $state;
print "Creating Internet Uptime Log at $log ";
print "testing $site every $interval seconds.\n";
#changed this to the two arg version for
#version < 5.6 compatibility (thanks ybiC)
open (OUT, ">>$log") or die "can't open $log: $!";
#this way of setting AUTOFLUSH on the log I got
#from tye and arhuman
my $selected = select(OUT);
$|++;
select($selected);
$old_state = (defined head($site));
print OUT (localtime).($old_state ? ": up\n" : ": down\n");
close OUT or die;
print "".(localtime).($old_state ? ": up\n" : ": down\n");
while (1) {
sleep $interval;
$state = (defined head($site));
if ($state != $old_state) {
# state changed
open OUT,">>",$log or die "can't open $log: $!";
print OUT (localtime).($state ? ": up\n" : ": down\n");
close OUT or die;
print "".(localtime).($state ? ": up\n" : ": down\n");
$old_state = $state;
}
}
</code>