PageRenderTime 26ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/perl/monitor/topparse.pl

http://chirico.googlecode.com/
Perl | 160 lines | 106 code | 40 blank | 14 comment | 6 complexity | 38a29816e0f3f03cbe19d39b619eebc9 MD5 | raw file
Possible License(s): GPL-2.0, Apache-2.0, GPL-3.0, AGPL-1.0
  1. #!/usr/bin/perl
  2. # Copyright GPL (c) 2005 mmc Mike Chirico
  3. # Version 0.0.1
  4. # Last Updated: Thu Mar 17 16:51:10 EST 2005
  5. # TODO
  6. # a. please fix that very long line
  7. use DBI;
  8. $dbh0 = DBI->connect( "dbi:SQLite:database/monitor.db" ) || die "Cannot connect: $DBI::errstr";
  9. $dbh1 = DBI->connect( "dbi:SQLite:database/monitor.db" ) || die "Cannot connect: $DBI::errstr";
  10. sub top{
  11. $server=$_[0];
  12. $pid = open $readme, "ssh root\@$server top -b -n 1 2>/dev/null|" or die "Could not ssh into $_[0]\n";
  13. # Quick test of top -b -n 1 2>/dev/null|
  14. my $H_flag=1;
  15. # Not all values are collected
  16. my $loadavg0=-1;
  17. my $loadavg1=-1;
  18. my $loadavg2=-1;
  19. my $processes=-1;
  20. my $sleeping=-1;
  21. my $running=-1;
  22. my $zombie=-1;
  23. my $stopped=-1;
  24. while(<$readme>) {
  25. $line=$_;
  26. # First only dealing with the heading
  27. if ($H_flag==1) {
  28. if($line =~ /load average:\s\s*(\d\d*\.?\d*),\s\s*(\d\d*\.?\d*),\s\s*(\d\d*\.?\d*)\s*/) {
  29. $loadavg0=$1;
  30. $loadavg1=$2;
  31. $loadavg2=$3;
  32. }elsif ($line =~ /(^\d\d*)\s\s*processes:\s\s*(\d\d*)\s\s*sleeping,\s\s*(\d\d*)\s\s*running,\s\s*(\d\d*)\s\s*zombie,\s\s*(\d\d*)\s\s*stopped/) {
  33. $processes=$1;
  34. $sleeping=$2;
  35. $running=$3;
  36. $zombie=$4;
  37. $stopped=$5;
  38. }elsif ($line =~ /\s*PID\s\s*USER.*COMMAND/) {
  39. $H_flag=0;
  40. } # PID USER(-) PRI NI SIZE RSS SHARE STAT CPU MEM TIME CMD
  41. }elsif (/\s*(\d\d*)\s\s*(\w\w*\-*\w\w*)\s\s*(\d\d*)\s\s*(\d\d*)\s\s*(\d\d*)\s\s*(\d\d*)([M|G|K])\s\s*(\d\d*)\s\s*(\w\w*)\s\s*(\d\d*\.?\d)\s\s*(\d\d*\.?\d)\s\s*(\d\d*\:?\d\d\.?\d*m?)\s\s*/){
  42. $cmd=($');
  43. chomp($cmd);
  44. $cmp =~ s/^M//g;
  45. $cmp =~ s/\n//g;
  46. # print "-> $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} -$cmd-\n";
  47. # print " $line\n";
  48. $pid=$1;
  49. $user=$2;
  50. $pri=$3;
  51. $ni=$4;
  52. $size=$5;
  53. $rss=$6;
  54. $rss_unit=$7;
  55. $share=$8;
  56. $stat=$9;
  57. $cpu=${10};
  58. $mem=${11};
  59. $time=${12};
  60. $dbh1->do( "INSERT INTO top_process_data
  61. (server,pid,user,pri,ni,size,rss,rss_unit,share,stat,cpu_pcrt,mem,cmd)
  62. VALUES
  63. ( '$server', $pid,'$user',$pri,$ni,$size,$rss,'$rss_unit',$share,'$stat',$cpu,$mem,'$cmd'); ");
  64. # PI can be negative. These are the bad ones we want to look at.
  65. }elsif (/\s*(\d\d*)\s\s*(\w\w*\-*\w\w*)\s\s*(\d\d*)\s\s*(\d\d*)\s\s*(\d\d*)\s\s*(\d\d*)\s\s*(\d\d*)\s\s*(\w\w*)\s\s*(\d\d*\.?\d)\s\s*(\d\d*\.?\d)\s\s*(\d\d*\:?\d\d\.?\d*m?)\s\s*/){
  66. $cmd=($');
  67. chomp($cmd);
  68. $cmp =~ s/^M//g;
  69. $cmp =~ s/\n//g;
  70. # print "-> $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} -$cmd-\n";
  71. # print " $line\n";
  72. $pid=$1;
  73. $user=$2;
  74. $pri=$3;
  75. $ni=$4;
  76. $size=$5;
  77. $rss=$6;
  78. $share=$7;
  79. $stat=$8;
  80. $cpu=$9;
  81. $mem=${10};
  82. $time=${11};
  83. $dbh1->do( "INSERT INTO top_process_data
  84. (server,pid,user,pri,ni,size,rss,share,stat,cpu_pcrt,mem,cmd)
  85. VALUES
  86. ( '$server', $pid,'$user',$pri,$ni,$size,$rss,$share,'$stat',$cpu,$mem,'$cmd'); ");
  87. }else {
  88. $dbh1->do( "INSERT INTO top_process_data
  89. (server,extra)
  90. VALUES
  91. ( '$server', '$line'); ");
  92. # print "********************** ERRor: $line \n";
  93. }
  94. }
  95. #
  96. # The heading is actually done last
  97. $dbh1->do( "INSERT INTO top_heading_data
  98. (server,loadavg0,loadavg1,loadavg2,processes,sleeping,running,zombie,stopped)
  99. VALUES
  100. ( '$server', $loadavg0,$loadavg1,$loadavg2,$processes,$sleeping,$running,$zombie,$stopped); ");
  101. close $readme;
  102. }
  103. $res0 = $dbh0->selectall_arrayref( q( SELECT server
  104. FROM computers
  105. ));
  106. foreach( @$res0 ) {
  107. if($_->[0] == 'sbc2') {
  108. &top($_->[0]);
  109. }
  110. }
  111. $dbh0->disconnect;