X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=bindings%2Fperl%2Flib%2FCollectd%2FPlugins%2FOpenVZ.pm;h=4c7c3fe40f9d7de2b166471d58f1c91e14f792a7;hb=f5adf265a374e5e0dba89a4a9903e7719dc57039;hp=fb397d4cd41775ad85ada96f600adc4ab49a25df;hpb=095a6defb25e81cd6867e3822f1d29c02901900c;p=collectd.git diff --git a/bindings/perl/lib/Collectd/Plugins/OpenVZ.pm b/bindings/perl/lib/Collectd/Plugins/OpenVZ.pm index fb397d4c..4c7c3fe4 100644 --- a/bindings/perl/lib/Collectd/Plugins/OpenVZ.pm +++ b/bindings/perl/lib/Collectd/Plugins/OpenVZ.pm @@ -39,35 +39,44 @@ my $enable_load = 1; my $enable_processes = 1; my $enable_users = 1; -sub interface_read($$) { - my $veid = shift; - my $name = shift; - my ($key, $val, @lines, @parts, @counters); - my @if_instances = ('if_octets', 'if_packets', 'if_errors'); +# We probably don't care about loopback transfer +my @ignored_interfaces = ( "lo" ); + +sub interface_read { + my ($veid, $name) = @_; + my @rx_fields = qw(if_octets if_packets if_errors drop fifo frame compressed multicast); + my @tx_fields = qw(if_octets if_packets if_errors drop fifo frame compressed); my %v = _build_report_hash($name); - $v{'plugin'} = 'interface'; - delete $v{'plugin_instance'}; + my @lines = `$vzctl exec $veid cat /proc/net/dev`; - @lines = split(/\n/, `$vzctl exec $veid cat /proc/net/dev`); - foreach (@lines) { - next if (!/:/); + for my $line (@lines) { + # skip explanatory text + next if $line !~ /:/; - @parts = split(/:/); - ($key = $parts[0]) =~ s/^\s*(.*?)\s*$/$1/; - ($val = $parts[1]) =~ s/^\s*(.*?)\s*$/$1/; - @counters = split(/ +/, $val); + $line =~ s/^\s+|\s+$//g; - $v{'type_instance'} = $key; - for ($key = 0; $key <= $#if_instances; ++$key) { - $v{'type'} = $if_instances[$key]; - $v{'values'} = [ $counters[$key], $counters[$key + 8] ]; - plugin_dispatch_values(\%v); + my ($iface, %rx, %tx); + + # read /proc/net/dev fields + ($iface, @rx{@rx_fields}, @tx{@tx_fields}) = split /[: ]+/, $line; + + # Skip this interface if it is in the ignored list + next if grep { $iface eq $_ } @ignored_interfaces; + + for my $instance (qw(if_octets if_packets if_errors)) { + plugin_dispatch_values({ + 'plugin' => 'interface', + 'plugin_instance' => $iface, + 'type' => $instance, + 'values' => [ $rx{$instance}, $tx{$instance} ], + %v, + }); + } } } -} -sub cpu_read($$) { +sub cpu_read { my $veid = shift; my $name = shift; my ($key, $val, $i, @lines, @counters); @@ -105,7 +114,7 @@ sub cpu_read($$) { } } -sub df_read($$) { +sub df_read { my $veid = shift; my $name = shift; my ($key, $val, @lines, @parts); @@ -131,7 +140,7 @@ sub df_read($$) { } } -sub load_read($$) { +sub load_read { my $veid = shift; my $name = shift; my ($key, $val, @lines, @parts); @@ -147,7 +156,7 @@ sub load_read($$) { plugin_dispatch_values(\%v); } -sub processes_read($$) { +sub processes_read { my $veid = shift; my $name = shift; my ($key, $val, @lines); @@ -174,7 +183,7 @@ sub processes_read($$) { } } -sub users_read($$) { +sub users_read { my $veid = shift; my $name = shift; my ($key, $val, @lines); @@ -190,7 +199,7 @@ sub users_read($$) { plugin_dispatch_values(\%v); } -sub _build_report_hash($) { +sub _build_report_hash { my $name = shift; return (time => time(), interval => plugin_get_interval(), host => $name); }