Code:
#!/usr/bin/perl use strict; use XML::Simple; use Data::Dumper; use File::stat; use Time::localtime; use POSIX (); use File::Basename; use File::Path qw(mkpath); #use Env; print "Content-type:text/html\r\n\r\n"; my $sourceName = $ARGV[0]; my $cobdate; my $TMPFILE; my $TMP_FILE; my $directory ; my $riskError; my $tradeError; my $cobdateTag; my $fileTypeTag; my $rmErrorBodyTag; my $bookIdTag; my $subBookIdTag; my $gbmBookRefTag; my $bookTag; my $ticketNumber; my $riskTypeTag; my $errorDescriptionTag; my $errorTypeTag; my $reg; my( @logLines ); my $zipfilename; my $sourceSysIdTag; my $runLogFhnd; my $surfaceError; my $timeStamp; sub LDATA() { "DATA"; } sub LDEBUG(){ "DEBUG"; } sub LINFO() { "INFO"; } sub LWARN() { "WARN"; } sub LERROR(){ "ERROR"; } sub LFATAL(){ "FATAL"; } sub LSTATS(){ "STATS"; } sub myTRUE() { 1; } sub myFALSE() { 0; } sub mySUCCESS() { 0; } sub myFAIL() { 2; } ################################################################################ # Logging functions. # Default is logging to STDOUT, but will also log to logfile if file handle ################################################################################ sub logLine($$) { my( $level, $line ) = @_; my( $curTs ) = getCurrentDateTimeStr(); if( $level eq LDEBUG ) { printf( "%-5s: %s\n", $level, $line ); if(defined($runLogFhnd)) { my($line) = sprintf( "$$:%-5s: %s\n", $level, $line ); print $runLogFhnd $line; } } else { printf( "%-5s: %s\n", $level, $line ); if(defined($runLogFhnd)) { my($line) = sprintf( "$$:%-5s: $curTs %s\n", $level, $line ); print $runLogFhnd $line; } } if($level eq LFATAL) { my($package, $filename, $line) = caller; # printf("%5s: $curTs : Aborting due to FATAL error in '$package' around line No. : $line\n", $level); if(defined($runLogFhnd)) { # my($line) = sprintf("$$:%5s: $curTs : Aborting due to FATAL error in '$package' around line No. : $line\n", $level); print $runLogFhnd $line; close($runLogFhnd); } exit 2; } } ################################################################################ # sub getCurrentDateTimeStr ################################################################################ sub getCurrentDateTimeStr() { my ($sec,$min,$hour,$day,$month,$yr19,@rest) = localtime(); return($timeStamp); } ################################################################################ # sub checkAndCreateDirPath # Go through the full dirpath.. ################################################################################ sub checkAndCreateDirPath($) { my $dirpath = shift; unless ( -d "$dirpath" ) { logLine(LINFO, "checkAndCreateDirPath: Creating Dir : $dirpath"); eval { mkpath($dirpath) }; if ($@) { logLine(LFATAL, "checkAndCreateDirPath: Failed to create '$dirpath' : $@"); } else { logLine(LINFO, "checkAndCreateDirPath: Created Dir : $dirpath"); } } } ################################################################################ ### sub checkAndCreateDirPath ### Go through the full dirpath.. ################################################################################## sub CreateBackupFile($) { my $tmpFile=shift; if(-f "$tmpFile") { print "TMP file already exists"; }else{ print "creating a file"; open my $OUT, '>>', $tmpFile or die "can't create tmp file '$tmpFile' : $!"; } my $USER_PWD='m_o/Abcdefa321hdrgf@K_M_A'; my $previouscob=`sqlplus -s $USER_PWD<< EOF set heading off; set pagesize 0; select to_char(T_MINUS_1_DATE,'YYYYMMDD') from MYRIAD_SYSTEM_DATE; EOF`; $previouscob =~ s/\s+$//; print "$previouscob"; my $prev_file="/var/tmp/checkFilePresent_$previouscob.csv"; if (-f "$prev_file"){ unlink $prev_file; print "removed previos cobdate files"; } } ############################################## # my $myriad_env_filepath = $ENV{`MYRIAD_HOME/common/conf/myriad.env`}; #my $myriad_env_filepath = {'/cs/rfcs/myriad/envs/PRD/common/conf/myriad.env'}; # my $USER_PWD = $ENV{`MYRIAD_DB_CONN`}; #my $USER_PWD='myriad_user/user_myriad1234@PLNMY010_MYRIAD_APP'; #my $USER_PWD='myriad_user/jHgdbfUhfzrhMF82@PZHMY010'; my $USER_PWD='myriad_owner/Abcdefa321hdrgf@KZHMY103_MYRIAD_APP'; $cobdate =`sqlplus -s $USER_PWD<< EOF set heading off; set pagesize 0; select to_char(T_ZERO_DATE,'YYYYMMDD') from MYRIAD_SYSTEM_DATE; EOF`; $cobdate =~ s/\s+$//; if ($sourceName eq "PrimoRisk") { $directory = "/cs/myrow/myriad/envs/PRD/data/archive/message/primo/riskerror/$cobdate"; print " Directory :$directory \n"; $riskError ="RISKERROR"; $cobdateTag = "COB_DATE"; $fileTypeTag = "FILE_TYPE"; $bookIdTag = "BOOK_ID"; $subBookIdTag ="SUB_BOOK_ID"; $ticketNumber = "TICKET_NUMBER"; $errorDescriptionTag = "ERROR_DESCRIPTION"; $errorTypeTag = "ERROR_TYPE"; $sourceSysIdTag="SOURCE_SYSTEM_ID"; $reg ="PRIMO"; } elsif ($sourceName eq "PrimoTrade") { $directory = "/cs/myrow/myriad/envs/PRD/data/archive/message/primo/tradeerror/$cobdate"; $tradeError="TRADEERROR"; $cobdateTag = "COB_DATE"; $fileTypeTag = "FILE_TYPE"; $bookIdTag = "BOOK_ID"; $subBookIdTag ="SUB_BOOK_ID"; $ticketNumber = "TICKET_NUMBER"; $errorDescriptionTag = "ERROR_DESCRIPTION"; $errorTypeTag = "ERROR_TYPE"; $sourceSysIdTag="SOURCE_SYSTEM_ID"; $reg ="PRIMO"; } elsif ($sourceName eq "Jane") { #$directory = "/cs/myrow/myriad/envs/PRD/data/file_versions/$cobdate"; $directory = "/cs/myrch/myriad/envs/IT3/data/file_versions/$cobdate"; $riskError ="risk"; $tradeError="trade"; $surfaceError ="surface"; } elsif ($sourceName eq "Giraffe") { $directory = "/cs/myrow/myriad/envs/PRD/data/file_versions/$cobdate"; $riskError ="RISK"; $tradeError="TRADE"; $reg = "GIRAFFE"; } my $logDirectory = "/cs/myrch/" . "/logs"; # Make sure log dir exists checkAndCreateDirPath( $logDirectory ); my $TMP_FILE="/var/tmp/checkFilePresent_$cobdate.csv"; # Make sure tmp dir exists CreateBackupFile($TMP_FILE); # It generates YYYYMMDDhhmmss my $t = localtime; $timeStamp = sprintf("%04d%02d%02d_%02d-%02d-%02d", $t->year+1900, $t->mon + 1, $t->mday, $t->hour, $t->min, $t->sec ); my $errorFileName=$sourceName.'Errors'.$timeStamp.'.html'; $zipfilename=$sourceName.'Errors'.$timeStamp.'.zip'; my $errorFile = $logDirectory.'/'.$errorFileName; my $tlogname = $sourceName.'Errors'.$timeStamp; my( $runLog ) = $logDirectory.'/'.$tlogname.'.log'; open($runLogFhnd, "+>>$runLog") || logLine(LFATAL, "Failed to open '$runLog' for writing."); ######################################################################## # Creating file for display error Details. #######u################################################################## open(DATA,"+>>$errorFile") || die "Couldn't open file file.txt, $!"; print DATA "<html> <TABLE BORDER> \n "; print DATA "<tr><td>COB Date</td><td>FO RMS</td><td>Feed Name</td><td>Book</td><td>Sub Book</td><td>GBM BOOK REF</td><td>BOOK ID</td><td>Ticket Number</td><td>Error File Type</td><td>Error Type</td><td>Error Description</td></tr>\n"; `chmod 777 $errorFile`; opendir (DIR, $directory) or exit 0; my $num= `cd $directory; ls *ERROR*xml*gz -o *error*xml.gz |wc -l`; if($num >=1){ `cd $directory; gunzip *error*gz; gunzip *ERROR*gz`; } foreach (sort grep(/^.*\.xml$/,readdir(DIR))){ my $file = $_; my $fileref= `grep $file* $TMP_FILE | wc -l`; if($fileref==0) { if ( $file =~ m/error/i ) { logLine(LINFO, "Source Name : $sourceName "); logLine(LINFO, "Get File Name: $file "); my @words = split /_/, $file; my $errorListTag; my $errorTag; logLine(LINFO, "Get File first word: $words[0] ,$reg "); if ( $sourceName eq "Jane" && ( ( grep {$_ eq $tradeError} @words ) || (grep {$_ eq $riskError} @words )|| ( grep {$_ eq $surfaceError} @words ))) { $reg = $words[0]; logLine(LINFO, "This check is for only Jane Feed : $reg "); } if ($words[0] =~ m/$reg/) { print " regex is working $reg \n"; if (grep {$_ eq $tradeError} @words) { $errorListTag="tradeErrorList"; $errorTag="tradeError"; logLine(LINFO, "This is Trade Error: $errorListTag "); } else { $errorListTag="rmErrorList"; $errorTag="rmError"; logLine(LINFO, "This is Risk/Surface Error: $errorListTag "); } my $path; if ($words[0] eq "GIRAFFE") { $cobdateTag = "COB_DATE"; $fileTypeTag = "FILE_TYPE"; $bookIdTag = "BOOK_ID"; $subBookIdTag ="SUB_BOOK"; $ticketNumber = "TICKET_NUMBER"; $errorDescriptionTag = "ERROR_DESCRIPTION"; $errorTypeTag = "ERROR_TYPE"; $sourceSysIdTag ="SOURCE_SYSTEM_ID"; print "This is GIRAFFE feed \n"; $path = "$directory/$file"; } elsif ($words[0] ne "PRIMO") { $cobdateTag = "cobDate"; $fileTypeTag = "fileType"; $bookIdTag = "book"; $subBookIdTag ="subBook"; $ticketNumber = "ticketNumber"; $errorDescriptionTag = "description"; $errorTypeTag = "errorType"; $sourceSysIdTag = "sourceSystemCode"; $gbmBookRefTag = "GBM_BOOK_REF"; $bookTag = "bookId"; logLine(LINFO, "This is for Jane: $sourceSysIdTag "); $path = "$directory/$file"; } else { $path = "$directory/$file"; } logLine(LINFO, "get File complete path: $path "); my $ererrorReport = XMLin($path,ForceArray=>['rmError','book','tradeError']); ########################################################################## # Reading Header Values :Cobdate and File type. ########################################################################## my $rmErrorHeaderdata=$ererrorReport->{rmErrorHeader}; #print Dumper($rmErrorHeaderdata); my $cobdate=$rmErrorHeaderdata->{$cobdateTag}; my $errorFileType=$rmErrorHeaderdata->{$fileTypeTag}; my $forms=$rmErrorHeaderdata->{$sourceSysIdTag}; logLine(LINFO, "get Error file details CobDate ErrorFileType Fo RMS: $cobdate $errorFileType $forms "); ########################################################################### # Reading Body values:Book,Subbook,Ticketnumber,ErrorType,ErrorDescription ########################################################################### my $rmErrorBodydata = $ererrorReport->{rmErrorBody}; my $bookListdata = $rmErrorBodydata->{bookList}; my $books = $bookListdata->{book}; #print Dumper($books); foreach my $book (@{$bookListdata->{book}}) { my $bookId = $book->{$bookIdTag}; my $subBookId=$book->{$subBookIdTag}; my $gbmBookRef=$book->{$gbmBookRefTag}; my $bookRef=$book->{$bookTag}; my $list = $book->{$errorListTag}; my $rmErrorData = $list->{$errorTag}; #print Dumper($rmErrorData); foreach my $rmErrorData (@{$list->{$errorTag}}) { my $ticketNumber = $rmErrorData->{$ticketNumber}; my $errorDesc = $rmErrorData->{$errorDescriptionTag}; my $errorType = $rmErrorData->{$errorTypeTag}; logLine(LINFO, "get Error file details Book: $bookId Subbook : $subBookId TicketNumber: $ticketNumber ErrorType : $errorType "); print DATA "<tr><td>$cobdate</td><td>$forms</td><td>$file</td><td>$bookId</td><td>$subBookId</td><td>$gbmBookRef</td><td>$bookRef</td><td>$ticketNumber</td><td>$errorFileType</td><td>$errorType</td><td>$errorDesc</td></tr>\n"; } } #my $bakFileName=$file.".bak"; #my $bakFile="$directory/$bakFileName"; #`mv $path $bakFile`; #open(DATA,"+>>$TMP_FILE") || die "Couldn't open file, $!"; #print DATA "$file \n "; #close(DATA); } } open(DATA1,"+>>$TMP_FILE") || die "Couldn't open file, $!"; print DATA1 "$file \n "; close(DATA1); } closedir(DIR); `cd $directory; gzip $file`; } print DATA "</table></html>\n"; close (DATA); `cd $logDirectory;zip $zipfilename $errorFileName;chmod 777 $zipfilename`; my $msg ='Email with ErrorDetails Attachment from Myr'; my $addr ='d.y@gmail.com'; `echo "" | mailx -s '$msg' -a '$logDirectory/$zipfilename' '$addr'`; logLine(LINFO, "Successfully sent mail to the user ");
Comment