Blob Blame History Raw
##########################################################################
##########################################################################

use strict;

my ($pilot, $user, $ip, $version, $reason, $Msg, $total);
my %Start = ();
my %Login = ();
my %TakeChar = ();
my %Ping = ();
my %Logout = ();

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

# Interesting events:
#19 Feb 17:11:10 Server runs at 50 frames per second
#21 Feb 05:54:27 Welcome Man=Tiago@UR| (217.129.39.100/3086) (version 4501)
#21 Feb 05:54:28 Man (6) starts at startpos 0.
#21 Feb 05:54:46 Checking Address:(217.129.39.100)
#21 Feb 05:54:47 Checking Address:(217.129.39.100)
#21 Feb 05:54:50 Checking Address:(217.129.39.100)
#21 Feb 05:54:50 Checking Address:(217.129.39.100)
#21 Feb 05:55:18 Goodbye Man=Tiago@UR| ("timeout 08")



while (defined(my $ThisLine = <STDIN>)) {
   chomp($ThisLine);
   if ( ($Msg) = ($ThisLine =~ /Server runs at .*$/)) {
      $Start{$Msg}++;
   } elsif ( ($pilot,$user,$ip,$version) = ($ThisLine =~ /Welcome ([^=]+)=([^|]+)\|.* \(([^\)]+)\) \(([^\)]+)\)$/)) {
      $Login{$pilot}{$user}{$ip}{$version}++;
   } elsif ( ($pilot) = ($ThisLine =~ /([^ ]+) \(\d+\) starts at startpos/)) {
      $TakeChar{$pilot}++;
   } elsif ( ($ip) = ($ThisLine =~ /Checking Address:\((.*)\)$/)) {
      $Ping{$ip}++;
   } elsif ( ($pilot,$user,$reason) = ($ThisLine =~ /Goodbye ([^=]+)=([^|]+)\|.* \((.*)\)$/)) {
      $Logout{$pilot}{$user}{$reason}++;
   }  
}

if (keys %Start) {
   if ($Detail >= 5) {
      foreach my $Msg (sort keys %Start) {
         if ($Start{$Msg} > 1) {
            print "Server started ($Start{$Msg} times)\n";
         } else {
            print "Server started once\n";
         }
      }
   } else {
      my $total;
      foreach my $Msg (keys %Start) {
         $total += $Start{$Msg};
      }
      print "Server started $total times\n";
   }
}

if (keys %Login) {
   print "\n";
   if ($Detail >= 5) {
      foreach my $pilot (sort keys %Login) {
         foreach my $user (sort keys %{ $Login{$pilot} }) {
            my $total=0;
            foreach my $ip (keys %{ $Login{$pilot}{$user} }) {
               foreach my $version (keys %{ $Login{$pilot}{$user}{$ip} }) {
                  $total += $Login{$pilot}{$user}{$ip}{$version};
               }
            }
            print "Pilot $pilot ($user) logged in $total times\n";
         }
      }
   } else {
      my $total;
      foreach my $pilot (keys %Login) {
         foreach my $user (keys %{ $Login{$pilot} }) {
            foreach my $ip (keys %{ $Login{$pilot}{$user} }) {
               foreach my $version (keys %{ $Login{$pilot}{$user}{$ip} }) {
                  $total += $Login{$pilot}{$user}{$ip}{$version};
               }
            }
         }
      }
      print "$total users logged in\n";
   }
}

if (keys %TakeChar) {
   print "\n";
   if ($Detail >= 5) {
      foreach my $pilot (sort keys %TakeChar) {
         if ($TakeChar{$pilot} > 1) {
            print "Player $pilot joined $TakeChar{$pilot} times\n"
         } else {
            print "Player $pilot joined once\n"
         }
      }
   } else {
      my $total=0;
      foreach my $pilot (keys %TakeChar) {
         $total += $TakeChar{$pilot};
      }
      print "$total players entered the world\n";
   }
}

if (keys %Logout) {
   print "\n";
   if ($Detail >= 5) {
      foreach my $pilot (sort keys %Logout) {
         foreach my $user (sort keys %{ $Logout{$pilot} }) {
            foreach my $reason (keys %{ $Logout{$pilot}{$user} }) {
               print "Pilot $pilot ($user) logged out $Logout{$pilot}{$user}{$reason} times ($reason)\n";
            }
         }
      }
   } else {
      my $total=0;
      foreach my $pilot (keys %Logout) {
         foreach my $user (keys %{ $Logout{$pilot} }) {
            foreach my $reason (keys %{ $Logout{$pilot}{$user} }) {
               $total += $Logout{$pilot}{$user}{$reason};
            }
         }
      }
      print "$total users logged out\n";
   }
}

if (keys %Ping) {
   print "\n";
   if ($Detail >= 5) {
      foreach my $ip (sort keys %Ping) {
         if ($Ping{$ip} > 1) {
            printf "Pinged %-16s %3d times\n", ($ip,$Ping{$ip})
         } else {
            printf "Pinged %-16s once\n", ($ip)
         }
      }
   } else {
      my $total=0;
      foreach my $ip (keys %Ping) {
         $total += $Ping{$ip};
      }
      print "Pinged " . keys(%Ping) . " hosts $total times\n";
   }
}


exit(0);

# vi: shiftwidth=3 tabstop=3 syntax=perl et