Changeset 48 for trunk/pg_log

Show
Ignore:
Timestamp:
08/21/09 17:19:51 (5 years ago)
Author:
denish
Message:

Fixed log script to check for correct pattern of files in pg_log directory

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pg_log/pg_log_monitor.pl

    r38 r48  
    1111    $TO_ADDRESS=''; 
    1212    $FROM_ADDRESS=''; 
     13    $ERROR_LINE_FLAGS=''; 
    1314    $day = (localtime)[3]; 
    1415    $month = (localtime)[4]; 
     
    3738            $TO_ADDRESS = $setting[1]; 
    3839            chomp($TO_ADDRESS); 
     40        }elsif($setting[0] =~ m/^error_flags/){ 
     41            chomp($setting[1]); 
     42            my @error_flags = split(',', $setting[1]); 
     43            $ERROR_LINE_FLAGS = join('|', @error_flags); 
    3944        } 
    4045    } 
     
    97102   #Populate array of all logfile path names, sorted in descending order 
    98103    opendir(FH, $directory); 
    99       my @file_list = grep(/\.log$/, readdir(FH)); 
     104      my @file_list = grep(/^postgresql-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.log$/, readdir(FH)); 
    100105    closedir(FH); 
    101106     
     
    214219    while(my $line = <FH>){ 
    215220       chomp($line); 
    216        ($error_message) = $line =~ m/ERROR\:\s*(.+)/; 
     221       (my $placeholder, $error_message) = $line =~ m/($ERROR_LINE_FLAGS)\:\s*(.+)/; 
    217222       if($error_message){ 
    218223            $error_message =~ s/^\s+//; 
     
    358363sub generate_output{ 
    359364 
    360       ($report_date) = $logfile_1_path =~ m/(\d{4}-\d{2}-\d{2})\.log$/; 
    361           
    362       $output  =  "\nReport For Date: $report_date\n"; 
    363       $output .=  "Total New Unique Errors Found: ".@new; 
     365    ($report_date) = $logfile_1_path =~ m/(\d{4}-\d{2}-\d{2})\.log$/; 
     366    my @full_new_lines; 
     367    my @full_recurring_lines; 
     368 
     369    if(scalar(@new) > 0){ 
     370        $output .= "\nNew Errors:\n"; 
     371        $output .= "--------------------------------------------------\n";     
     372        
     373        foreach $error (@new){ 
     374         
     375            $error = replace_special_chars($error); 
     376         
     377            open(FH, '<', $logfile_1_path); 
     378            my $is_duplicate=0; 
     379            while(my $rawline = <FH>){ 
     380            $is_duplicate=0; 
     381            chomp($rawline); 
     382            if($rawline =~ $error){ 
     383               foreach $full_line (@full_new_lines){ 
     384                   if($full_line =~ $error){ 
     385                      $is_duplicate=1; 
     386                   } 
     387               } 
     388               push(@full_new_lines, $rawline) unless $is_duplicate == 1; 
     389            } 
     390        } 
     391            
     392           close(FH); 
     393 
     394        } 
     395       
     396        @full_new_lines = sort @full_new_lines;   
     397        my $line_count = 0; 
     398        foreach my $full_line (@full_new_lines){ 
     399            $line_count++; 
     400            $output .= "[".$line_count."]\n"; 
     401            $output .= $full_line."\n"; 
     402            open(FH, '<', $logfile_1_path); 
     403                while($line = <FH>){ 
     404                    chomp($line); 
     405                    if($line !~ m/FATAL\:/){ 
     406                    if($line eq $full_line){ 
     407                        my $start_byte_count = tell FH; 
     408 
     409                        for(my $x = 1; $x <= 2; $x++){ 
     410                           my $context_line = <FH>; 
     411                           if($context_line =~ m/$ERROR_LINE_FLAGS\:/){ 
     412                              break;  
     413                           } 
     414                           if($context_line =~ m/STATEMENT\:|HINT\:|DETAIL\:|CONTEXT\:|LOG\:/){ 
     415                              $output .= $context_line; 
     416                           } 
     417                        } 
     418                         
     419 
     420                        my $end_byte_count = tell FH; 
     421                        my $rewind_byte_count = -1 * ($end_byte_count - $start_byte_count); 
     422                        seek FH, $rewind_byte_count, 1; 
     423                    } 
     424                    } 
     425                } 
     426            close(FH); 
     427        } 
     428         
     429         
     430    } 
     431 
     432    if(scalar(@recurring) > 0){ 
     433        $output .= "\nRecurring Errors:\n";     
     434        $output .= "--------------------------------------------------\n"; 
     435     
     436        foreach $error (@recurring){ 
     437 
     438           open(FH, '<', $logfile_1_path); 
     439 
     440            while(my $rawline = <FH>){ 
     441            my $is_duplicate = 0; 
     442            chomp($rawline); 
     443            if($rawline =~ $error){ 
     444                foreach $full_recurring (@full_recurring_lines){ 
     445                     if($full_recurring =~ $error){ 
     446                       $is_duplicate = 1;  
     447                     } 
     448                } 
     449                push(@full_recurring_lines, $rawline) unless $is_duplicate == 1; 
     450            } 
     451         } 
     452            
     453         close(FH); 
     454 
     455        } 
     456        
     457        @full_recurring_lines = sort @full_recurring_lines;  
     458        $line_count = 0; 
     459        foreach my $full_line (@full_recurring_lines){ 
     460            $line_count++; 
     461            $output .= "[".$line_count."]\n"; 
     462            $output .= $full_line."\n"; 
     463            open(FH, '<', $logfile_1_path); 
     464                while($line = <FH>){ 
     465                    chomp($line); 
     466                    if($line eq $full_line){ 
     467                        my $start_byte_count = tell FH; 
     468 
     469                        for(my $x = 1; $x <= 2; $x++){ 
     470                           my $context_line = <FH>; 
     471                           if($context_line =~ m/$ERROR_LINE_FLAGS\:/){ 
     472                              break;  
     473                           }  
     474                           if($context_line =~ m/STATEMENT\:|HINT\:|DETAIL\:|CONTEXT\:/){ 
     475                              $output .= $context_line; 
     476                           } 
     477                        } 
     478 
     479                        my $end_byte_count = tell FH;  
     480                        my $rewind_byte_count = -1 * ($end_byte_count - $start_byte_count); 
     481                        seek FH, $rewind_byte_count, 1;  
     482                    } 
     483                } 
     484            close(FH); 
     485        }         
     486         
     487    } 
     488     
     489      my $output_heading  =  "\nReport For Date: $report_date\nTotal New Unique Errors Found: ". @full_new_lines; 
    364490          if($static_ignore && $dynamic_ignore){ 
    365               $output .= " (Minus Static & Dynamic Ignores)\n"; 
     491              $output_heading .= " (Minus Static & Dynamic Ignores)\n"; 
    366492          } 
    367493          elsif($static_ignore){ 
    368              $output .= " (Minus Static Ignores)\n"; 
     494             $output_heading .= " (Minus Static Ignores)\n"; 
    369495          } 
    370496          elsif($dynamic_ignore){ 
    371              $output .= " (Minus Dynamic Ignores)\n"; 
     497             $output_heading .= " (Minus Dynamic Ignores)\n"; 
    372498          } 
    373499          else{ 
    374              $output .= "\n"; 
     500             $output_heading .= "\n"; 
    375501          }      
    376       $output .=  "Total Recurring Unique Errors: ".@recurring
     502      $output_heading .=  "Total Recurring Unique Errors: ". @full_recurring_lines
    377503        
    378504         if($static_ignore && $dynamic_ignore){ 
    379              $output .= " (Minus Static & Dynamic Ignores)\n"; 
     505             $output_heading .= " (Minus Static & Dynamic Ignores)\n"; 
    380506         } 
    381507         elsif($static_ignore){ 
    382              $output .= " (Minus Static Ignores)\n"; 
     508             $output_heading .= " (Minus Static Ignores)\n"; 
    383509         } 
    384510         elsif($dynamic_ignore){ 
    385              $output .= " (Minus Dynamic Ignores)\n"; 
     511             $output_heading .= " (Minus Dynamic Ignores)\n"; 
    386512         } 
    387513         else{ 
    388              $output .= "\n"; 
    389          }     
    390  
    391     if(scalar(@new) > 0){ 
    392         $output .= "\nNew Errors: (including any duplicates)\n"; 
    393         $output .= "--------------------------------------------------\n";     
    394         my @full_new_lines; 
    395          
    396         foreach $error (@new){ 
    397          
    398             $error = replace_special_chars($error); 
    399          
    400             open(FH, '<', $logfile_1_path); 
    401  
    402             while(my $rawline = <FH>){ 
    403             chomp($rawline); 
    404                 if($rawline =~ $error){ 
    405                     push(@full_new_lines, $rawline); 
    406                 } 
    407            } 
    408             
    409            close(FH); 
    410  
    411         } 
    412          
    413         @full_new_lines = sort @full_new_lines; 
    414         foreach my $full_line (@full_new_lines){ 
    415             $output .= $full_line."\n"; 
    416         } 
    417          
    418          
    419     } 
    420  
    421     if(scalar(@recurring) > 0){ 
    422         $output .= "\nRecurring Errors: (including any duplicates)\n";     
    423         $output .= "--------------------------------------------------\n"; 
    424         my @full_recurring_lines; 
    425       
    426         foreach $error (@recurring){ 
    427  
    428            open(FH, '<', $logfile_1_path); 
    429  
    430             while(my $rawline = <FH>){ 
    431             chomp($rawline); 
    432             if($rawline =~ $error){ 
    433                 push(@full_recurring_lines, $rawline); 
    434             } 
    435            } 
    436             
    437            close(FH); 
    438  
    439         } 
    440          
    441         @full_recurring_lines = sort @full_recurring_lines; 
    442         foreach my $full_line (@full_recurring_lines){ 
    443             $output .= $full_line."\n"; 
    444         }         
    445          
    446     } 
     514             $output_heading .= "\n"; 
     515         }         
     516     
     517    $output = $output_heading.$output;  
    447518     
    448519    return $output;  
     
    488559    print "   -ix: Dynamic ignore. Ignores dynamic error message templates stored in 'dynamic_ignore.dat'.\n"; 
    489560    print "   -c: Run script in cron mode. Bypasses need for manual entry and e-mails errors to DBA team.\n"; 
    490     print "   -y: Start checking from yesterday log file.\n"; 
    491561    print "   -h: Display help. Generates this message and exits script.\n"; 
    492562    print "\n\n";