Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

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
}