diff --git a/lib/Core/NetUtilization.pm b/lib/Core/NetUtilization.pm new file mode 100644 index 0000000000000000000000000000000000000000..0952de944f1b67487854f1c0083d62e2af73a5f9 --- /dev/null +++ b/lib/Core/NetUtilization.pm @@ -0,0 +1,98 @@ +package Core::NetUtilization; + +use strict; +use warnings; + +use base 'Resmon::Module'; + +use Resmon::ExtComm qw(run_command cache_command); + +=pod + +=head1 NAME + +Core::NetUtilization - get interface in/out byte counts + +=head1 SYNOPSIS + + Core::NetUtilization { + local: noop + } + +=head1 DESCRIPTION + +Each instance is the name of a network interface (vnic under solaris). + +On linux, uses ifconfig to list interfaces and obtain byte in/out counts. + +On solaris, uses kstat. + +=head1 CONFIGURATION + +None. + +=head1 METRICS + +=over + +=item in_bytes + +64-bit Integer, number of inbound bytes + +=item out_bytes + +64-bit Integer, number of outbound bytes + +=back + +=cut + +sub handler { + my $self = shift; + my $config = $self->{config}; # All configuration is in here + my $check_name = $self->{check_name}; # The check name is in here + + my $results; + + if ($^O eq 'solaris') { + my $output = run_command('kstat -p ::mac_[tr]x_swlane0:[or]bytes'); + chomp $output; + + # global0:0:mac_rx_swlane0:rbytes 5858602050 + # global0:0:mac_tx_swlane0:obytes 275810267256 + # omnibuildil10:0:mac_rx_swlane0:rbytes 340562 + # omnibuildil10:0:mac_tx_swlane0:obytes 0 + foreach my $line (split("\n", $output)) { + next unless $line; + my ($key, $val) = split(/\s+/, $line); + next unless $key; + my ($vnic, $dum1, $direction, $dum2) = split(':', $key); + next unless $vnic; + $results->{$vnic . '_' . ($direction eq 'mac_rx_swlane0' ? 'in' : 'out' + ) . '_bytes64'} = [ $val, 'l']; + } + } else { + # Everything else is obviously linux, right? + my $output = run_command('/sbin/ifconfig -a'); + chomp $output; + + my $iface; + foreach my $line (split("\n", $output)) { + next unless $line; + my ($name, $rest) = $line =~ /^(\S+)\s+Link encap:(\S+)/; + if ($name) { + $iface = $name; + next; + } + + # RX bytes:114925052 (109.6 MiB) TX bytes:5398728 (5.1 MiB) + my ($in_bytes, $out_bytes) = $line =~ /^\s+RX bytes:(\d+).+TX bytes:(\d+).+/; + next unless defined $in_bytes; + $results->{$iface . '_in_bytes64'} = [$in_bytes, 'l']; + $results->{$iface . '_out_bytes64'} = [$out_bytes, 'l']; + } + } + return $results; +}; + +1;