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__