I changed the code and i am returning 0 when i am getting success. This is working fine for the snippet of the logfile i sent, but when i tested it on the logfile it does not print any data.
The changed code is--
#!/usr/bin/perl
my $logFile = $ARGV[0];
die "usage: $0 <logFile>" unless $logFile;
die "Logfile $logFile doesn't exist" unless -f "$logFile";
my %no_of_questions;
my %timestamp;
open (FP,"<$logFile") or die "unable to open file $!" ;
@records=<FP>;
chomp(@records);
for($index=0;$index<@records;$index++)
{
if($records[$index] =~ /^(.*)INFO:.*Entering QnAModule::authen
+ticate/)
{
#printf "in INFO:.*Entering QnAModule::authenticate\n";
$Time_Stamp = $1;
die "Some error in search_for_username_and_no_of_questions
+" if (search_for_username_and_no_of_questions() == -1);
die "Some error in end_block" if (end_block() == -1);
#last;
}
}
sub search_for_username_and_no_of_questions
{
printf "inside search_for_username_and_no_of_questions\n";
for($index=0;$index<@records;$index++)
{
if ($records[$index] =~ /userName :\[(..*)\]/)
{
#printf "in user name identification \n";
$User_Name = $1;
$User_Name =~ s/\s+//g;
for(;$index<@records;$index++)
{
if ($records[$index] =~ /Set of questions\(bit
+map\) selected : (\d+)/)
{
#printf "in set of questions\n";
$Bitmap_Number_For_Questions = $1;
$no_of_questions{$User_Name}=$Bitmap_Numbe
+r_For_Questions;
$timestamp{$User_Name}=$Time_Stamp;
#printf "DETAIL: LINE NO: $index\n";
#printf "$Time_Stamp,$User_Name,$Bitmap_Nu
+mber_For_Questions\n";
return 0;
}
}
}
}
return -1;
}
sub end_block
{
printf "Inside end_block\n";
for($index=0;$index<@records;$index++)
{
if($records[$index] =~ /QNA Step.*AUTH IN PROGRESS/)
{
printf "DETAIL: auth in progress\n";
for(;$index<@records;$index++)
{
if ($records[$index] =~ /ArAuthFrameworkImpl::doPostAu
+th.*Authentication mechanism returned \[(..*)\] for AuthIdentity \[(.
+.*)\]/)
{
#printf "done one request \n";
#printf "$records[$index]\n";
my $return_code = $1;
my $temp_user = $2;
$temp_user =~ s/\s+//g;
#printf "user = $temp_user\n";
if(exists($no_of_questions{$temp_user}))
{
if ($return_code == 0)
{
printf "$temp_user,$no_of_questions{$temp_
+user} , $timestamp{$temp_user} , \"Success\" \n";
return 0;
}
elsif ($return_code > 1)
{
printf "$temp_user,$no_of_questions{$temp_
+user} , $timestamp{$temp_user} , \"Failure\" \n";
return 0;
}
for(;$index<@records;$index++)
{
if ( ($records[$index] =~ /Prepared to Sen
+d OK/) || ($records[$index] =~ /Sending Invalid credential/) )
{
#printf "end of file\n";
}
}
}
}
}
}
}
return -1;
}
I ran this on this snippet logfile
monday 12:55:66 INFO:Entering QnAModule::authenticate
monday 12:55:66 userName :[prasanna]
monday 12:55:66 Set of questions(bitmap) selected : 13
monday 12:55:66 QNA Step.*AUTH IN PROGRESS
monday 12:55:66 ArAuthFrameworkImpl::doPostAuth.*Authentication mechan
+ism returned [4] for AuthIdentity [prasanna]
monday 12:55:66 Prepared to Send OK
monday 12:55:66 Sending Invalid credential
and i got this result which is as expected-
inside search_for_username_and_no_of_questions
Inside end_block
DETAIL: auth in progress
prasanna,13 , monday 12:55:66 , "Failure"
but when i ran it on my actual log file
i ran it like this--
C:\Perl Script>perl per_user_qna_detail.pl arcotwebfort_29May09_19_17_47.log>res
ults.txt
Some error in end_block at per_user_qna_detail.pl line 19, <FP> line 67209.
i got this result--
inside search_for_username_and_no_of_questions
Inside end_block
DETAIL: auth in progress
why it is happening?
please give me some suggestions.
Thanks
NT
|