- update keyword filters - update reporting detail levels - better targeting of useful information at summary detail level
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| 
 | |
| #############################################################################
 | |
| # $Id$
 | |
| #############################################################################
 | |
| # Log: CloudFlare updater script (cfddns)
 | |
| # Revision 2.0  2021/05/08
 | |
| # Written by Asif Bacchus
 | |
| #############################################################################
 | |
| 
 | |
| 
 | |
| use strict;
 | |
| 
 | |
| ### Get Logwatch detail level
 | |
| my $detailLevel = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
 | |
| 
 | |
| 
 | |
| ### Declare variables
 | |
| my $summaryErr;
 | |
| my $summaryFailedUpdate;
 | |
| my $summaryInvalidHost;
 | |
| my $summaryUpdated;
 | |
| my $summaryUpToDate;
 | |
| 
 | |
| my %reportHash = ();
 | |
| my $key;
 | |
| 
 | |
| 
 | |
| ### Minimal detail level: provide summary data only
 | |
| if ($detailLevel == 0) {
 | |
|     ### process logfile and summarize message types
 | |
|     while (defined(my $ThisLine = <STDIN>)) {
 | |
|         if ($ThisLine =~ /ERROR: Unable to update IP address/) {
 | |
|             $summaryFailedUpdate++;
 | |
|         }
 | |
|         elsif ($ThisLine =~ /ERROR: /) {
 | |
|             $summaryErr++;
 | |
|         }
 | |
|         elsif ($ThisLine =~ /WARNING: Cannot find existing record/) {
 | |
|             $summaryInvalidHost++;
 | |
|         }
 | |
|         elsif ($ThisLine =~ /SUCCESS: /) {
 | |
|             $summaryUpdated++;
 | |
|         }
 | |
|         elsif ($ThisLine =~ /already up-to-date/) {
 | |
|             $summaryUpToDate++;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     ### fill hash table with headings and summary counts
 | |
|     if ($summaryUpdated > 0) {
 | |
|         $reportHash{"Entries successfully updated"} = $summaryUpdated;
 | |
|     }
 | |
|     if ($summaryUpToDate > 0) {
 | |
|         $reportHash{"Entries already up-to-date"} = $summaryUpToDate;
 | |
|     }
 | |
|     if ($summaryInvalidHost > 0) {
 | |
|         $reportHash{"Undefined hosts"} = $summaryInvalidHost;
 | |
|     }
 | |
|     if ($summaryFailedUpdate > 0) {
 | |
|         $reportHash{"Hosts failed to update"} = $summaryFailedUpdate;
 | |
|     }
 | |
|     if ($summaryErr > 0) {
 | |
|         $reportHash{"Other errors"} = $summaryErr;
 | |
|     }
 | |
| 
 | |
|     ### print hash table
 | |
|     foreach $key (sort keys %reportHash) {
 | |
|         print "$key: $reportHash{$key}\n";
 | |
|     }
 | |
| }
 | |
| ### Levels 1-4 provide the actual error, status and success messages instead of
 | |
| ### a summary count
 | |
| elsif ($detailLevel >= 1 && $detailLevel <= 4) {
 | |
|     while (defined(my $ThisLine = <STDIN>)) {
 | |
|         if ($ThisLine =~ /ERROR: /) {
 | |
|             print $ThisLine;
 | |
|         }
 | |
|         elsif ($ThisLine =~ /WARNING: Cannot find existing/) {
 | |
|             print $ThisLine;
 | |
|         }
 | |
|         elsif ($ThisLine =~ /SUCCESS: /) {
 | |
|             print $ThisLine;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ### Any level 5 or above will echo the entire log. The log itself is purposefully terse
 | |
| ### so while this level of detail is likely rarely needed, it is still not an overwhelming
 | |
| ### level of detail.
 | |
| ### Generally, however, using this level of detail should only be done if you cannot view
 | |
| ### the actual log file directly for whatever reason. The actual log file is colour-coded
 | |
| ### for easier debugging.
 | |
| elsif ($detailLevel > 5) {
 | |
|     while (defined(my $ThisLine = <STDIN>)) {
 | |
|         print $ThisLine;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| ### Exit gracefully
 | |
| exit (0);
 | |
| 
 | |
| # vi: shiftwidth=3 tabstop=3 et
 | |
| # Local Variables:
 | |
| # mode: perl
 | |
| # perl-indent-level: 3
 | |
| # indent-tabs-mode: nil
 | |
| # End:
 |