Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Do display the output when requested to not take it into account but the child dyied...
[simgrid.git] / tools / MSG_visualization / colorize.pl
index 371f3f9..366f1cb 100755 (executable)
@@ -30,20 +30,75 @@ my (@coltab) = (
     $col_background . $col_blue,   $col_background . $col_magenta,
 );
 
+my %pid;
+
+# Get options
+#
+while (($_ = $ARGV[0]) =~ /^-/) {
+    shift;
+    if (/-location/i) {
+        $opt_print_location = 1;  shift;
+    } elsif (/-h(elp)?$|-u(sage)?$/i) {
+        print<<EOH
+colorize.pl - Log colorizer for SimGrid
+Syntax:
+
+    colorize.pl [options] <file>
+
+    where <file> is a text file of values or '-' for STDIN
+
+Options: () denote short version
+
+    -location          Print the location in the code of the message.
+EOH
+;
+       exit;
+    }
+}
+
+sub pidcolor {
+    my $pid = shift;
+
+    unless (defined($pid{$pid})) {
+       # first time we see this pid. Affect it a color
+       $pid{$pid}=(scalar keys %pid) % (scalar @coltab);
+    }
+    return $coltab[$pid{$pid}];
+}
+
+# Read the messages and do the job
 while (<>) {
     $orgline = $thisline = $_;
 
-    if ( $thisline =~ /^\[[0-9\.]*\] P[0-9]* \|/ ) {
-        ( $number, $message ) = split ( / \| /, $thisline );
-        chomp $message;
-        $head = $number;
-        $number =~ s/^\[[0-9\.]*\] P//;
-        $number =~ s/^ .*$//;
-        $head   =~ s/^(\[.*\]) (.*)$/$col_norm$1 $coltab[($number-1) % scalar(@coltab)]$2/;
-        print $head. " " . $message . $col_norm . "\n";
-        next;
+    if ( $thisline =~ /^\[([^:]+):([^:]+):\((\d+)\) ([\d\.]*)\] ([^\[]*) \[([^\[]*)\] (.*)$/ ) {
+       $host=$1;
+       $procname=$2;
+       $pid=$3;
+       $date=$4;
+       $location=$5;
+       $xbt_channel=$6;
+       $message=$7;
+
+       $location =~ s/:$//;
+
+       print $col_norm;
+       printf "[% 10.3f]",$date;
+
+       print pidcolor($pid);
+       if($opt_print_location) {
+           printf "[%10s:%-10s %s ]",$host,$procname,$location;
+       } else {
+           printf "[%10s:%-10s]",$host,$procname;
+       }
+       print " $message";
+       print $col_norm."\n";
+    } elsif ( $thisline =~ /^==(\d+)== (.*)$/) {
+       # take care of valgrind outputs
+       print pidcolor($1)."$2\n";
+
+    } else {
+       print $col_default. $orgline;
     }
-    print $col_default. $orgline;
 }
 
 print $col_norm;