view common/logwatch/http-error @ 242:7d8e664ebcc9 puppet-3.6

Change owner/group on Nextcloud for easy upgrade We now prevent Apache writing to files using SELinux, so it is secure during normal operation but can be upgraded through the web app by disabling SELinux
author IBBoard <dev@ibboard.co.uk>
date Fri, 20 Dec 2019 15:17:43 +0000
parents 8316d4e55e92
children
line wrap: on
line source

#!/usr/bin/perl
#
##########################################################################
## Copyright (c) 2016 Logwatch
## Covered under the included MIT/X-Consortium License:
##    http://www.opensource.org/licenses/mit-license.php
## All modifications and contributions by other persons to
## this script are assumed to have been donated to the
## Logwatch project and thus assume the above copyright
## and licensing terms.  If you want to make contributions
## under your own copyright or a different license this
## must be explicitly stated in the contribution an the
## Logwatch project reserves the right to not accept such
## contributions.  If you have made significant
## contributions to this script and want to claim
## copyright please contact logwatch-devel@lists.sourceforge.net.
##########################################################################

use diagnostics;
use strict;

my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;

sub CustomizeErrorString {
   my ($LogLevel, $ErrorCode, $Description) = @_;
   # This function is only invoked when detail is set to 8 or 9.
   # Here you would modify the Description.  Some Description strings
   # may differ only on some printed parameters, and it is preferable
   # to group them together.  Examples of these may be process numbers,
   # IP addresses, port numbers, or file names.  The purpose of this
   # function is to "collapse" these different messages into the same
   # array entry.

   # For now, simply return the string.
   return($Description);
}

my %LogMessages = ();
my $MatchFilter = $ENV{'http_error_matchfilter'} || "";
my $ReportFilter = $ENV{'http_error_reportfilter'} || "";

while (defined(my $ThisLine = <STDIN>)) {
   if (my ($LogLevel, $ErrorCode, $Description) =
      ($ThisLine =~ /:(.*?)\].*(AH\d{5}): (.*)/) ) {
   # $MatchFilter is a variable that is set by setting the
   # $HTTP_Error_MatchFilter variable in the conf/services/http-error.conf
   # file.  It is executed here, before any other matching statements.
   eval $MatchFilter;
   if ($@) {
      print $@;
      print "While processing MatchFilter:\n$MatchFilter\n";
   }
   # $ThisLine might have been reset (undef, or empty string) in $MatchFilter
   next unless $ThisLine;

      if (($Detail == 8) || ($Detail == 9)) {
         $Description = CustomizeErrorString($LogLevel, $ErrorCode, $Description);
      }
      if (($Detail >= 1) || ($LogLevel =~ "emerg|alert|crit|error")) {
         $LogMessages{$LogLevel}{$ErrorCode}{$Description}++;
      }
   }
}

# $ReportFilter is a variable that is set by setting the
# $HTTP_Error_ReportFilter variable in the conf/services/http-error.conf
# file.  It is executed here, before any other printing statements.
eval $ReportFilter;
if ($@) {
   print $@;
   print "While processing ReportFilter:\n$ReportFilter\n";
}

if (keys %LogMessages) {
   my $Count = 0;
   foreach my $LogLevel (keys %LogMessages) {
      printf("\nLevel %-6s", $LogLevel);
      foreach my $ErrorCode (keys %{$LogMessages{$LogLevel}}) {
         print "\n   Error Code: $ErrorCode" if $Detail >= 5;
         foreach my $Description (keys %{$LogMessages{$LogLevel}{$ErrorCode}}) {
            if ($Detail >= 9) {
               print "\n      $Description:  ";
               print "$LogMessages{$LogLevel}{$ErrorCode}{$Description} Time(s)";
            }
            $Count += $LogMessages{$LogLevel}{$ErrorCode}{$Description};
         } # foreach $Description
         if (($Detail >= 5) && ($Detail < 9)) { 
            printf(":  %5d Time(s)", $Count);
            $Count = 0;
            if ($Detail >=6) {
               print "\n      E.g.: ";
               # print only first entry (index 0)
               my $EG_string = (keys %{$LogMessages{$LogLevel}{$ErrorCode}})[0];
               if (($Detail == 6) && (length($EG_string) > 66)) {
                  printf ("%.62s ...", $EG_string);
               } else {
                  print $EG_string;
               }
            }
         }
      } # foreach $ErrorCode
      if ($Detail < 5) { 
         printf("%s%5d%s", ":  ", $Count, " Time(s)");
         $Count = 0;
      }
   } # foreach $LogLevel
} # if keys %LogMessages

exit(0);

# vi: shiftwidth=3 tabstop=3 syntax=perl et
# Local Variables:
# mode: perl
# perl-indent-level: 3
# indent-tabs-mode: nil
# End: