Blame scripts/services/vdr

Packit 57988d
Packit 57988d
##########################################################################
Packit 57988d
# VDR script for Logwatch 
Packit 57988d
#
Packit 57988d
# Copyright (c) 2012 Reiner Buehl 
Packit 57988d
# Covered under the included MIT/X-Consortium License:
Packit 57988d
#    http://www.opensource.org/licenses/mit-license.php
Packit 57988d
# Permission is hereby granted, free of charge, to any person obtaining a
Packit 57988d
# copy of this software and associated documentation files (the "Software"),
Packit 57988d
# to deal in the Software without restriction, including without limitation
Packit 57988d
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
Packit 57988d
# and/or sell copies of the Software, and to permit persons to whom the
Packit 57988d
# Software is furnished to do so, subject to the following conditions:
Packit 57988d
#
Packit 57988d
# The above copyright notice and this permission notice shall be included
Packit 57988d
# in all copies or substantial portions of the Software.
Packit 57988d
#
Packit 57988d
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Packit 57988d
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Packit 57988d
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Packit 57988d
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
Packit 57988d
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
Packit 57988d
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Packit 57988d
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit 57988d
##########################################################################
Packit 57988d
Packit 57988d
use strict;
Packit 57988d
use Logwatch ':ip';
Packit 57988d
Packit 57988d
my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
Packit 57988d
my $IgnoreUnmatched = $ENV{'vdr_ignore_unmatched'} || 0;
Packit 57988d
my $TSContinuityErrors = 0;
Packit 57988d
my $PESPacketShortened = 0;
Packit 57988d
my %FrontendTimeout = ();
Packit 57988d
my $TransferBufferOverflow = 0;
Packit 57988d
my @UnknownPicTypeError = ();
Packit 57988d
my %ChannelNameChange = ();
Packit 57988d
my %TimerSet = ();
Packit 57988d
my %RecordingDeleted = ();
Packit 57988d
my @OtherList;
Packit 57988d
Packit 57988d
while (defined(my $ThisLine = <STDIN>)) {
Packit 57988d
   next if ($ThisLine eq '');
Packit 57988d
Packit 57988d
   if (
Packit 57988d
      # filter out svdrp connect messages
Packit 57988d
      ($ThisLine =~ /connect from .*, port .* - accepted/)
Packit 57988d
      or ($ThisLine =~ /closing SVDRP connection/)
Packit 57988d
      # filter out EPGSearch and Text2Skin messages
Packit 57988d
      or ($ThisLine =~ /EPGSearch:/)
Packit 57988d
      or ($ThisLine =~ /Text2Skin:/)
Packit 57988d
      # filter out pid, ca and caid changes
Packit 57988d
      or ($ThisLine =~ /changing pids of channel/)
Packit 57988d
      or ($ThisLine =~ /changing ca descriptors of channel/)
Packit 57988d
      or ($ThisLine =~ /changing caids of channel .* from .* to .*/)
Packit 57988d
      or ($ThisLine =~ /changing portal name of channel .* from .* to .*/)
Packit 57988d
      # filter out event status messages
Packit 57988d
      or ($ThisLine =~ /channel [0-9]+ \(.+\) event.*status [0-9]+/)
Packit 57988d
      # filter out directory scanner thread messages
Packit 57988d
      or ($ThisLine =~ /video directory scanner thread started/)
Packit 57988d
      or ($ThisLine =~ /video directory scanner thread ended/)
Packit 57988d
      # filter out delete recordings thread messages
Packit 57988d
      or ($ThisLine =~ /remove deleted recordings thread started/)
Packit 57988d
      or ($ThisLine =~ /remove deleted recordings thread ended/)
Packit 57988d
      # filter out file name truncate messages
Packit 57988d
      or ($ThisLine =~ /timer file name too long for VFAT file system/)
Packit 57988d
      or ($ThisLine =~ /timer file name truncated to/)
Packit 57988d
      or ($ThisLine =~ /timer .* modified/)
Packit 57988d
      # filter out timer status change messages
Packit 57988d
      or ($ThisLine =~ /timer .* added/)
Packit 57988d
      or ($ThisLine =~ /timer .* start/)
Packit 57988d
      or ($ThisLine =~ /timer .* stop/)
Packit 57988d
      or ($ThisLine =~ /deleting timer/)
Packit 57988d
      or ($ThisLine =~ /cleaning up schedules data/)
Packit 57988d
      # filter out additional timer start messages
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] Title:/)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] executing .*vdr-recordingaction before/)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] executing .*vdr-recordingaction after/)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] record /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] recording to /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] creating directory /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] recording thread started /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] recording thread ended /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] transfer thread started /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] transfer thread ended /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] file writer thread started /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] file writer thread ended /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] receiver on device [0-9]+ thread started /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] receiver on device [0-9]+ thread ended /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] TS buffer on device [0-9]+ thread started /)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] TS buffer on device [0-9]+ thread ended /)
Packit 57988d
      # filter out other messages
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] switching device [0-9]+ to channel [0-9]+/)
Packit 57988d
      or ($ThisLine =~ /vdr: \[[0-9]+\] buffer stats: [0-9]+ \([0-9]+%\) used/)
Packit 57988d
      or ($ThisLine =~ /timer ([0-9]+) \(.*\) set to no event/)
Packit 57988d
      or ($ThisLine =~ /timer ([0-9]+) \(.*\) entered VPS margin/)
Packit 57988d
      or ($ThisLine =~ /switching to channel [0-9]+/)
Packit 57988d
      or ($ThisLine =~ /setting audio track to [0-9]+/)
Packit 57988d
      or ($ThisLine =~ /retuning due to modification of channel [0-9]+/)
Packit 57988d
      ) {
Packit 57988d
      # ignore the above strings
Packit 57988d
   } elsif ($ThisLine =~ /TS continuity error/) {
Packit 57988d
      $TSContinuityErrors++;
Packit 57988d
   } elsif ($ThisLine =~ /PES packet shortened/) {
Packit 57988d
      $PESPacketShortened++;
Packit 57988d
   } elsif ( my ($Frontend,$Channel) = ($ThisLine =~ /frontend ([0-9]+) timed out while tuning to channel ([0-9]+)/) ) {
Packit 57988d
      push @{$FrontendTimeout{$Frontend}}, $Channel;
Packit 57988d
   } elsif ($ThisLine =~ /clearing transfer buffer to avoid overflows/) {
Packit 57988d
      $TransferBufferOverflow++;
Packit 57988d
   } elsif ($ThisLine =~ /buffer usage: [0-9]+%/) {
Packit 57988d
      # ignore the above string
Packit 57988d
   } elsif ( my ($PicType) = ($ThisLine =~ /ERROR: unknown picture type '([0-9]+)'/) ) {
Packit 57988d
      push @UnknownPicTypeError,$PicType;
Packit 57988d
   } elsif ( my ($Channel, $From, $To) = ($ThisLine =~ /changing name of channel ([0-9]+) from '(.+)' to '(.+)'/) ) {
Packit 57988d
      $ChannelNameChange{$Channel} = "'$From' to '$To'";
Packit 57988d
   } elsif ( my ($TimerNumber, $TimerEvent) = ($ThisLine =~ /timer ([0-9]+) \(.*\) set to event (.*)$/) ) {
Packit 57988d
      $TimerSet{$TimerEvent} = "$TimerNumber";
Packit 57988d
   } elsif ( my ($RecordingName) = ($ThisLine =~ /removing recording (.*)$/) ) {
Packit 57988d
      $RecordingDeleted{$RecordingName} = "1";
Packit 57988d
   } else {
Packit 57988d
      # Report any unmatched entries...
Packit 57988d
      push @OtherList,$ThisLine;
Packit 57988d
   }
Packit 57988d
}
Packit 57988d
Packit 57988d
if ($TSContinuityErrors > 0) {
Packit 57988d
   print "\n$TSContinuityErrors TS continuity error(s)\n";
Packit 57988d
}
Packit 57988d
Packit 57988d
if ($PESPacketShortened > 0) {
Packit 57988d
   print "\n$PESPacketShortened PES packets shortened\n";
Packit 57988d
}
Packit 57988d
Packit 57988d
if (keys %FrontendTimeout) {
Packit 57988d
   print "\n";
Packit 57988d
   foreach my $Frontend (sort keys %FrontendTimeout) {
Packit 57988d
      my %counts = ();
Packit 57988d
      for (@{$FrontendTimeout{$Frontend}}) {
Packit 57988d
         $counts{$_}++;
Packit 57988d
      }
Packit 57988d
      my $result = "";
Packit 57988d
      foreach my $keys (keys %counts) {
Packit 57988d
         $result .= "$keys ($counts{$keys} times), ";
Packit 57988d
      }
Packit 57988d
      $result =~ s/, $//;
Packit 57988d
      print "Frontend $Frontend timed out when changing to channels: $result\n";
Packit 57988d
   }
Packit 57988d
}
Packit 57988d
Packit 57988d
if ($TransferBufferOverflow > 0) {
Packit 57988d
   print "\n$TransferBufferOverflow transfer buffer overflows\n";
Packit 57988d
}
Packit 57988d
Packit 57988d
if ($#UnknownPicTypeError > 0) {
Packit 57988d
   print "\nUnknown picture type errors for picture types: ";
Packit 57988d
   my %counts = ();
Packit 57988d
   for (@UnknownPicTypeError) {
Packit 57988d
      $counts{$_}++;
Packit 57988d
   }
Packit 57988d
   my $result = "";
Packit 57988d
   foreach my $keys (keys %counts) {
Packit 57988d
      $result .= "$keys ($counts{$keys} times), ";
Packit 57988d
   }
Packit 57988d
   $result =~ s/, $//;
Packit 57988d
   print "$result\n";
Packit 57988d
}
Packit 57988d
Packit 57988d
if (keys %ChannelNameChange) {
Packit 57988d
   if($Detail >= 10) {
Packit 57988d
      print "\n";
Packit 57988d
      foreach my $Channel (sort keys %ChannelNameChange) {
Packit 57988d
         print "Name of channel $Channel changed from ", $ChannelNameChange{$Channel}, "\n";
Packit 57988d
      }
Packit 57988d
   } elsif ($Detail >= 5) {
Packit 57988d
      my $number = keys %ChannelNameChange;
Packit 57988d
      print "\n$number channel name changes\n";
Packit 57988d
   }
Packit 57988d
}
Packit 57988d
Packit 57988d
if (keys %TimerSet) {
Packit 57988d
   if($Detail >= 15) {
Packit 57988d
      print "\n";
Packit 57988d
      foreach my $Timer (sort keys %TimerSet) {
Packit 57988d
         print "Timer set to event $Timer\n";
Packit 57988d
      }
Packit 57988d
   } elsif ($Detail >= 10) {
Packit 57988d
      my $number = keys %TimerSet;
Packit 57988d
      print "\n$number timers set\n";
Packit 57988d
   }
Packit 57988d
}
Packit 57988d
Packit 57988d
if (keys %RecordingDeleted) {
Packit 57988d
   if($Detail >= 15) {
Packit 57988d
      print "\n";
Packit 57988d
      foreach my $Recording (sort keys %RecordingDeleted) {
Packit 57988d
         print "DEleted recording $Recording\n";
Packit 57988d
      }
Packit 57988d
   } elsif ($Detail >= 10) {
Packit 57988d
      my $number = keys %RecordingDeleted;
Packit 57988d
      print "\n$number recordings deleted\n";
Packit 57988d
   }
Packit 57988d
}
Packit 57988d
Packit 57988d
if (($#OtherList >= 0) and (not $IgnoreUnmatched)) {
Packit 57988d
   print "\n**Unmatched Entries**\n";
Packit 57988d
   print @OtherList;
Packit 57988d
}
Packit 57988d
Packit 57988d
exit(0);
Packit 57988d
Packit 57988d
# vi: shiftwidth=3 tabstop=3 syntax=perl et
Packit 57988d
Packit 57988d