Comment puis-je surveiller une URL, puis m'envoyer un e-mail un Traceroute si quelque chose ne va pas?

StackOverflow https://stackoverflow.com/questions/5923460

Question

J'ai trouvé un script en ligne que je pensais faire ce dont j'avais besoin, mais je ne peux pas le faire fonctionner car mes compétences Perl sont assez faibles. Fondamentalement, j'ai besoin de surveiller cette URL sur Apple.com et de m'assurer que le formulaire de téléchargement est disponible, et s'il n'est pas disponible, je dois recevoir un e-mail disant que le formulaire n'est pas disponible sur $ hostname, voici le Traceroute de cet hôte. Le traceroute est important car Apple utilise Akamai et de la magie Geoip pour leurs téléchargements.

Je suis ouvert à garder ce script et à y ajouter ou à le faire d'une autre manière. Merci d'avoir pris le temps de regarder cela pour moi. Je ne manquerai pas de partager le résultat fini lorsque j'aurai terminé. Je suis presque sûr que ce script sera utile à plus que moi-même. ;)

ÉDITER 5/8/2011 Je viens de mettre à jour le script pour refléter mes changements récents.

#!/usr/bin/perl
use strict; use warnings;

# local hostname
my $hostname = `/bin/hostname`;

# setup array of servers/websites to check
my @sitestocheck = ('swdlp.apple.com');

# the relative url of the website response script in each site
my $responseprogram = "/cgi-bin/WebObjects/SoftwareDownloadApp.woa/wa/getProductData?localang=en_us&grp_code=quicktime&returnURL=http://www.apple.com/quicktime/download";

# path to the log file with the response data
my $statusdir = "./tmp";

# mail feature
my $mailprog ='/usr/sbin/sendmail';
my $adminmail = 'root@localhost';
my $frommail = 'root@$hostname';

###############################################################
# End Configuration                                           #
###############################################################
# main program
use Crypt::SSLeay;
use LWP::UserAgent;

# now check each url in your array
foreach my $sitetocheck (@sitestocheck)
{
    my $ua = new LWP::UserAgent;
    my $req = new HTTP::Request 'GET',"https://$sitetocheck$responseprogram";
    my $res = $ua->request($req);
    if ($res->is_success) 
    {
        if ($res->content =~ m/Quicktime/i)
        {
             my $response = "SERVER OK:$sitetocheck:".$res->content;}
        else
        {
            my $response = "Our apologies but there was an unexpected error with the application. This problem has been noted, and an email has been sent to the administrators. Please check back in a few hours to try the download again. ";
        }
    }
    else
    {
        my $timestamp = localtime;
        my $response = "WARNING! $hostname UNABLE TO CONNECT TO $sitetocheck at $timestamp";
        my $traceroute = `/usr/sbin/traceroute $sitetocheck`;
    }
    # write server status to the main log file
    open(FILE,">>$statusdir/statuslog.txt");
    flock(FILE, 2);
    print FILE "$response\n$traceroute\n\n";
    flock(FILE, 8);

    # write to a current status file for each server or website
    # being monitored
    open(FILE,">$statusdir/$sitetocheck");
    flock(FILE, 2);
    print FILE $response;
    flock(FILE, 8);
}

# if there is an error mail the administrator
if (my $response =~ m/apologies/i)
{
    open( MAIL, "|$mailprog -t" );
    print MAIL "Subject: $hostname unable to connect to $sitetocheck\n";
    print MAIL "From: $frommail\n";
    print MAIL "To: $adminmail\n";
    print MAIL "Reply-to: $frommail\n\n";
    print MAIL "$response\n$traceroute";
    print MAIL "\n\n";
    close MAIL;
}

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top