#!/usr/bin/env perl $threadHistory = 5; $ipHistory = 5; while (<>) { m/\s[A-Z]+\s+\[([^\]]+)\]\s/ || next; $thread = $1; if (m/(\d+\.\d+\.\d+\.\d+)/) { pushIp($1, $_); } if (m/\scollection failed for\s(\S+)/) { $ip = $1; print("--- Last for thread ---\n"); printLastForThread($thread, $_); print("--- Last for IP ---\n"); printLastForIp($ip, $_); print("--- Data collection failed ---\n"); print($_); print("\n"); } else { pushThread($thread, $_); } } sub printLastForThread { my $thread = shift(@_); my $line = shift(@_); if (exists($threads{$thread})) { print(@{$threads{$thread}}); } } sub pushThread { my $thread = shift(@_); my $line = shift(@_); if (exists($threads{$thread})) { $size = scalar(@{$threads{$thread}}); if ($size > ($threadHistory - 1)) { splice(@{$threads{$thread}}, 0, $size - $threadHistory - 1); } } push(@{$threads{$thread}}, $line); } sub printLastForIp { my $ip = shift(@_); my $line = shift(@_); if (exists($ips{$ip})) { print(@{$ips{$ip}}); } } sub pushIp { my $ip = shift(@_); my $line = shift(@_); if (exists($ips{$ip})) { $size = scalar(@{$ips{$ip}}); if ($size > ($ipHistory - 1)) { splice(@{$ips{$ip}}, 0, $size - $ipHistory - 1); } } push(@{$ips{$ip}}, $line); }