Mike Singleton wrote:
> 
> This script will ultimately return the values of the regex strings for
> successful backup. I am stumped right now as how to proceed, as the script
> seems to run without error, yet return nothing.
> 
> ====== Log File =====
> 172.16.54.132 ssjobhnd Thu Jun 27 02:00:01 2002 SNBJH_3075J Syncsort Backup
> Express version 2.1.3; Copyright Syncsort Incorporated, 1996-2001

[snip]

> 172.16.54.132 ssjobhnd Thu Jun 27 03:42:17 2002 SNBJH_3499I Job complete:
> job 1025168400 status 0
> ==== End Log File====


You should probably read the perl style guide - the indentation is
inconsistant and the use of all upper case for variable names is frowned
upon.



> # ======================================================================
> #
> # Perl Source File -- Created with SAPIEN Technologies PrimalSCRIPT(TM)
> #
> # NAME: jobreport
> #
> # AUTHOR: Mike Singleton , Davita Inc
> # DATE  : 7/3/2002
> #
> # PURPOSE: SyncSort Reporting
> #
> # ======================================================================
> ###########################################################################
> #
> #
> my $HELP="

You could use a different quoting style do that you don't have to
backslash all the double quotes in the text.

perldoc perlop


> <description>:
> 
> This script must be run on the Backup Express master server.
> This script must be run from the bin subdirectory of
>  Backup Express if the environment variable SSPRODIR is not set to the
>  Backup Express directory.
> You must have admin priviliges to run this script.
> 
> \"jobrpt\" will generate a report of completed and failed Backup Express
> jobs, based on the information in the logs subdirectory.  Note that this
> is not identical to the information contained in the Backup Express catalog.
> In particular, it only provides information on the last 30 days worth of
> jobs.
> 
> <options>:
> 
> -h                 : Help.
> 
> USAGE; \"$0 \"
> 
> Type \"$0 -h\" for help
> ";
> # <dependencies>:
> # None.
> #
> # <outputs>:
> # This script uses a temporary file $SSPRODIR/bin/jobrpt.tmp
> # The report is written to standard output
> 
> ###########################################################################
> # Initialization
> ###########################################################################
> # load modules
> use strict;
> use English;
> use Getopt::Std;
> use Cwd;
> # Set defaults
> 
> #my $CUR_DIR=cwd;
> #my $SSPRODIR=$ENV{SSPRODIR};
> 
> # Check for $SSPRODIR.
> #if ("$SSPRODIR" eq "") {
       ^         ^
You shouldn't put quotes around single variables.

perldoc -q quoting

Found in /usr/lib/perl5/5.6.0/pod/perlfaq4.pod
       What's wrong with always quoting "$vars"?


> # if (! -x "$CUR_DIR\/ssbrowse") {
                      ^^
Slashes don't have to be escaped unless your quote delimiters are also
slashes.


> #  die "$0: ERRPR: You must either set SSPRODIR or run this script from
> Backup Express bin directory.\n\n$HELP";
> # }
> #        chdir '..';
> #        $SSPRODIR=cwd;
> #        chdir $CUR_DIR;
> #}
> 
> #my $RPTFILE="$SSPRODIR/bin/jobrpt.tmp";
> my $RPTFILE="jobrpt.tmp";
> 
> ###########################################################################
> #       Parse arguments
> ###########################################################################
> getopts('hn:p:o:s:') or die "$HELP";
                              ^     ^   unnesessary

