small circular points
[MojoFacets.git] / script / vmstat.pl
1 #!/usr/bin/perl
2
3 use warnings;
4 use strict;
5
6 use Data::Dump qw(dump);
7 use Storable;
8 use Time::HiRes qw(time);
9
10 $|=1;
11
12 my $vmstat = 'vmstat 1';
13 $vmstat = join(' ', @ARGV, $vmstat) if @ARGV;
14
15 my $headers;
16 my @last;
17
18 sub emit {
19         warn dump @_;
20         Storable::store_fd $_[0], \*STDOUT 
21                 if defined $_[0]->{item};
22 }
23
24 warn "# vmstat $vmstat\n";
25 open(my $in, '-|', $vmstat);
26 while(<$in>) {
27         chomp;
28         my @v = split(/\s+/, $_);
29         if ( ! $headers->{$#v} ) {
30                 $headers->{$#v} = [ @v ];
31                 warn "# headers ", dump $headers;
32                 next;
33         }
34         emit { row => [ @v ] };
35         warn " $#v ",dump @v;
36         my $diff;
37         if ( @last ) {
38                 $diff->[$_] = $last[$_] - $v[$_] foreach ( 0 .. $#v );
39                 emit { diff => $diff };
40         }
41         @last = @v;
42
43         my $item;
44         my @header = @{ $headers->{$#v} };
45         foreach my $i ( 0 .. $#header ) {
46                 $item->{ $header[$i] } = $v[$i];
47 #               $item->{ $header[$i] . '.diff' } = $diff->[$i];
48                 $item->{t} = time();
49         }
50         emit { item => $item };
51
52 }