]> AND Private Git Repository - loba.git/blob - extract.pl
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Makefile: add a rule to generate xml files conforming to the latest dtd.
[loba.git] / extract.pl
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5
6 my $bookkeeping;
7 my $flt = '[+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?';
8 my $pflt = "($flt)";
9 my $prefix = '^\[([^: ]+)(?::loba:\(\d+\))? ' . $pflt . '\] \[proc/INFO\] ';
10 my $initmatch = $prefix . 'Initial load: ' . $pflt . '';
11 my $finalmatch;
12 my $plainmatch;
13
14 my %alldata = ();
15
16 while (<>) {
17     chomp;
18     if (s{^(?:\[0\.0+\] )?\[main/INFO\] \| bookkeeping\.*: }{}) {
19         $bookkeeping = $_ eq "on";
20         if ($bookkeeping) {
21             $finalmatch = $prefix .
22                 'Final load after (\d+):(\d+) iterations: ' . $pflt .
23                 ' ; expected: ' . $pflt;
24             $plainmatch = $prefix .
25                 '\((\d+):(\d+)\) current load: ' . $pflt .
26                 ' ; expected: ' . $pflt;
27         } else {
28             $finalmatch = $prefix .
29                 'Final load after (\d+) iterations: ' . $pflt;
30             $plainmatch = $prefix . '\((\d+)\) current load: ' . $pflt;
31         }
32         if (0) {
33             print STDERR "BOOKKEEPING: \"$_\" ($bookkeeping)\n";
34             print STDERR "INITMATCH..: \"$initmatch\"\n";
35             print STDERR "PLAINMATCH.: \"$plainmatch\"\n";
36             print STDERR "FINALMATCH.: \"$finalmatch\"\n";
37         }
38     }
39     next if not defined $bookkeeping;
40     if (m{$plainmatch}) {
41         my $host = $1;
42         my $data;
43         if ($bookkeeping) {
44             $data = {
45                 time     => $2,
46                 lb       => $3,
47                 comp     => $4,
48                 load     => $5,
49                 expected => $6,
50             };
51         } else {
52             $data = {
53                 time     => $2,
54                 lb       => $3,
55                 comp     => $3,
56                 load     => $4,
57                 expected => $4,
58             };
59         }
60 #        print STDERR "PUSH $host $data->{time} $data->{load} (plain)\n";
61         push @{$alldata{$host}}, $data;
62     } if (m{$initmatch}) {
63         my $host = $1;
64         my $data = {
65             time     => $2,
66             lb       => 0,
67             comp     => 0,
68             load     => $3,
69             expected => $3,
70         };
71 #        print STDERR "PUSH $host $data->{time} $data->{load} (init)\n";
72         push @{$alldata{$host}}, $data;
73     } elsif (m{$finalmatch}) {
74         my $host = $1;
75         my $data;
76         if ($bookkeeping) {
77             $data = {
78                 time     => $2,
79                 lb       => $3,
80                 comp     => $4,
81                 load     => $5,
82                 expected => $6,
83             };
84          } else {
85              $data = {
86                 time     => $2,
87                 lb       => $3,
88                 comp     => $3,
89                 load     => $4,
90                 expected => $4,
91              };
92          }
93 #        print STDERR "PUSH $host $data->{time} $data->{load} (final)\n";
94         push @{$alldata{$host}}, $data;
95     }
96 }
97
98 foreach my $host (sort(keys %alldata)) {
99 #    print STDERR "GOT \"$host\"\n";
100     my $datalist = $alldata{$host};
101     print "# $host\n";
102     foreach my $data (@{$datalist}) {
103         print "$data->{time} $data->{load}\n";
104     }
105     print "\n"
106 }