#!perl if (!$ARGV[0]) { $log = "osm.log.Aug-20-1800-2008"; } else { $log = $ARGV[0]; } $| = 1; # turn off I/O buffering $true = 1; $false = 0; @spin = ('|','/','-','\\'); $input = "opensm-3.1.11-error_messages.txt"; @errors = (); print "Building list of possible error messages"; $m = 0; open(F,$input); while() { chomp; if (($m++ % 100) == 0) { print "."; } $message = (split("\t"))[3]; # print "IN >$message\n"; ($m1,$m2,$m3) = split(/\:/,$message); $message = "$m1:$m2:\n"; ($message) = split(/\%/,$message); ($message) = split(/\\n/,$message); ($message) = split(/0x/,$message); $message =~ s/\"//g; $message =~ s/\\//g; $message =~ s/\s+\Z//; next if (!$message); # print "OUT >$message\n"; push(@errors,$message); } close(F); print " completed\n"; # ensure all errors in list are unique undef %errors; @errors{@errors} = (); @errors = keys %errors; # Compress Log Files to relevant unique messages and their number of occurrences print "Scanning for known error messages...\n"; $f = 0; $c = 0; $l = 0; open(I,$log); while() { chomp; ($timestamp,$message) = split(/->/); ($month,$day,$time) = (split(/\s+/,$timestamp))[0,1,2]; $timestamp = "$month $day $time"; # printf("%s\t%d\r",$spin[$l%4],$l++); $l++; next if (length($message) == 0); next if (&known($message)); foreach $e (@errors) { $c++; if ($message =~ /$e/) { $f++; print "$f> $timestamp\t$message\n"; last; } } } close(I); print "\n\nScan Complete $l lines read, $c comparisons made\n$f Errors identified\n"; sub known { $check = $_[0]; if ($check =~ /^ osm_vendor_send: RMPP 0 length/) { return($true); } if ($check =~ /^ __osm_state_mgr_light_sweep_done_msg:/) { return($true); } if ($check =~ /^ __osm_state_mgr_sweep_light_msg:/) { return($true); } if ($check =~ /^ __osm_si_rcv_process_existing: discovery_count is:/) { return($true); } if ($check =~ /^ __osm_mcast_mgr_branch: Routing MLID/) { return($true); } if ($check =~ /^ osm_lid_mgr_process_subnet: Assigned port/) { return($true); } if ($check =~ /^ __ucast_cache_write_sw_routing: writing routing for cached switch/) { return($true); } if ($check =~ /^ osm_pi_rcv_process: Discovered port num/) { return($true); } if ($check =~ /^ __osm_ni_rcv_process_existing: Rediscovered Switch node/) { return($true); } if ($check =~ /^ osm_pi_rcv_process: Discovered port num/) { return($true); } if ($check =~ /^ \_\_osm\_ni\_rcv\_process\_existing: Rediscovered Switch node/) { return($true); } if ($check =~ /^ \_\_osm\_mcast\_mgr\_branch: Routing MLID/) { return($true); } if ($check =~ /^ osm\_lid\_mgr\_process\_subnet: Assigned port/) { return($true); } if ($check =~ /^ \_\_osm\_ni\_rcv\_process\_existing: Rediscovered Channel Adapter node/) { return($true); } if ($check =~ /^ \_\_ucast\_cache\_write\_sw\_routing: writing routing for cached switch/) { return($true); } return($false); }