summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2012-06-23 11:53:48 +0200
committerPaul Buetow <paul@buetow.org>2012-06-23 11:53:48 +0200
commit1ae5097b890ecc6ef950b8f70cf2902bfe193cbc (patch)
treee22099253ca468efad3f759dfe9d142c261ac8b5
parent92b1dd6f4b4e8892e7dc483de1a8a22d597f946d (diff)
use more precompiled regexp, initial network stats
-rw-r--r--lib/Loadbars/Main.pm42
-rw-r--r--lib/Loadbars/Shared.pm5
2 files changed, 29 insertions, 18 deletions
diff --git a/lib/Loadbars/Main.pm b/lib/Loadbars/Main.pm
index 68a114e..361cf2c 100644
--- a/lib/Loadbars/Main.pm
+++ b/lib/Loadbars/Main.pm
@@ -95,14 +95,17 @@ sub stats_thread ($;$) {
until ($sigterm) {
my $bash = <<"BASH";
loadavg=/proc/loadavg
- stat=/proc/stat
+ cpustat=/proc/stat
meminfo=/proc/meminfo
+ netstat=/proc/net/dev
for i in \$(seq $C{samples}); do
echo CPUSTATS
- cat \$loadavg \$stat
+ cat \$loadavg \$cpustat
echo MEMSTATS
cat \$meminfo
+ echo NETSTATS
+ cat \$netstat
sleep $inter
done
BASH
@@ -114,7 +117,7 @@ BASH
my $pid = open my $pipe, "$cmd |" or do {
say "Warning: $!";
- sleep 0.5;
+ sleep 1;
next;
};
@@ -124,11 +127,15 @@ BASH
$SIG{USR1} = sub { $sigusr1 = 1 };
$SIG{TERM} = sub { $sigterm = 1 };
- my $cpuregexp = qr/$I{cpuregexp}/;
+ my $cpu_re = qr/$I{cpuregexp}/;
- # 1=cpu, 2=mem, 3=net
+ # 0=cpu, 1=mem, 2=net
my $mode = 0;
+ my @meminfo =
+ map { [$_, qr/^$_: *(\d+)/] }
+ (qw(MemTotal MemFree Buffers Cached SwapTotal SwapFree));
+
while (<$pipe>) {
chomp;
@@ -141,7 +148,7 @@ BASH
$AVGSTATS{$host} = "$1;$2;$3";
}
- elsif (/$cpuregexp/) {
+ elsif ($_ =~ $cpu_re) {
my ( $name, $load ) = parse_cpu_line $_;
$CPUSTATS{"$host;$name"} = join ';',
map { $_ . '=' . $load->{$_} }
@@ -149,28 +156,33 @@ BASH
}
}
elsif ( $mode == 1 ) {
- if ( $_ eq 'CPUSTATS' ) {
- $mode = 0;
+ if ( $_ eq 'NETSTATS' ) {
+ $mode = 2;
}
else {
- for my $meminfo (
- qw(MemTotal MemFree Buffers Cached SwapTotal SwapFree))
+ for my $meminfo (@meminfo)
{
-
- # TODO: Precompile regexp
- if (/^$meminfo: *(\d+)/) {
+ if ($_ =~ $meminfo->[1]) {
$MEMSTATS_HAS{$host} = 1;
- $MEMSTATS{"$host;$meminfo"} = $1;
+ $MEMSTATS{"$host;$meminfo->[0]"} = $1;
}
}
}
}
+ elsif ( $mode == 2 ) {
+ if ( $_ eq 'CPUSTATS' ) {
+ $mode = 0;
+
+ }
+ else {
+ }
+ }
if ($sigusr1) {
# TODO: Use index instead of regexp for cpuregexp
- $cpuregexp = qr/$I{cpuregexp}/;
+ $cpu_re = qr/$I{cpuregexp}/;
$sigusr1 = 0;
}
diff --git a/lib/Loadbars/Shared.pm b/lib/Loadbars/Shared.pm
index aa1016b..311367d 100644
--- a/lib/Loadbars/Shared.pm
+++ b/lib/Loadbars/Shared.pm
@@ -19,9 +19,8 @@ our %AVGSTATS : shared;
our %CPUSTATS : shared;
our %MEMSTATS : shared;
our %MEMSTATS_HAS : shared;
-
-#my %NETSTATS : shared;
-#my %NETSTATS_HAS : shared;
+our %NETSTATS : shared;
+our %NETSTATS_HAS : shared;
# Global configuration hash
our %C : shared;