#!/usr/bin/perl

=head1 NAME

netstat - Plugin to monitor network connections

=head1 CONFIGURATION

No configuration

=head1 NOTES

=head2 DESCRIPTION

This will measure the amount of network traffic coming into and
out of the server.  It will report back the number of connections
accepted, requested, established, and closed.  It uses
/usr/bin/netstat to gather its information.

=head2 RESTRICTIONS

None known.  /usr/bin/netstat should be executable by everyone by default.

=head1 AUTHOR

Unknown author

=head1 LICENSE

GPLv2

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut

use strict;

if (defined $ARGV[0] and $ARGV[0] eq "autoconf") {
    if(-e "/usr/bin/netstat" && -X "/usr/bin/netstat") {
        print "yes\n";
    } else {
        print "no\n";
    }
    exit 0;
} elsif (defined $ARGV[0] and $ARGV[0] eq "config") {
    print "graph_title Netstat\n";
    print "graph_args --base 1000 --logarithmic\n";
    print "graph_vlabel requests connections per \${graph_period}\n";
    print "graph_category network\n";
    print "requests.label requests\n";
    print "requests.type COUNTER\n";
    print "requests.max 50000\n";
    print "accepts.label accepts\n";
    print "accepts.type COUNTER\n";
    print "accepts.max 50000\n";
    print "established.label established\n";
    print "established.type COUNTER\n";
    print "established.max 50000\n";
    print "closed.label closed\n";
    print "closed.type COUNTER\n";
    print "closed.max 50000\n";
    exit 0;
}

my(%toFind) = ("requests" => "connection requests",
               "accepts" => "connection accepts",
               "established" => "connections established",
               "closed" => "connections closed ("
              );

my($item,$line,@lineArray);

foreach $item (keys(%toFind)) {
    $line = `/usr/bin/netstat -s|grep '$toFind{$item}'`;
    @lineArray = split(/ +/,$line);
    print "$item.value $lineArray[0]\n";
}
