/[ps-trend]/ps2rrd.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /ps2rrd.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5 by dpavlin, Tue Jul 14 22:41:33 2009 UTC revision 6 by dpavlin, Thu Jul 16 19:13:01 2009 UTC
# Line 7  use Data::Dump qw/dump/; Line 7  use Data::Dump qw/dump/;
7  use RRD::Simple;  use RRD::Simple;
8  use DateTime;  use DateTime;
9    
10    my $debug = 0;
11    my $zoom = 2;
12    
13  my $veids;  my $veids;
14  my $vsz;  my $vsz;
15    
16  my $too_small = 64;     # M  my $too_small = 16;     # M
17  $too_small *= 1024; # k  $too_small *= 1024; # k
18    
19  sub count {  sub count {
20          my $file = shift;          my $file = shift;
21          open(my $fh, '<', $file) || die "$file: $!";          open(my $fh, '<', $file) || die "$file: $!";
22          warn "# $file ", -s $file, $/;  
23            print STDERR ".";
24    
25            my $t = (stat($file))[9];
26            if ( $file =~ m{(\d\d\d\d)-(\d\d)-(\d\d)/(\d\d)(\d\d)} ) {
27                    $t = new DateTime(
28                            year   => $1,
29                            month  => $2,
30                            day    => $3,
31                            hour   => $4,
32                            minute => $5,
33                    )->epoch;
34            }
35    
36            warn "# $file ", -s $file, " bytes [$t]\n" if $debug;
37    
38          my $cols = <$fh>;          my $cols = <$fh>;
39          $cols =~ s/^\s+//;          $cols =~ s/^\s+//;
# Line 43  sub count { Line 60  sub count {
60    
61                  my $s = c('VSZ');                  my $s = c('VSZ');
62                  if ( $s < $too_small ) {                  if ( $s < $too_small ) {
63                          $vsz->{$file}->{$veid}+= $s * 1024;                          $vsz->{$t}->{$veid}+= $s * 1024;
64                  } else {                  } else {
65                          my $cmd = c('COMMAND');                          my $cmd = c('COMMAND');
66                          $cmd =~ s{-.+$}{};                          $cmd =~ s{-.+$}{};
# Line 53  sub count { Line 70  sub count {
70                          $cmd =~ s{\W+}{_}g;                          $cmd =~ s{\W+}{_}g;
71                          $veid .= '-' . $cmd;                          $veid .= '-' . $cmd;
72                          $veid = substr($veid,0,16);                          $veid = substr($veid,0,16);
73                          $vsz->{$file}->{$veid}+= $s * 1024;                          $vsz->{$t}->{$veid}+= $s * 1024;
74                  }                  }
75                  $veids->{$veid}++;                  $veids->{$veid}++;
76          }          }
77    
78  }  }
79    
80    print STDERR "reading ps dumps";
81    
82  count $_ foreach @ARGV;  count $_ foreach @ARGV;
83    
84  print "VSZ: ",dump( $vsz );  #print "VSZ: ",dump( $vsz );
85    
86  my @veids = keys %$veids;  my @veids = keys %$veids;
87  warn "# veids = ",dump( sort @veids );  warn "# veids = ",dump( sort @veids );
88    
89  my $rrd = RRD::Simple->new( file => "ps.rrd" );  my $rrd_file = 'ps.rrd';
90  $rrd->create( 'hour', map { ( $_ => 'GAUGE' ) } @veids );  unlink $rrd_file if -e $rrd_file;
91    
92  foreach my $file ( sort keys %$vsz ) {  my $rrd = RRD::Simple->new( file => $rrd_file );
93          my $t = (stat($file))[9];  $rrd->create( 'hour', map { ( $_ => 'GAUGE' ) } @veids );
         if ( $file =~ m{(\d\d\d\d)-(\d\d)-(\d\d)/(\d\d)(\d\d)} ) {  
                 $t = new DateTime(  
                         year   => $1,  
                         month  => $2,  
                         day    => $3,  
                         hour   => $4,  
                         minute => $5,  
                 );  
                 warn "+ $t\n";  
         }  
94    
95          #warn "## ",dump( %{ $vsz->{$file} } );  foreach my $t ( sort keys %$vsz ) {
96            print STDERR ".";
97    #       warn "## ",dump( %{ $vsz->{$t} } );
98    
99          eval {          eval {
100                  $rrd->update($t->epoch, map {                  $rrd->update($t, map {
101                          ( $_ => $vsz->{$file}->{$_} )                          ( $_ => $vsz->{$t}->{$_} )
102                  } @veids );                  } @veids );
103          };          };
104          warn "SKIP $t: $@\n" if $@;          warn "SKIP $t: $@\n" if $@;
# Line 99  $rrd->graph( Line 110  $rrd->graph(
110          periods => [ qw/hour 6hour 12hour day week month year 3years/ ],          periods => [ qw/hour 6hour 12hour day week month year 3years/ ],
111          extended_legend => 1,          extended_legend => 1,
112          title => "memory > $too_small K",          title => "memory > $too_small K",
113          width => 500,          width =>  500 * $zoom,
114          height => 200,          height => 200 * $zoom,
115  );  );
116    

Legend:
Removed from v.5  
changed lines
  Added in v.6

  ViewVC Help
Powered by ViewVC 1.1.26