/[Frey]/trunk/lib/Frey/Shell/sar.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Frey/Shell/sar.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 891 - (hide annotations)
Wed Dec 24 21:27:04 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1578 byte(s)
convert to ISO date time format
1 dpavlin 866 package Frey::Shell::sar;
2     use Moose;
3    
4     extends 'Frey';
5     with 'Frey::Web';
6     #with 'Frey::Storage';
7    
8     has sar_command => (
9     is => 'rw',
10     isa => 'Str',
11     required => 1,
12     default => 'sar',
13     );
14    
15     sub as_sponge {
16     my ($self,$opts) = @_;
17    
18 dpavlin 871 $opts ||= $self->sar_command !~ m{-\w} ? '-u' : '';
19 dpavlin 866
20     my @rows;
21     my @name;
22    
23 dpavlin 871 my @pos;
24    
25 dpavlin 866 my $cmd = $self->sar_command . ' ' . $opts;
26     warn "# cmd: $cmd";
27    
28 dpavlin 891 my $date = '1970-01-01 ';
29 dpavlin 867
30 dpavlin 866 open(my $fh, '-|', $cmd) || die "can't open pipe to $cmd $!";
31     while(<$fh>) {
32     chomp;
33 dpavlin 871
34 dpavlin 867 if ( m{(\d\d)/(\d\d)/(\d\d\d\d)$} ) {
35 dpavlin 891 $date = "$3-$1-$2 ";
36 dpavlin 867 warn "# date $date";
37 dpavlin 871 next;
38 dpavlin 867 }
39 dpavlin 871
40 dpavlin 866 next unless m{^\d\d:\d\d:\d\d};
41 dpavlin 871
42     my @l;
43    
44     if ( s{_([^_]+)_$}{} ) {
45     my $line = $_;
46     warn "# header $1 from $line";
47     while ( $line =~ s{^(\s*\S+)}{} ) {
48     push @pos, length($1);
49     }
50     warn "# pos: ", $self->dump( @pos );
51     my @l = split(/\s+/,$_);
52     warn "# l: ", $self->dump( @l );
53 dpavlin 874 $l[0] =~ s{\d\d:\d\d:\d\d}{time} || die "can't locate time column in header";
54 dpavlin 866 @name = @l;
55     next;
56 dpavlin 871 } elsif ( @pos ) {
57     my @cols = split(/\s+/,$_);
58     if ( $#cols < $#name ) {
59     warn "# skip too short line: '$_'";
60     next;
61     }
62 dpavlin 877
63     # nothing works well with kernel resource format value/sz
64     s{(\d+)/\d+}{$1}sg if $cmd =~ m{-v};
65    
66 dpavlin 871 my $start = 0;
67 dpavlin 877 foreach my $col ( 0 .. $#pos ) {
68     my $len = $pos[$col];
69 dpavlin 871 my $v = substr($_, $start, $len);
70     $v =~ s/^\s+//g;
71     push @l, $v;
72     $start += $len;
73     }
74     } else {
75     die "got: $_ before header!";
76 dpavlin 866 }
77    
78 dpavlin 867 $l[0] = $date . $l[0];
79    
80 dpavlin 866 push @rows, [ @l ];
81     }
82    
83     return {
84     rows => \@rows,
85     NAME => \@name,
86     }
87     }
88    
89     1;

  ViewVC Help
Powered by ViewVC 1.1.26