2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/network/pgld

105 lines
2.1 KiB
Perl
Executable File

#!/usr/bin/env perl
# -*- perl -*-
=head1 NAME
pgld - Plugin to monitor Peer Guardian Linux blockrates
=head1 CONFIGURATION
[pgld]
env.pgldlog /var/log/pgl/pgld.log
=head1 LICENSE
GPLv2
=head1 AUTHOR
Daniel Lee <Longinus00@gmail.com>
=head1 MAGICK MARKERS
#%# family=network
#%# capabilities=autoconf
=cut
use strict;
use warnings;
use Munin::Plugin;
my $LOG = $ENV{'pgldlog'} || '/var/log/pgl/pgld.log';
sub trim {
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
sub autoconf {
if(-r $LOG) {
print "yes\n";
}
}
sub config {
print << "EOF";
graph_title Peer Guardian hits
graph_info This graph shows the number of connections blocked per minute
graph_args --base 1000 -l 0
graph_vlabel hits per minute
graph_category network
graph_period minute
hits.label hits
hits.type DERIVE
hits.min 0
EOF
}
if($ARGV[0] and $ARGV[0] eq "autoconf") {
autoconf
}
elsif($ARGV[0] and $ARGV[0] eq "config") {
config
}
else {
my $IP4 = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
my %positions = restore_state();
if(! -r $LOG) {
print "can't open $LOG for reading.\n";
}
elsif( exists $positions{$LOG} ) {
my $count = 0;
if( (stat $LOG)[7] < $positions{$LOG} ) {
my($fh_old, undef) = tail_open("$LOG.1", $positions{$LOG});
while(<$fh_old>) {
if( m/(IN|OUT): $IP4:\d+/ ) {
$count = $count + 1;
}
}
$positions{$LOG} = tail_close($fh_old);
}
my($fh, undef) = tail_open($LOG, $positions{$LOG});
while(<$fh>) {
if( m/(IN|OUT): $IP4:\d+\s*/ ) {
$count = $count + 1;
}
}
$positions{$LOG} = tail_close($fh);
$positions{'count'} = $positions{'count'} + $count;
}
else {
$positions{$LOG} = (stat $LOG)[7];
$positions{'count'} = 0;
}
print "hits.value $positions{'count'}\n";
if($positions{'count'} > 100000000) {
$positions{'count'} = 0;
}
save_state(%positions);
}