root / plugins / network / vnstat_month @ d7f54f3e
Historique | Voir | Annoter | Télécharger (2,07 ko)
| 1 |
#!/usr/bin/env perl |
|---|---|
| 2 |
use 5.010; |
| 3 |
use strict; |
| 4 |
use warnings; |
| 5 |
use autodie; |
| 6 |
use List::Util 'sum'; |
| 7 |
use experimental 'switch'; |
| 8 |
|
| 9 |
=head1 NAME |
| 10 |
|
| 11 |
vnstat_month - Run C<vnstat --dumpdb> and report usage this month |
| 12 |
|
| 13 |
=head1 SYNOPSIS |
| 14 |
|
| 15 |
Optionally, in In F</etc/munin/plugin-conf.d/munin-node>: |
| 16 |
|
| 17 |
# Set the max bandwidth to 800 GB per month |
| 18 |
[vnstat_month] |
| 19 |
env.limittt 800000 |
| 20 |
|
| 21 |
=head1 AUTHOR |
| 22 |
|
| 23 |
Ævar Arnfjörð Bjarmason <avar@cpan.org> |
| 24 |
|
| 25 |
=head1 LICENSE |
| 26 |
|
| 27 |
This program is in the public domain. |
| 28 |
|
| 29 |
=head1 MAGIC MARKERS |
| 30 |
|
| 31 |
#%# family=auto |
| 32 |
|
| 33 |
=cut |
| 34 |
|
| 35 |
my $limittt = $ENV{limittt};
|
| 36 |
|
| 37 |
given ($ARGV[0]) {
|
| 38 |
when ("config") {
|
| 39 |
print <<END; |
| 40 |
graph_title Total traffic this month |
| 41 |
graph_args --base 1000 --lower-limit 0 |
| 42 |
graph_vlabel Monthly traffic |
| 43 |
graph_category network |
| 44 |
graph_info Total network traffic in bytes. |
| 45 |
totaltx.label Sent |
| 46 |
totaltx.info Total data sent. |
| 47 |
totaltx.cdef totaltx,1000000,* |
| 48 |
totalrx.label Received |
| 49 |
totalrx.info Total data received. |
| 50 |
totalrx.cdef totalrx,1000000,* |
| 51 |
totaltt.label Total |
| 52 |
totaltt.info Total data sent & received. |
| 53 |
totaltt.cdef totaltt,1000000,* |
| 54 |
END |
| 55 |
if ($limittt) {
|
| 56 |
print <<END; |
| 57 |
limittt.label Limit |
| 58 |
limittt.info The data transfer limit for this month |
| 59 |
limittt.cdef limittt,1000000,* |
| 60 |
END |
| 61 |
} |
| 62 |
} |
| 63 |
default {
|
| 64 |
my @days = get_daylines(); |
| 65 |
my @relevant = grep {
|
| 66 |
my ($this_month) = localtime =~ /^\S+ (\S+)\b/; |
| 67 |
localtime($_->{time}) =~ /^\S+ $this_month\b/;
|
| 68 |
} @days; |
| 69 |
|
| 70 |
my $rx = sum( map { $_->{rx_mib} } @relevant );
|
| 71 |
my $tx = sum( map { $_->{tx_mib} } @relevant );
|
| 72 |
my $tt = $rx + $tx; |
| 73 |
|
| 74 |
print <<"END"; |
| 75 |
totalrx.value $rx |
| 76 |
totaltx.value $tx |
| 77 |
totaltt.value $tt |
| 78 |
END |
| 79 |
if ($limittt) {
|
| 80 |
print <<"END"; |
| 81 |
limittt.value $limittt |
| 82 |
END |
| 83 |
} |
| 84 |
} |
| 85 |
} |
| 86 |
|
| 87 |
sub get_daylines {
|
| 88 |
open my $vnstat, "vnstat --dumpdb |"; |
| 89 |
my @lines; |
| 90 |
while (my $line = <$vnstat>) {
|
| 91 |
chomp $line; |
| 92 |
my $ns = qr/[^:]+/; |
| 93 |
next unless $line =~ /^d;(?<day>$ns);(?<time>$ns);(?<rx_mib>$ns);(?<tx_mib>$ns);(?<rx_kib>$ns);(?<tx_kib>$ns);(?<in_use>$ns)$/; |
| 94 |
push @lines => { %+ };
|
| 95 |
} |
| 96 |
return @lines; |
| 97 |
} |
