----- Original Message ----- From: "Andy" <[EMAIL PROTECTED]>
Newsgroups: perl.beginners
To: <beginners@perl.org>
Sent: Tuesday, July 08, 2008 9:31 PM
Subject: Re: Debug Help Please


On Jul 7, 2:16 pm, [EMAIL PROTECTED] (Andy) wrote:
On Jul 7, 11:53 am, [EMAIL PROTECTED] (Rob Dixon) wrote:



> Andy wrote:

> > Funny how when you talk to different people you get different ways of
> > looking at it.

> > One of the Perl guys at my office. told me that I can use
> > use strict;
> > use warnings;

> > but he said , he really doesn't because he wants the script to do > > what
> > it needs to do...

> Then he is a fool and should be disregarded. Perhaps he could post to > this group
> to explain himself?

> > I have made corrections as you suggested.
> >  I have included.

> > use strict;
> > use warnings;

> > as well as
> >  my $TIME  =$fields[3]

> > However after that ,
> > I still get zero output.

> > Maybe I have this written .....

> Have you incorporated all the corrections that John posted in his first
> response? Perhaps you should post your program in its current state so > that we
> can take another look.

> Rob

Thank you all for the patience.

I have been doing some debugging...well as much of it as I can handle
with no exp...

This is the current code. I figured out with some help that My
$Dateroot was trying to read
incoming.xferlog.xferlog.csv.....

Eventually I want to run "perl andylog.pl and it will Parse all the
xferlogs in the dir.

Thus far with all your help I have it working...now for the tweaks.

I have some lines longer than the other and I have to figure out how
to skip those lines ...

So now I have to figure out how to read them all even longer ones
Tue Apr 29 00:02:13 2008 0 x.x.x.x 521 /home3/FTP-protected/TFN/ixx/
GPSdetail_rpt_20080428_200525.txt b _ i r xxx ftp 0 * c
Tue Apr 29 00:03:40 2008 25x.x.x.x 4246252 /home4/FTP-protected/
DATAWORKS/1234/user_nameEUestimates_2000.zip b _ o r username ftp 0 *
c

use strict;
use warnings;
        #Define LogFiles
my $dateroot=$ARGV[0]; # Value should be 2-digit month
my $outgoing="outgoing_xferlog.$dateroot.csv";  # This is for all
files sent to users
my $incoming="incoming_xferlog.$dateroot.csv";  #This is log for
uploads
my $loginsinlog="loginsinlog_xferlog.$dateroot.csv";   # This is where
log users
my $completedlog="completedlog_xferlog.$dateroot.csv";  # All
Completed Sessions
my $failedlog="failedlog_xferlog.$dateroot.csv";       # This is for
all Failures
my %loginsin;
my %completed;
my %failures;
my %incoming;
my %outgoing;

             #Time Measured
print "Started Processing Logfiles for $dateroot at " .
(localtime) ."\n\n";
             #Open Log File Dir to Read .log file(s)
opendir (DIR, ".") or die "$!";

#my @logfiles = grep {/xferlog\.$dateroot/,}  readdir DIR;
my @logfiles = grep {/$dateroot/,} readdir DIR;
close DIR;

           #Start Log Processing
foreach my $logfile (@logfiles) {
   print "Started Processing: $logfile at " . (localtime) ."\n";
   open(FH,"./$logfile") or die "$!";
   while ( my $lines = <FH> ) {
     chomp($lines);
      my @fields = split / /, $lines; #This is where we look for the .
extensions from the file name
#       next if /^#/;
#        next if /^(\s)*$/;
              #My Ftp Status Log Values
      my $TIME  =$fields[3]||'NULL';#fields[1],fields[2],fields[3];
      my $YEAR = $fields[4]||'NULL';
      my $IP = $fields[6]||'NULL';
      my $SIZE = $fields[7]||'NULL';    #filesize
      my $FILE = $fields[8]||'NULL';    #filename and path
      my $DIRECTION = $fields[11]||'NULL'; #Outgoing, Incoming
      my $USERNAME = $fields[13]||'NULL';
      my $STATUS= $fields[17]||'NULL';   #c = completed  i=incomplete
    ( my $MASKFILE = $FILE ) =~ tr/0-9/#/; #$cnt = tr/0-9//;# count
the digits in $_

                          #Failures    This is where we check for
failures
if ($DIRECTION eq "i" and $STATUS ne "c" ){$failures {$USERNAME}   =
$TIME.",".$YEAR.",".$FILE.",".$IP;}
                          #completed sessions
if ($STATUS =~ m "c" ){$completed {$USERNAME}   = $TIME.",".$YEAR.",".
$IP;}

                           # incoming
if ($DIRECTION eq "i"  ){$incoming {$USERNAME}   = $TIME.",".$YEAR.",".
$FILE.",".$SIZE.",".$IP;}
                          #Outgoing      this is where we log all
outgoing xfers
if ($DIRECTION eq "o"){$outgoing {$USERNAME}   = $TIME.",".$YEAR.",".
$FILE.",".$SIZE.",".$IP;}

                                   #Masked Options  with file
extensions
#if ($DIRECTION eq "i" and $STATUS eq "c" ){$ {$USERNAME.",".
$MASKFILE} = $FILE.",".$TIME.",".$YEAR.",".$IP.",".$STATUS;}
   }}

   close(FH);

#}
open(OUTPUT, '>', $incoming) or die("Could not open log file.");
for my $key ( sort %incoming) { if ($incoming{$key}) { print OUTPUT
"$key,$incoming{$key}\n";}}
close(OUTPUT);
open(OUTPUT, '>', $outgoing) or die("Could not open log file.");
for my $key ( sort %outgoing) { if ($outgoing{$key}) { print OUTPUT
"$key,$outgoing{$key}\n";}}
close(OUTPUT);
open(OUTPUT, '>', $failedlog) or die("Could not open log file.");
for my $key ( sort %failures) { if ($failures{$key}) { print OUTPUT
"$key,failures{$key}\n";}}
close(OUTPUT);
open(OUTPUT, '>', $completedlog) or die("Could not open log file.");
for my $key ( sort %completed) { if ($completed{$key}) { print OUTPUT
"$key,$completed{$key}\n";}}
close(OUTPUT);
#open(OUTPUT, '>', $) or die("Could not open log file.");
#for my $key ( sort %) { if (${$key}) { print OUTPUT "$key,${$key}
\n";}}
#close(OUTPUT);
print "\nFinished Processing Logfiles for $dateroot at " .
(localtime ) ."\n\n";
print "This script took ". (time - $^T)/60 ." minutes \n"

Guys:

Thank you As Usual

Just an FYI, the Code I have been pasting is unfortunately the one
I have to stick with, I just needed to work out the bugs
Executive Decisions was made to keep all the data scripts look alike
for easy editing, by anyone....


Thus far one of the major problems I am having is
my $TIME = $fields[3];

It only retrives 00:02:13

I chose to make $TIME  = Tue Apr 29 00:02:13
as opposed to a separate var for each .

Tue Apr 29 00:02:13 2008



Besides we will eventually only wish to sort by year , for other
purposes.

Hello Andy,

Just a suggestion now that you mentioned sorting by date.

A widely used, well formed date in ISO format is:
YYYY-MM-DD hh:mm:ss

The date format you propose will not sort without jumping through a bunch of hoops and will only make your parsing code more difficult to write/read.

'Tue Apr 29 00:02:13 2008' may look 'good' to the eye, but the ISO format will sort with minimum coding effort and is still readable by humans.

Chris



We have years of log files....
I am stuck there.




--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to