summaryrefslogtreecommitdiff
path: root/lib/Loadbars/Main.pm
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2012-06-23 13:18:56 +0200
committerPaul Buetow <paul@buetow.org>2012-06-23 13:18:56 +0200
commit76d58f04f7681cc9849b0dd44856b55f65ca7311 (patch)
treec9cd956e4964ca1ea6d96cb49a528c5b4ea81db1 /lib/Loadbars/Main.pm
parent343bbbf782fe501d7bdbb721f97d1b4935975aba (diff)
use perl instead of bash for data gathering
Diffstat (limited to 'lib/Loadbars/Main.pm')
-rw-r--r--lib/Loadbars/Main.pm68
1 files changed, 44 insertions, 24 deletions
diff --git a/lib/Loadbars/Main.pm b/lib/Loadbars/Main.pm
index 38d83c2..ba9c6cd 100644
--- a/lib/Loadbars/Main.pm
+++ b/lib/Loadbars/Main.pm
@@ -101,27 +101,37 @@ sub stats_thread ($;$) {
my $whitespace_re = qr/ +/;
until ($sigterm) {
- my $bash = <<"BASH";
- loadavg=/proc/loadavg
- cpustat=/proc/stat
- meminfo=/proc/meminfo
- netstat=/proc/net/dev
-
- for i in \$(seq $C{samples}); do
- echo CPUSTATS
- cat \$loadavg \$cpustat
- echo MEMSTATS
- cat \$meminfo
- echo NETSTATS
- cat \$netstat
- sleep $inter
- done
-BASH
+ my $remotecode = <<"REMOTECODE";
+ perl -le '
+ use strict;
+
+ sub cat {
+ my \\\$file = shift;
+ open my \\\$fh, \\\$file;
+ while (<\\\$fh>) {
+ print;
+ }
+ close \\\$fh;
+ }
+
+ for (0..$C{samples}) {
+ printf qq(LOADAVG\n);
+ cat(qq(/proc/loadavg));
+ printf qq(CPUSTATS\n);
+ cat(qq(/proc/stat));
+ printf qq(MEMSTATS\n);
+ cat(qq(/proc/meminfo));
+ printf qq(NETSTATS\n);
+ cat(qq(/proc/net/dev));
+ sleep $inter;
+ }
+ '
+REMOTECODE
my $cmd =
( $host eq 'localhost' || $host eq '127.0.0.1' )
- ? $bash
- : "ssh $user -o StrictHostKeyChecking=no $C{sshopts} $host '$bash'";
+ ? "bash -c \"$remotecode\""
+ : "ssh $user -o StrictHostKeyChecking=no $C{sshopts} $host \"$remotecode\"";
my $pid = open my $pipe, "$cmd |" or do {
say "Warning: $!";
@@ -135,17 +145,27 @@ BASH
$SIG{USR1} = sub { $sigusr1 = 1 };
$SIG{TERM} = sub { $sigterm = 1 };
- # 0=cpu, 1=mem, 2=net
+ # 0=loadavg, 1=cpu, 2=mem, 3=net
my $mode = 0;
while (<$pipe>) {
chomp;
if ( $mode == 0 ) {
- if ( $_ eq 'MEMSTATS' ) {
+ if ( $_ eq 'CPUSTATS' ) {
$mode = 1;
}
+ elsif ($_ =~ $loadavg_re) {
+ $AVGSTATS{$host} = "$1;$2;$3";
+
+ }
+ }
+ elsif ( $mode == 1 ) {
+ if ( $_ eq 'MEMSTATS' ) {
+ $mode = 2;
+
+ }
elsif (0 == index $_, $cpustring) {
my ( $name, $load ) = parse_cpu_line $_;
$CPUSTATS{"$host;$name"} = join ';',
@@ -157,9 +177,9 @@ BASH
}
}
- elsif ( $mode == 1 ) {
+ elsif ( $mode == 2 ) {
if ( $_ eq 'NETSTATS' ) {
- $mode = 2;
+ $mode = 3;
}
else {
@@ -172,8 +192,8 @@ BASH
}
}
}
- elsif ( $mode == 2 ) {
- if ( $_ eq 'CPUSTATS' ) {
+ elsif ( $mode == 3 ) {
+ if ( $_ eq 'LOADAVG' ) {
$mode = 0;
}