#!/usr/bin/perl -w my $sleep=5; my $avg_every=60; my $limit = 60 * 10; my $current_step=1; my $separator="\t"; my %stats; sub avg{ my $values_ref = shift; my $total=0; my $count=0; while(my $val = pop @{$values_ref}){ $total+=$val; $count++; } return $total/$count; } sub getUptime{ $result = `uptime`; @test = split(' ',$result); $test[9]=~s/,//g; return $test[9]; } sub getIOstatTMP{ $result = `iostat -d -m -x | grep c0d0`; @test = split(' +',$result); return $test[11]; } sub getIOstatExport{ $result = `iostat -d -m -x | grep c0d1`; @test = split(' +',$result); return $test[11]; } sub getIOstatCache{ $result = `iostat -d -m -x | grep c0d2`; @test = split(' +',$result); return $test[11]; } sub getApacheProcessCount{ $result = `ps -ef | grep apache | grep -v grep | wc -l`; return $result; } sub getTime{ return time(); } my %fct=( 'time' => \&getTime ,'uptime' => \&getUptime ,'iostattmp' => \&getIOstatTMP ,'iostatexport' => \&getIOstatExport ,'iostatcache' => \&getIOstatCache ,'apacheprocess' => \&getApacheProcessCount ); my $current_sec=$current_step*$sleep; my %temp; print("Starting ('.'=>$sleep sec '|'=>$avg_every sec)\n"); while($current_sec<=$limit){ foreach my $function(keys(%fct)){ push @{$temp{$function}},&{$fct{$function}}; } if(($current_step*$sleep)%$avg_every==0){ print("|"); foreach my $function(keys(%fct)){ push @{$stats{$function}},avg(\@{$temp{$function}}); } } print("."); sleep($sleep); $current_sec+=$sleep; $current_step++; } print("\nDone\n"); foreach my $key(keys(%stats)){ print("$key:$separator"); my @value_list = @{$stats{$key}}; foreach my $value(@value_list){ print "$value$separator"; } print("\n"); }