Perl script to check the nasdaq trader website to check for system/ipo updates and send email
$| = 1;
use strict;
use Date::Calc qw( Today_and_Now );
use CGI qw( :all );
use HTML::Tree;
use HTML::TableExtract;
use LWP::UserAgent;
my $app = $ARGV[0];
my %alertStatus = ('url' => 0);
my $severity = 0;
my $desc = '';
my $from = 'NASDAQ';
my $alertCounter = 1;
my ($year,$month,$day,$hour,$min,$sec) = Today_and_Now();
my $today = sprintf ("%4s-%02s-%02s-%02s:%02s:%02s",$year,$month,$day,$hour,$min,$sec);
my $proxy = $ENV{$app."_proxy"};
my $url = $ENV{$app."_url"};
$url = 'http://www.nasdaqtrader.com/Trader.aspx?id=MarketSystemStatus' if(!$url);
my $sleep = $ENV{$app."_sleep"};
$sleep = 50;
my %alertHash = (
'sr' => 'ExchangeAlert',
'id' => 'NASDAQ',
'monType' => 'Alert',
'e' => $region."iedmon",
'URL:NASDAQ_URL' => $url
);
print STDERR "
checkNASDQAStatus: $today: Starting checkNASDQAStatus
";
print STDERR "checkNASDQAStatus: proxy - $proxy, URL - $url, check interval - $sleep
";
print STDERR "checkNASDQAStatus: -------------------------------------------------------
";
my $ua = LWP::UserAgent->new;
$ua->proxy(['http'], $proxy );
my $te = new HTML::TableExtract( headers => [qw( Date Time Status )] );
while( 1 ){
checkNASDAQStatus();
print STDERR "sleeping...
";
sleep 55;
}
sub checkNASDAQStatus{
my $request = new HTTP::Request(GET=>$url);
my $response = $ua->request( $request );
if( $response->{_rc} !~ /^2dd/ ){
if( $alertStatus{'url'} == 0 ){
$severity = 5;
$desc = "Request to NASDAQ URL - $url failed. Return code - $response->{_rc}
";
$desc =~ s/ /_/g;
publishError( $severity, $desc );
}
print STDERR "Request to $url failed. Return code - $response->{_rc}
";
sleep( 55 );
next;
}
else{
clearAlert() if( $alertStatus{'url'} == 1 );
}
eval{
$te->parse( $response->{_content} );
} or die( "Unable to parse NASDAQ website
");
foreach my $ts( $te->table_states() ){
foreach my $row ($ts->rows) {
next if( ( $$row[2] =~ /All Systems are Operating Normally|There are no messages available/ ) || ( $$row[2] eq '' && $$row[0] =~ /No Status Messages/ ) );
$$row[1] =~ s/s+$//g;
$$row[2] =~ s/s+$//g;
$$row[1] =~ s/(;|,|
)/-/g;
$$row[2] =~ s/(;|,|
)/-/g;
if( not exists $alertStatus{$$row[2]} ){
$severity = 9;
$desc = $$row[2];
$alertStatus{$$row[2]} = 1;
$alertHash{AlertTime} = $$row[1];
$desc =~ s/ /_/g;
publishError( $severity, $desc );
# print STDERR "NASDAQ Alert - $$row[2]";
}
}
}
}
sub publishError{
my $severity = shift;
my $desc = shift;
$alertHash{pub} = 'checkNASDAQStatus';
$alertHash{severity} = $severity;
$alertHash{ty} = 'Alert~Message'.$alertCounter;
$alertHash{monDesc} = $desc;
if( !$alertStatus{'url'} ){
##Dont send Mail for WebSite Non-Availability..alert is send to Mon and IChat
if ($desc !~ /Request to NASDAQ URL/){
my %mailDetails = ();
my $mailBody = '';
$mailBody = table( {-border=>1},
Tr(
th( 'Alert time' ),
th( 'Alert Description' )
),
Tr(
td( $alertHash{AlertTime} ),
td( $mailDesc )
)
);
$mailBody .= br();
$mailBody .= br();
$mailBody .= 'click '.a( {-href=>$url}, 'HERE' ).' to open NASDAQ Market System Status web page';
$mailDetails{'to'} = "rajugupta15@gmail.com";
$mailDetails{'from'} = 'rajugupta15@gmail.com';
$mailDetails{'type'} = 'text/html';
$mailDetails{'body'} = $mailBody;
$mailDetails{'subject'} = "NASDAQ ALERT";
send_mail( %mailDetails );
}
}
$alertCounter++;
}
sub clearAlert{
$alertStatus{'url'} = 0;
}
__END__