> #($Getopt::Std::opt_h) and die $HELP;
> 
> my $JOB_NAME="";
> if (@ARGV) {
>  $JOB_NAME=shift @ARGV;
> }
> (@ARGV==0) or die "$0: ERROR: Too many arguments on the command line.";
> 
> # Get a temporary file id
> my $COUNT=0;
> #my $OUT_TEMP="$SSPRODIR/jobrpt.$COUNT";
> my $OUT_TEMP="jobrpt.$COUNT";
> my ($njob, @line, $current);
> my (@jobid, %starttime, %jobname, %jobtype, %status, %endtime, %xfer,
> %xfer1,%xferfiles,%volser, );
> my $grepexpr;
> 
> format =
> @<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<
> @<<<<<<<<<<<<<<<<<<<<<<<<<
> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<
> $jobname{$_}, $jobtype{$_}, $starttime{$_}, $endtime{$_},
> $xfer{$_},$xfer1{$_}, $volser{$_},
> .
> 
> #grep all the job logs for the following codes:
> #  Job start
> my $JOBSTART  = 'SNBJH_3203J';
> #  Condense start
> my $CONDSTART =  'SNBJH_3403';
> #  Job end
> my $JOBEND  = 'SNBJH_3211J';
> #  Condense end
> my $CONDEND =  'SNBJH_3401J';
> #  Job cancelled
> my $JOBCANC =  'SNBJH_3258J';
> #  Job fail
> my $JOBFAIL = '-1';
> #  Volsers used
> my $VOLUSED =  'SNBJH_3320J';
> #  Transfer stats
> my $XFER1 =  'SNBJH_3710J';
> my $XFER =  'SNBJH_3308J';
> #  Xfer File stats
> my $XFERFILES =  'SNBJH_3304J';
> my %statcode =
>     ( "$JOBEND" => '0',
        ^       ^

>       "$CONDEND" => '0',
        ^        ^

>       "$JOBFAIL" => '-1',
        ^        ^

>       "$JOBCANC" => '-2',
        ^        ^
Quoting these variables is so redundant and unnecessary.

>      );
> my $MAXVLENGTH = 60;
> my $search;
> 
> while (-f $OUT_TEMP) {
>         $COUNT += 1;
>         #$OUT_TEMP="$SSPRODIR/jobrpt.$COUNT";
>         $OUT_TEMP="jobrpt.$COUNT";
> }
> 
> # Open the temp file for write
> # Check to make sure that job exists
> 
> open (OUTF,">$OUT_TEMP") || die "Cannot open output file $!";
        ^^^^
Here you open the file handle OUTF to write to the file $OUT_TEMP.


> #$grepexpr = "egrep
> \"$JOBSTART\|$CONDSTART\|$JOBEND\|$CONDEND\|$JOBCANC\|$VOLUSED\" \` ls -tr
  ^^         ^^          ^^       ^^        ^^        ^^        ^^ ^^
The vertial bar does not have to be escaped in double quoted strings. 
You can avoid all the back-slashing by using a different quoting
operator like qq().


> ../logs/3*.log\` >$OUT_TEMP";
> #system "$grepexpr";
          ^         ^  unnecessary.

> #my $files = `ls -t 3*.log`;
> #print $files;
> #$grepexpr = "grep32
> \"$JOBSTART\|$CONDSTART\|$JOBEND\|$CONDEND\|$JOBCANC\|$VOLUSED\"
> $files>$OUT_TEMP";
> #system "$grepexpr";
          ^         ^  unnecessary.

> #print $OUT_TEMP;
> my @files = glob('3*.log');
> $grepexpr = "egrep
> \"$JOBSTART\|$CONDSTART\|$JOBEND\|$CONDEND\|$JOBCANC\|$XFER\|$XFER1\|$XFERFI
> LES\|$VOLUSED\" @files>$OUT_TEMP";
> system "$grepexpr";
         ^         ^  unnecessary.

> print $OUT_TEMP;
> close OUTF;
        ^^^^
Here you close the file handle OUTF but you haven't written anything to
the file.  Perhaps you want:

print OUTF $OUT_TEMP;
close OUTF;


> $njob = 0;
> # Open the temp file for read
> open (OUTF,"$OUT_TEMP") || die "Cannot open file for read, $!";
             ^         ^  unnecessary.

> while (<OUTF>) {
>     @line = split(' ');
> # First the grep for the start of the job
>     print "Seventh token is $line[7]\n";
>     $search = '$line[7] =~ /' . "$JOBSTART" . '/';
                                  ^         ^  unnecessary.

>     if (eval $search) {

Is there any reason that you are using eval instead of just using the
regular expression here?  Perhaps you should be using the qr// operator
for these variables like $JOBSTART.


>  chop $line[14]; # Remove the ")"
                     ^^^^^^^^^^^^^^
How do you know it is removing a ")"?

  chop $line[14] if substr( $line[14], -1 ) eq  ')';

Or:

  $line[14] =~ s/\)$//;


>  $current = $line[14];
>  $jobid[$njob++] = $current;
>  $starttime{$current} = $line[2] . " ";
>  $starttime{$current} .= $line[3] . " ";
>  $starttime{$current} .= $line[4] . " ";
>  $starttime{$current} .= $line[5] . " ";
>  $starttime{$current} .= $line[6];

  $starttime{$current} = join ' ', @line[2 .. 6];


>  $jobname{$current} = $line[11];
>  $jobtype{$current} = $line[17];
>  chop $jobtype{$current};

What character are you removing here?


>  $status{$current} = $statcode{$JOBFAIL};  #  Default
>  $endtime{$current} .= $starttime{$current}; # Default
>         $volser{$current} = '';
>     }

[snip]



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to